将 RDS 密码获取到 ECS 上 docker 容器的最佳实践

Best practice for getting RDS password to docker container on ECS

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

我看到几个选项:

您认为最好的方法是什么?我错过了任何选项吗?

此致, 托比亚斯

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

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

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

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

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

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

This tutorial has screenshots说明去哪里。

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

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

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

不过,这个问题的任何人 运行 至少要意识到使用任务定义作为秘密似乎是个好主意……应该说……不受欢迎?