【发布时间】:2015-11-20 17:00:05
【问题描述】:
我有一个运行容器的 pod,这些容器需要访问 API 密钥和数据库密码等敏感信息。现在,这些敏感值嵌入到控制器定义中,如下所示:
env:
- name: DB_PASSWORD
value: password
然后在 Docker 容器中作为 $DB_PASSWORD 环境变量可用。一切都相当容易。
但是阅读他们在Secrets 上的文档时,他们明确表示将敏感配置值放入您的定义中违反了最佳实践,并且可能是一个安全问题。我能想到的唯一其他策略如下:
- 为每个用户社区或命名空间创建一个 OpenPGP 密钥
- 使用crypt将配置值设置为etcd(使用私钥加密)
- 创建一个包含私钥like so的kubernetes secret
- 将该秘密与容器相关联(这意味着私钥将作为卷挂载访问),like so
- 当容器启动时,它将访问卷挂载内的文件以获得私钥,并使用它来解密从 etcd 返回的 conf 值
- 然后可以将其合并到 confd 中,它会根据模板定义(例如 Apache 或 WordPress 配置文件)填充本地文件
这看起来相当复杂,但更安全和灵活,因为值将不再是静态的并以明文形式存储。
所以我的问题,我知道这不是一个完全客观的问题,这是否完全有必要?首先只有管理员才能查看和执行 RC 定义;因此,如果有人破坏了 Kubernetes 主控,您还有其他问题需要担心。我看到的唯一好处是没有秘密以明文形式提交到文件系统的危险......
还有其他方法可以安全地使用机密信息填充 Docker 容器吗?
【问题讨论】:
-
@larsks 但是秘密的定义文件不会以明文形式存储凭据吗?或者在 base64 中,可以很容易地解码。
-
是的,我误读了您已经在利用该 API 的事实。所以,没关系...
-
据我了解,Secrets 是传递敏感信息的方式,但它有其局限性。然而,这比直接在 ENV 变量中传递敏感信息要好。
-
回复。 “其他方式”:stackoverflow.com/questions/30749899/…
标签: security docker kubernetes confd