首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Docker和安全密码

Docker和安全密码
EN

Stack Overflow用户
提问于 2014-03-26 12:42:34
回答 10查看 127.6K关注 0票数 198

我最近一直在尝试使用Docker来构建一些服务,有一件事一直困扰着我,那就是把密码放在Dockerfile中。我是一名开发人员,所以在源代码中存储密码感觉就像是在脸上打了一拳。这是否应该引起人们的关注?关于如何处理Dockerfile中的密码,有什么好的约定吗?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2014-03-26 13:59:08

这肯定是一个令人担忧的问题。Dockerfile通常签入到存储库并与其他人共享。另一种方法是提供任何凭据(用户名、密码、令牌、任何敏感内容) as environment variables at runtime。这可以通过docker run-e参数(对于CLI上的单个var)或--env-file参数(对于文件中的多个变量)来实现。阅读this了解如何通过docker-compose使用环境。

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

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

我更喜欢的模式是使用包装器脚本作为ENTRYPOINTCMD。包装器脚本可以首先在运行时将机密从外部位置导入到容器中,然后执行应用程序,提供机密。根据您的运行时环境的不同,具体的机制会有所不同。在亚马逊网络服务中,您可以使用IAM角色、Key Management Service和S3的组合在S3存储桶中存储加密的秘密。像HashiCorp Vaultcredstash这样的东西是另一种选择。

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

你可能会发现shykes comments on config in containers很有用。

票数 127
EN

Stack Overflow用户

发布于 2015-08-01 06:41:29

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

我们使用docker-compose来解决这个问题。

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

代码语言:javascript
复制
 env_file:
- .env

确保将.env添加到.gitignore,然后在.env文件中设置凭据,如下所示:

代码语言:javascript
复制
SOME_USERNAME=myUser
SOME_PWD_VAR=myPwd

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

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

票数 90
EN

Stack Overflow用户

发布于 2017-07-14 01:40:44

Docker现在(版本1.13或17.06及更高版本)支持管理秘密信息。下面是一个overview和更详细的documentation

kubernetesDCOS中也存在类似的功能

票数 37
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22651647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档