在ECS上获取Docker容器的RDS密码的最佳实践

Tob*_*sen 6 amazon-ecs

我正在使用Postgres Amazon RDS和Amazon ECS来运行我的docker容器.问题是.将RDS数据库的用户名和密码导入ECS上运行的docker容器的最佳做法是什么?

我看到几个选项:

  • 将凭据构建​​到docker镜像中.我不喜欢这个,因为每个有权访问图像的人都可以获得密码.
  • 将凭据放在ECS自动缩放组使用的启动配置的用户数据中.使用此方法,在我的ECS群集上运行的所有docker镜像都可以访问凭据.我也不是那么喜欢.这样,如果黑帽在我的任何服务(甚至不使用数据库的服务)中发现安全漏洞,他将能够获得数据库的凭据.
  • 将凭据放入S3并使用ECS服务器具有的IAM角色控制对该存储桶的访问限制.将它们放入userdata也有同样的缺点.
  • 将凭据放在ECS的任务定义中.我没有看到任何缺点.

您对最佳方法的看法是什么?我错过了任何选择吗?

问候,托比亚斯

Mar*_*ung 11

从未建议将其构建到容器中.使分发和更改变得困难.

将其放入ECS实例并不能帮助您的容器使用它.它们是孤立的,你最终会在所有实例上使用它们,而不仅仅是需要它们的容器.

将它们放入S3意味着您必须将该功能写入容器中.这是另一个配置的地方.

建议将它们放入任务定义中.您可以使用此environment部分.它很灵活.这也是像Heroku和Elastic Beanstalk这样的PaaS产品如何使用Ruby on rails和其他服务的数据库连接字符串.最后的好处是它可以轻松地将容器用于不同的数据库(如dev,test,prod),而无需重建容器或构建奇怪的功能

  • 环境变量不是硬编码的,尤其是在任务定义中,您可以迭代它们,因为它们不在二进制文件(容器)中。此外,IAM 不允许您访问 RDS。RDS 是托管数据库,您仍然使用连接字符串(url、端口、用户名、密码)连接到它 (2认同)