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

Kyl*_*yle 1 security docker kubernetes

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

在kubernetes中,有一个用于处理机密的系统,但是您要么将这些机密作为env vars传递(使用envFrom),要么将它们作为可在文件系统中访问的文件挂载。

有什么理由比将它们作为env vars传递来更喜欢将秘密安装为文件吗?

如今,我已经变得更加热情和模糊,以为事情变得更加安全了,以至于我正在用k8s处理我的秘密。但是后来我意识到,最终,“秘密”的处理方式与我自己启动容器时使用docker run -e传递它们的方式相同。

BMi*_*tch 5

操作系统或应用程序不能非常安全地处理环境变量。分叉进程与分叉进程共享整个环境。日志和跟踪通常包含环境变量。对于整个应用程序来说,环境实际上是一个全局变量,它是可见的。

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

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

  • 此处列出的针对 env 的大多数参数也适用于存储为文件的秘密。一旦对手能够访问容器,文件或环境就没有什么区别了。唯一有效的论点是 env 变量会增加从日志和跟踪中泄露的风险。 (4认同)