【问题标题】:Handling OpenShift secrets in a safe way after extraction into environment variables提取到环境变量后以安全的方式处理 OpenShift 机密
【发布时间】:2018-10-07 12:34:49
【问题描述】:

所以我已经配置了一个 OpenShift 3.9 构建配置,这样 environment variables are populated from an OpenShift secret 在构建时。我正在使用这些环境变量为图像的ENTRYPOINT 脚本中的 PostgreSQL 角色设置密码。

显然,这些环境变量被烘焙到映像中,不仅是构建映像,还包括生成的数据库映像。 (当在运行的容器中发出set 时,我可以看到它们的值。)一方面这似乎是必要的,因为ENTRYPOINT 脚​​本需要访问它们,并且它仅在映像运行时(而不是构建时)执行。另一方面,这有点令人不安,因为获得图像的 FWIK 现在可以提取这些密码。使用后取消设置环境变量不会改变这一点。

那么有没有更好的方法(甚至是最佳实践)以更安全的方式处理此类情况?

更新在这个阶段,我看到了两种可能的前进方式(首先是更好的选择):

  1. 配置DeploymentConfig,使其mounts the secret 成为一个卷(不是:让BuildConfig 从中填充环境变量)。

  2. 秘密存储 PostgreSQL password hashes(不是:逐字密码)。

【问题讨论】:

  • 如果只在运行时需要它们,难道你不能只在部署配置中定义它们吗?
  • @GrahamDumpleton 我在运行时这样做主要是因为数据库驻留在安装/持久卷上,所以 PostreSQL 的 initdb 也发生在运行时。也许我错过了什么。
  • 可能。您可以在DeploymentConfig 而不是BuildConfig 中将机密内容作为环境变量使用。您无需切换到使用卷将其挂载为文件。
  • @GrahamDumpleton "... in DeploymentConfig": 太好了,我下次试试。
  • @GrahamDumpleton 所以这似乎很好。再次,非常感谢!不过,我对另一点感到好奇:我尝试通过oc exec ... bash-ing 对构建容器进行完整性检查,以通过set 确认环境变量(尚)不存在。 OpenShift 对此进行了防范并报告:“不允许执行操作,因为 pod 的安全上下文超出了您的权限”。我是否可以在此 OpenShift 集群上以非管理员身份执行任何其他健全性检查?

标签: postgresql security openshift


【解决方案1】:

正如评论中所建议的,将环境变量的提供从秘密从BuildConfig 转移到DeploymentConfig 是有意义的。供参考:

oc explain bc.spec.strategy.dockerStrategy.env.valueFrom.secretKeyRef
oc explain dc.spec.template.spec.containers.env.valueFrom.secretKeyRef

【讨论】:

  • @GrahamDumpleton 除非我弄错了,否则这种方法有一个明显的缺点,即oc describe pods/my-deployed-podEnvironment: 下逐字列出密码值。在这种情况下,安全性应该取决于只有授权用户能够运行此命令,还是通过挂载的卷访问这些机密不是更好?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-10
  • 2021-06-09
  • 2014-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-02
相关资源
最近更新 更多