将AWS凭据(IAM角色凭证)传递给在docker容器中运行的代码

Ali*_*Ali 10 amazon-web-services amazon-iam docker

在EC2实例上运行代码时,用于访问AWS资源的SDK会自动与169.254.169.254上的本地链接Web服务器进行通信,并获取与其他AWS服务通信所需的AWS凭证(access_key,secret).

还有其他选项,比如在ENV变量中设置凭据或将它们作为命令行参数传递...

这里的最佳做法是什么?我真的更喜欢让容器访问169.254.169.254(通过路由请求),或者甚至更好地运行模拟真实服务器行为的代理容器169.254.169.254.

那里有解决方案吗?

dcr*_*cro 9

EC2元数据服务通常可以从docker中获得(除非您使用更自定义的网络设置 - 请参阅类似问题的答案).

如果您的搬运工人的网络设置阻止它被访问,您可以使用ENV指令在你Dockerfile或运行过程中直接通过他们,但是请记住,从IAM角色凭据自动AWS旋转.

  • 我对此架构遇到的一个问题(让容器内的 AWS SDK/CLI 访问 EC2 元数据端点以获取凭证)是我希望对容器将拥有的权限进行细粒度控制。一个容器可能只能写入 S3,而其他容器可能不希望有任何 S3 权限,而只是让它发布到 SNS。这种设计意味着我需要向 EC2 添加权限超集,并且我的所有容器都将具有相同的权限。 (2认同)