security - Docker 和保护密码

标签 security build 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 Vaultcredstash是另一种选择。

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

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

关于security - Docker 和保护密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22651647/

相关文章:

security - 导出证书 - 有或没有私钥

visual-studio-2010 - 极简 Qt 构建的推荐标志

asp.net-mvc - 防止更改隐藏字段

android - 在 Android 上使用 https 有多安全?

c++ - Qt Creator 找不到cl.exe(VS2012)编译器

python-3.x - 如何从Python脚本运行Perl程序,同时接收日志并避免脚本返回代码崩溃:-9

docker - 如何在Docker中用新镜像修补现有镜像?

docker - docker-compose .yml文件中的变量替换

asp.net - 从 ASP.NET 查询远程计算机时出现 WMI 访问被拒绝错误

ios - 同一应用程序的不同构建