与 MongoDB Atlas 的 AWS EC2 连接失败,找不到用户

AWS EC2 connection to MongoDB Atlas failing, could not find user

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

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

是正确的角色,问题是atlas上注册的arn是角色之一: arn:aws:iam::030800513199: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.

与实例相关联

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