我正在处理的应用程序有十几个秘密、SSL证书和API密钥。目前,我有一个添加到.gitignore中的文件,它包含了我所有的秘密。如何安全地保存所有这些秘密?企业应用程序是如何处理这一问题的,哪里的安全性是最重要的?
我正在查看AWS KMS,据我所知,我必须加密所有的秘密,提交它,然后在运行时传递我的AWS凭据来解密机密(用户只允许使用KMS密钥解密,并且不为用户添加其他权限)。
现在,假设运行容器的机器被破坏了-机密是加密的,所以这应该是好的,但是!如果运行docker inspect命令,它将显示所有环境变量( AWS机密),因此我将执行到容器中,我所要做的就是使用env变量解密机密。有点辜负了目的,还是我错过了一步?
注意:我当前的解决方案也不安全--文件是gitignored的,但是它仍然存在于运行容器的机器上(稍后,在构建映像之后,它们将作为env变量公开)。
注2: Git回购是私有的。
发布于 2017-03-06 21:40:17
一般来说,您必须为运行容器的实例提供比容器本身更严格的安全性,因为正如您所指出的,那里的妥协会影响下游的一切。运行ec2实例的VM主机也是如此。
一个标准的解决方案是通过环境变量将秘密传递到容器中。我还看到了一些解决方案(用于存储在Hashicorp中的机密),这些解决方案创建了一个fuse文件系统,并将其安装到容器中,或者使用Docker卷驱动程序进行类似的处理。这并不是很简单,但如果你传递了很多秘密,可能会更容易。
发布于 2017-06-18 14:05:35
码头机密是一种新的推荐方法,用于在容器中共享和存储秘密。Docker故意选择将机密存储在/run/secrets下的文件中,而不是环境变量方法。
https://security.stackexchange.com/questions/153147
复制相似问题