构建 docker 图像(Python flask 服务器)时存储秘密的最安全方式

Most secure way to store secrets while building a docker image (Python flask server)

所以目前我正在为我的 python flask 服务器构建一个 docker 图像,我在代码中访问秘密变量的方式是 app.config["SECRET_KEY"] = os.environ.get("todo_secret_key") or "secret"

现在如果我想 运行 没有容器的代码,我会使用导出命令(linux)在环境中临时拥有密钥,但我需要它在容器的环境中。

现在,我知道的一些方法是

  1. 在 docker 运行 命令中用 -e 传递它 docker run {imageName} -e {name}={value} (不安全,因为我不希望它出现在终端日志中)

  2. 通过指定环境变量在docker文件中传递它(绝对不安全,因为这个文件会是public)

除了这些方法,有没有更安全的方法来传递变量

P.s第一次制作图片,如有问题请见谅

如果您担心这个 因为 您正在构建您的 docker,那么您正在尝试将您的运行时配置与您的构建时配置联系得太紧图片!

请记住,如果相互关联,这些阶段是离散的。

开发 -> 构建 -> 测试 -> 部署 -> 测试(非功能性) -> 重复...

任何阶段都不应决定未来阶段的作用。 docker build 是“构建”阶段,因此应该不知道最终部署映像时环境中的正确配置是什么。怎么可能呢?该配置可能会随着时间的推移而改变!

相反,请参考 configuration management 来处理这些类型的决定。您的 docker 调度程序(Kubernetes 很常见,但其他轻量级执行程序,如 Docker Swarm 或 ECS 也应该这样做)应该有一种读取配置文件并将其注入环境的方法。配置管理的完整讨论可以(并且已经)填满教科书。