Docker和保护密码

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (195)

我最近一直在与Docker一起尝试构建一些服务以供玩耍,并且有一件事让我不停地唠叨我,一直在将密码放在Dockerfile中。我是一名开发人员,因此在源代码中存储密码看起来就像是一张脸。这应该是一个问题吗?是否有任何关于如何在Dockerfiles中处理密码的良好惯例?

提问于
用户回答回答于

Dockerfiles通常检入存储库并与其他人共享。另一种方法是在运行时提供任何凭据(用户名,密码,令牌,任何敏感的东西)作为环境变量。这可以通过-e参数(对于CLI上的单个变量)或--env-file参数(对于文件中的多个变量)来实现docker run

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

我最喜欢的模式是使用包装脚本作为ENTRYPOINTor CMD。包装脚本可以首先将外部位置的秘密在运行时导入容器,然后执行应用程序,提供秘密。其确切的机制取决于您的运行时环境。在AWS中,您可以使用IAM角色,密钥管理服务和S3的组合将加密的秘密存储在S3存储桶中。像HashiCorp Vault或credstash是另一种选择。

AFAIK没有使用敏感数据作为构建过程的一部分的最佳模式。事实上,我对这个话题有个疑问。您可以使用docker-squash从图像中移除图层。但是Docker中没有用于此目的的本地功能。

用户回答回答于

我们的团队避免将证书放在存储库中,这意味着他们不被允许进入Dockerfile。我们在应用程序中的最佳实践是使用来自环境变量的信用。

我们解决这个使用docker-compose

在其中docker-compose.yml,您可以指定一个包含容器环境变量的文件:

 env_file:
- .env

确保添加.env.gitignore,然后在.env文件内设置凭证,如:

SOME_USERNAME=myUser
SOME_PWD_VAR=myPwd

.env文件存储在本地或保存在其他团队可以抓取的安全位置。

请参阅:https//docs.docker.com/compose/environment-variables/#/the-env-file

扫码关注云+社区

领取腾讯云代金券