我正在使用Postgres Amazon RDS和Amazon ECS来运行我的docker容器。 问题是。将RDS数据库的用户名和密码导入ECS上运行的docker容器的最佳做法是什么?
我看到了几个选项:
您对最佳方法有何看法?我错过了任何选择吗?
的问候, 托拜厄斯
答案 0 :(得分:10)
永远不会建议将它构建到容器中。使分发和更改变得困难。
将其放入ECS实例并不能帮助您的容器使用它。它们是孤立的,您可以在所有实例上使用它们,而不仅仅是容器所需的位置。
将它们放入S3意味着您必须将该功能写入容器中。而且它是另一个配置的地方。
建议将它们放入任务定义中。您可以使用environment
部分。它很灵活。此外,像Heroku和Elastic Beanstalk这样的PaaS产品如何使用数据库连接字符串来实现Ruby on rails和其他服务。最后一个好处是它可以轻松地将容器用于不同的数据库(如dev,test,prod),而无需重建容器或构建奇怪的功能
答案 1 :(得分:4)
接受的答案建议在任务定义中配置环境变量。此配置深埋在ECS Web控制台中。你必须:
This tutorial has screenshots说明了去哪里。
完全披露:本教程介绍了Bitnami的容器,我为Bitnami工作。然而,这里表达的想法是我自己的,而不是Bitnami的意见。
答案 2 :(得分:1)
就其价值而言,虽然在任务定义中将凭据放入环境变量中当然很方便,但通常认为它不是特别安全-其他进程可以访问您的环境变量。
我并不是说您不能以这种方式做-我敢肯定很多人都在这样做,但是我也不会称之为“最佳实践”。使用Amazon Secrets Manager或SSM参数存储绝对更安全,尽管将您的凭证从那里拿出来使用有其自身的挑战,并且在某些平台上,这些挑战可能会使配置数据库连接变得更加困难。
还是-似乎遇到这个问题的任何人至少应该意识到,使用任务定义作为机密是...应当这样说...皱眉吗?