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

时间:2016-05-10 08:46:56

标签: amazon-ecs

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

我看到了几个选项:

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

您对最佳方法有何看法?我错过了任何选择吗?

的问候, 托拜厄斯

3 个答案:

答案 0 :(得分:10)

永远不会建议将它构建到容器中。使分发和更改变得困难。

将其放入ECS实例并不能帮助您的容器使用它。它们是孤立的,您可以在所有实例上使用它们,而不仅仅是容器所需的位置。

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

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

答案 1 :(得分:4)

接受的答案建议在任务定义中配置环境变量。此配置深埋在ECS Web控制台中。你必须:

  1. 导航到任务定义
  2. 选择正确的任务和修订
  3. 选择创建新修订(不允许编辑现有修订)
  4. 向下滚动到容器部分,然后选择正确的容器
  5. 向下滚动到Env变量部分
  6. 添加您的配置
  7. 保存配置和任务修订
  8. 选择使用新任务修订
  9. 更新服务

    This tutorial has screenshots说明了去哪里。

    完全披露:本教程介绍了Bitnami的容器,我为Bitnami工作。然而,这里表达的想法是我自己的,而不是Bitnami的意见。

答案 2 :(得分:1)

就其价值而言,虽然在任务定义中将凭据放入环境变量中当然很方便,但通常认为它不是特别安全-其他进程可以访问您的环境变量。

我并不是说您不能以这种方式做-我敢肯定很多人都在这样做,但是我也不会称之为“最佳实践”。使用Amazon Secrets Manager或SSM参数存储绝对更安全,尽管将您的凭证从那里拿出来使用有其自身的挑战,并且在某些平台上,这些挑战可能会使配置数据库连接变得更加困难。

还是-似乎遇到这个问题的任何人至少应该意识到,使用任务定义作为机密是...应当这样说...皱眉吗?