与 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,这将用户的范围限制在某些资源上,删除该部分现在可以使用了。
我正在尝试从 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,这将用户的范围限制在某些资源上,删除该部分现在可以使用了。