在普通的 EC2 环境中,使用 IAM 角色和凭证(自动从实例元数据中获取)管理对其他 AWS 资源的访问相当简单。使用 CloudFormation 甚至更简单,您可以在将特定应用程序角色分配给实例时动态创建角色。
如果我想迁移到 Docker 并进行 M-to-N 部署,其中有 M 台机器,上面运行着 N 个应用程序,我应该如何限制对每个应用程序 AWS 资源的访问?主机上的任何人都可以访问实例元数据,因此我希望每个应用程序都能够查看/修改同一部署环境中其他每个应用程序的数据。
为在这种环境中运行的应用程序容器提供安全凭证的最佳实践是什么?
答案1
有这个项目:https://github.com/dump247/docker-ec2-metadata
它充当实例元数据端点的代理,返回特定于容器的角色。我以前没有用过它,但它似乎解决了您描述的用例。
答案2
在 AWS 中使用角色和安全组 (即使您没有提到它们) 应用最小权限和 EC2 都是为托管应用程序提供安全环境的最佳实践,尤其是在使用 CloudFormation 时。但是,当您在此基础上分层多租户 Docker 环境时,事情就开始崩溃了。
目前,要想在应用最小权限的同时继续获得角色的好处,最好的答案就是不要使用多租户方法。基本上,在 EC2 实例和应用程序之间使用一对一映射,但您仍然可以使用集群/ASG。Docker 仍然是一个非常有用且功能强大的工具,您可以用它来管理和部署应用程序,但目前角色适用于 EC2 实例而不是容器。这意味着现在每个应用程序使用单独的虚拟机。
如果多租户比角色更重要,那么答案就是不使用角色,而是使用其他方法将 AWS 凭证分发给您的应用程序。
不幸的是,这两种解决方案都不太理想,我预计这个特定的痛点将在未来由 AWS 解决,这主要归功于容器的日益普及。