【发布时间】:2018-10-07 12:34:49
【问题描述】:
所以我已经配置了一个 OpenShift 3.9 构建配置,这样 environment variables are populated from an OpenShift secret 在构建时。我正在使用这些环境变量为图像的ENTRYPOINT 脚本中的 PostgreSQL 角色设置密码。
显然,这些环境变量被烘焙到映像中,不仅是构建映像,还包括生成的数据库映像。 (当在运行的容器中发出set 时,我可以看到它们的值。)一方面这似乎是必要的,因为ENTRYPOINT 脚本需要访问它们,并且它仅在映像运行时(而不是构建时)执行。另一方面,这有点令人不安,因为获得图像的 FWIK 现在可以提取这些密码。使用后取消设置环境变量不会改变这一点。
那么有没有更好的方法(甚至是最佳实践)以更安全的方式处理此类情况?
更新在这个阶段,我看到了两种可能的前进方式(首先是更好的选择):
配置
DeploymentConfig,使其mounts the secret 成为一个卷(不是:让BuildConfig从中填充环境变量)。
【问题讨论】:
-
如果只在运行时需要它们,难道你不能只在部署配置中定义它们吗?
-
@GrahamDumpleton 我在运行时这样做主要是因为数据库驻留在安装/持久卷上,所以 PostreSQL 的
initdb也发生在运行时。也许我错过了什么。 -
可能。您可以在
DeploymentConfig而不是BuildConfig中将机密内容作为环境变量使用。您无需切换到使用卷将其挂载为文件。 -
@GrahamDumpleton "... in
DeploymentConfig": 太好了,我下次试试。 -
@GrahamDumpleton 所以这似乎很好。再次,非常感谢!不过,我对另一点感到好奇:我尝试通过
oc exec ... bash-ing 对构建容器进行完整性检查,以通过set确认环境变量(尚)不存在。 OpenShift 对此进行了防范并报告:“不允许执行操作,因为 pod 的安全上下文超出了您的权限”。我是否可以在此 OpenShift 集群上以非管理员身份执行任何其他健全性检查?
标签: postgresql security openshift