gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 07:15:05 28 4
gpt4 key购买 nike

我正在尝试从 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 用户的 key 放入 .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 与实例关联。

最佳答案

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

关于mongodb - AWS EC2 与 MongoDB Atlas 的连接失败,找不到用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71583699/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com