在过去的几天里,我一直在构建一个使用docker-compose启动的后端。我使用docker秘密是为了不必在环境变量中存储密码(例如数据库的密码)。
由于我想使用AWS ECS在线运行docker容器,不幸的是docker撰写不支持我想要的方式,我试图将整个事情重写为ECS撰写文件。然而,我仍然被这些秘密所困。我想这样包含它们:
version: 1
task_definition:
...
services:
my-service:
...
secrets:
- value_from: DB_USERNAME
name: DB_USERNAME
- value_from: DB_PASSWORD
name: DB_PASSWORD
通过这样做,秘密被保存在环境变量中,不是吗?这不是最佳实践,或者这种情况与其他情况不同吗?
我可以通过获取环境变量在容器内访问这些变量而没有问题吗?
我希望我的问题已经说清楚了,如果没有,请再问一遍。提前感谢您的帮助。
将敏感信息存储在环境变量中并不是最佳实践。在AWS ECS中有一个选项,您可以在其中配置环境变量并从AWS Secrets Manager获取这些变量的值。这样,环境变量只在运行时在容器内解析。
但是这仍然意味着容器将把变量作为环境变量存储。
在将应用程序部署到EKS时,我遇到了类似的情况。我已经为AWS中的秘密管理设置了一个中央保管库服务器,并将我的应用程序配置为直接调用保管库端点来获取秘密。我必须使我的体系结构复杂化,因为我必须满足PCI遵从性标准。如果你不热衷于使用vault,因为它的复杂性,你可以尝试knox-app (https://knox-app.com/),这是一个由lyft工程师建立的在线秘密管理工具。
回答你问题的第二部分——是的。如果您设置了env变量,您将能够在容器内访问它们而没有任何问题。