【问题标题】:AWS EC2 connection to MongoDB Atlas failing, could not find userAWS EC2 与 MongoDB Atlas 的连接失败,找不到用户
【发布时间】:2022-06-20 20:55:29
【问题描述】:

我正在尝试从 ec2 连接到 atlas 集群,但是如果我尝试通过代码 (nodejs) 或通过 cli 尝试,我会收到以下错误:

MongoError: Could not find user "arn:aws:sts::***:assumed-role/designspecs-staging-design-Api-1U4X5W-InstanceRole-1TTX7XR8B1D7N/*" for db "$external"

是对的角色,问题是atlas上注册的arn就是角色之一: arn:aws:iam::***:role/designspecs-staging-design-Api-1U4X5W-InstanceRole-1TTX7XR8B1D7N

我无法注册 STS,因为 atlas 说它是无效的 arn。

这是 mongodb 应该检索的实例角色。如果我将 iam 用户的密钥放入 .env 文件中,并将该用户设置为 Atlas 的数据库用户,则它可以工作(因为检索到的 arn 是正确的)。

我错过了什么吗?如何在不使用密码的情况下将 EC2 连接到 atlas?

为了完整起见,我应该说我没有明确承担任何角色,这是连接代码:

const remoteDb = `${MONGO_DATABASE_HOST}/${MONGO_DATABASE_NAME}?authSource=%24external&authMechanism=MONGODB-AWS&retryWrites=true&w=majority`;
const localDb = `mongodb://${MONGO_DATABASE_USERNAME}:${MONGO_DATABASE_PASSWORD}@${MONGO_DATABASE_HOST}:27017/${MONGO_INITDB_DATABASE}`;

const mongoURL = process.env.END !== 'dev' ? remoteDb : localDb;

const connect = () =>
    mongoose
        .connect(mongoURL, config)
        .then(() => {
            console.log('[MongoDB] CONNECTED!');
        })
        .catch(err => {
            console.error(err);
            console.error(`[MongoDB] ERRROR: NON CONNECTED! -> ${mongoURL}`);
        });

connect();

module.exports = mongoose.connection;

当我在远程时 MONGO_DATABASE_HOST 是 srv 连接字符串。 所有基础设施均使用 AWS Cloudformation 构建,角色通过 AWS::IAM::InstanceProfile 与实例相关联。

【问题讨论】:

    标签: mongodb amazon-ec2 amazon-cloudformation amazon-iam mongodb-atlas


    【解决方案1】:

    我发现这是 atals 用户范围给出的问题。该用户曾经存在,问题是他无权查看我要连接的特定集群。 这个错误是因为我使用 aws quickstart 模板来部署 mongodb,这将用户的范围限制为某些资源,现在删除该部分它可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-29
      • 2018-06-13
      • 2021-01-18
      • 2021-04-27
      • 1970-01-01
      • 2021-02-14
      • 1970-01-01
      相关资源
      最近更新 更多