【发布时间】: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