将秘密作为文件装载而不是将其作为环境变量通过Kubernetes上的Docker传递给环境是否有安全优势?

时间:2019-04-10 19:31:52

标签: docker security kubernetes

对于Docker,有讨论(共识?),通过运行时环境变量传递秘密不是一个好主意,因为它们仍然可以作为系统变量使用,并且因为它们是通过docker inspect公开的。

在kubernetes中,有一个用于处理机密的系统,但是您要么将这些机密作为env vars(使用envFrom)进行传递,要么将其作为文件可装载到文件系统中。

有没有理由将机密文件作为文件而不是将其作为环境变量传递?

我现在所有的热情和模糊的想法都变得更加安全,以至于我正在用k8s处理我的秘密。但是后来我意识到,最后,“秘密”的处理方式与我自己启动容器时使用docker run -e传递它们的方式一样。

3 个答案:

答案 0 :(得分:4)

操作系统或应用程序不能非常安全地处理环境变量。分叉进程与分叉进程共享整个环境。日志和跟踪通常包含环境变量。环境对于整个应用程序都是有效的全局变量。

文件可以直接读取到应用程序中,并由所需的例程处理,并作为不与其他方法或分支过程共享的局部变量进行处理。通过群模式机密,这些机密文件将被注入到工作进程中的tmpfs文件系统中,而该系统从未写入磁盘。

任何有权检查容器的人都可以看到作为环境变量注入到容器配置中的秘密。通常,这些变量会提交到版本控制中,从而使其更加可见。通过将机密分为标记为隐私的单独对象,您可以比环境变量等开放式配置更轻松地对其进行不同的管理。

答案 1 :(得分:1)

是,因为安装时,通过docker inspect或其他Pod管理工具看不到实际值。此外,您还可以在主机的文件系统级别对这些文件强制执行文件级别的访问。

更多建议阅读的内容在这里Kubernets Secrets

答案 2 :(得分:0)

Kearse中的秘密用来存储敏感信息,例如密码,ssl证书。

您绝对希望将ssl证书作为文件安装在容器中,而不是从环境变量中获取它们 les。