繁体   English   中英

MongoAtlas AWS IAM 角色身份验证

[英]MongoAtlas AWS IAM Role Authentication

我正在为我公司的 API 服务器设置部署,它无法通过 IAM 角色连接到 MongoAtlas

我做了什么:

  1. 在 AWS (APIServer) 上设置 IAM 角色
  2. 使用角色 (arn:aws:iam::< my aws acc id >:role/APIServer) 在 Atlas 上设置数据库用户
  3. 配置启动模板和自动缩放组,启动具有该角色的 Amazon Linux EC2 实例
  4. 使用以下设置让我的 NodeJS 应用程序连接到我的 Atlas:
钥匙 价值
URL mongodb+srv://dev.<cluster>.mongodb.net/<DB>
授权来源 '$外部'
授权机制 'MONGODB-AWS'

我最终收到以下错误消息

MongoServerError: bad auth : user arn:aws:sts::<my aws acc id>:assumed-role/APIServer/* is not found

注意:包含在 <> 中的信息是有意替换的,因为我已经找到了几个解决方案指出将 <> 作为密码的一部分,这不是我这里的情况

我有同样的问题,到目前为止我发现的唯一解决方案是创建一个 aws iam 用户(不是角色,因此您可以生成安全凭证),在 atlas 上设置该用户并将用户的安全凭证放入 a. .env 文件在您的节点应用程序中。 这样 mongodb 将自动检索该用户并且它可以工作,因为您没有担任角色,所以 arn 是正确的。 这对我来说仍然不是一个好的解决方案,因为我不想管理这些密钥。 您可以做的最好的事情可能是将这些凭据存储在 aws secrets manager 中,授予 ec2 角色检索该密钥的权限,当您使用脚本启动实例时,您可以自动检索该密钥并创建 .env 文件。 (对我来说仍然是一个令人失望的解决方案)


编辑:正如我在这篇文章中自己回答的那样: AWS EC2 connection to MongoDB Atlas failed, could not find user

我的解决方案是更改 Atlas 用户的 scope。

您需要AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN才能连接。 您可以从 AWS IAM > Users仪表板获取/创建它们。 我建议为 mongo 创建一个新的密钥。

创建后,如果您已经有一个集群,您可以从 mongodb 网站获取连接字符串。

示例 URL:

mongodb+srv://<AWS access key>:<AWS secret key>@cluster0.zphy22p.mongodb.net/?authSource=%24external&authMechanism=MONGODB-AWS&retryWrites=true&w=majority&authMechanismProperties=AWS_SESSION_TOKEN:<session token (for AWS IAM Roles)>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM