【问题标题】:AWS lambda getting 'unauthorized to perfrom action' when using MongoClient, works fine with mongoose, works fine when running command from shellAWS lambda 在使用 MongoClient 时获得“未授权执行操作”,与 mongoose 一起工作正常,从 shell 运行命令时工作正常
【发布时间】:2020-01-29 17:28:12
【问题描述】:

这是架构: 我有一个在 EC2 上运行的 MongoDB。当我 ssh 到 EC2 并运行 mongo dbname -u username -p password 时,我能够对集合执行插入操作,这意味着用户有权在 dbname 中对集合执行插入操作

另一方面,我有一个 AWS lambda,配置了 VPC。使用 mongodb.MongoClient 连接时,我已通过身份验证,并且 client.isConnected() 返回 true,但 db.collection().insertOne(...) 引发错误,提示我无权对 dbname 执行操作插入。 用于连接的连接字符串包含用于连接到 mongo shell 的相同用户名和密码。 我尝试使用相同的选项连接到 mongodb,但改用 mongoose 并没有引发任何错误

【问题讨论】:

    标签: node.js mongodb amazon-web-services mongoose


    【解决方案1】:

    使用的连接字符串是什么? 你能尝试模拟 lambda 在本地做什么吗?您可以尝试使用您的 lambda 使用的相同连接字符串将本地 mongo 客户端连接到您的数据库吗?

    您是否连接到正确的数据库?您的用户设置是在自定义数据库上还是在默认管理员数据库上?您的更新权限设置在正确的数据库上吗?

    【讨论】:

    • 格式为 mongodb://username:password@host:27017/dbname 由于 VPC,我无法使用相同的连接字符串运行 lambda。是的,我正在连接到正确的数据库,因为当我通过 SSH 连接到 EC2 并查看 mongo 日志时,我可以看到我正在连接并且日志显示 Successfully authenticated as principal username on dbname from client ... 但下一行显示 Unauthorized: not authorized on dbname to execute command insert 用户设置在自定义数据库和权限已设置,因为我能够在 shell 中以用户用户名的身份运行这些命令
    • 我在尝试使用 pymongo MongoClient 时遇到了同样的问题。在 nodeJS 中使用猫鼬,我使用了以下 const options = { tls: true, tlsinsecure: true, checkServerIdentity: false, auth: { user: String(process.env.MONGO_USERNAME), password: String(process.env.MONGO_PASSWORD), authSource: String(process.env.MONGO_SOURCE) } }; mongoose.connect(MONGO_URL, options) 有了这个我就可以插入
    猜你喜欢
    • 1970-01-01
    • 2013-04-19
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多