security - Docker 和保护密码

我最近一直在尝试使用 Docker 来构建一些可以使用的服务,而一直困扰我的一件事是将密码放入 Dockerfile 中。我是一名开发人员,因此将密码存储在源代码中感觉就像是一记重拳。这应该是一个问题吗?关于如何处理 Dockerfiles 中的密码,有什么好的约定吗?

最佳答案

这绝对是一个问题。 Dockerfile 通常被检入存储库并与其他人共享。另一种方法是提供任何凭据(用户名、密码、 token 、任何敏感信息)as environment variables at runtime .这可以通过 -e 参数(用于 CLI 上的单个变量)或 --env-file 参数(用于文件中的多个变量)到 docker运行。阅读 this在 docker-compose 中使用环境。

使用 --env-file 绝对是一个更安全的选择,因为如果使用 set -x,这可以防止出现在 ps 或日志中的 secret .

然而,环境变量也不是特别安全。它们通过 docker inspect 可见,因此任何可以运行 docker 命令的用户都可以使用它们。 (当然,任何有权访问主机上的 docker 的用户也是 has root。)

我的首选模式是使用包装脚本作为 ENTRYPOINTCMD。包装器脚本可以在运行时首先将 secret 从外部位置导入到容器中,然后执行应用程序,提供 secret 。其确切机制因您的运行时环境而异。在 AWS 中,您可以使用 IAM 角色的组合,即 Key Management Service和 S3 将加密的 secret 存储在 S3 存储桶中。像 HashiCorp Vault或 credstash是另一种选择。

AFAIK 没有在构建过程中使用敏感数据的最佳模式。事实上,我有一个 SO question关于这个话题。您可以使用docker-squash从图像中删除图层。但是 Docker 中没有用于此目的的 native 功能。

你可能会发现害羞 comments on config in containers有用。

https://stackoverflow.com/questions/22651647/

相关文章:

javascript - `npm build` 没有在 package.json 中构建 't r

java - 使用 gradle 的多项目测试依赖项

android - 错误 :Execution failed for task ':app:comp

configuration - 在 Xcode 中添加构建配置

java - 如何在 Maven 中读取外部属性文件

java - 构建与编译 (Java)

visual-studio - 发生代码更改时,Visual Studio 2010 不会在运行前构

Xcode - 但是......我们的文件在哪里?

iphone - 重新签署 IPA (iPhone)

java - Java 项目的构建和版本编号(ant、cvs、hudson)