8

我正在使用 Postgres Amazon RDS 和 Amazon ECS 来运行我的 docker 容器。问题是。将RDS数据库的用户名和密码获取到ECS上运行的docker容器中的最佳实践是什么?

我看到几个选项:

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

您对执行此操作的最佳方法有何看法?我错过了任何选择吗?

问候,托拜厄斯

4

3 回答 3

12

从不建议将其构建到容器中。使其难以分发和更改。

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

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

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

于 2016-05-10T16:25:15.203 回答
4

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

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

本教程的屏幕截图说明了要去哪里。

全面披露:本教程包含来自 Bitnami 的容器,我为 Bitnami 工作。然而,这里表达的想法是我自己的,而不是 Bitnami 的意见。

于 2017-01-26T01:50:23.620 回答
2

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

我并不是说你不能这样做——我敢肯定有很多人正在这样做,但我也不会称之为“最佳实践”。使用 Amazon Secrets Manager 或 SSM Parameter Store 肯定更安全,尽管从那里获取凭证以供使用有其自身的挑战,并且在某些平台上,这些挑战可能会使配置数据库连接变得更加困难。

仍然 - 任何遇到这个问题的人至少都知道使用任务定义来保密似乎是一个好主意......应该说......皱眉?

于 2018-08-14T19:57:17.377 回答