【问题标题】:Importance of password security within kubernetes namespaces?Kubernetes 命名空间中密码安全的重要性?
【发布时间】:2019-07-07 07:32:49
【问题描述】:

在使用 Kubernetes(和 Helm)设置自动化部署时,我多次遇到以下问题:

单个命名空间内的服务密码(例如 mysql)的安全性有多重要?

我的想法:这根本不重要。为什么?无论如何,所有相关的 pod 都包含密码,并且服务在特定命名空间之外不可用。尽管有人可以访问该特定命名空间中的 pod,但printenv 会为他提供所需的一切。

我的具体案例(Helm): 如果我将 mysql 服务器设置为要求(requirements.yaml),我不必使用任何秘密或努力共享 mysql 密码并且可以在 values.yaml 中提供密码。

【问题讨论】:

    标签: kubernetes kubernetes-helm


    【解决方案1】:

    虽然 Kubernetes 机密不是 机密,但它们比 Helm 值更机密。从根本上说,我建议这个问题更多的是关于您对数据库密码的信任程度,而不是任何特定过程。我想到了三种方法:

    1. 您通过 Helm 值传递数据库密码。 Helm 不是特别受访问控制的,因此任何可以helm installhelm rollback 的人也可以helm get values 并找出密码。如果您不关心这些人是否有密码(所有部署都通过自动化系统运行;所有部署都由拥有所有密码的 devops 团队运行;您是一家 10 人的初创公司),那么这很有效。

    2. 数据库密码在RBAC保护的Secret中。可以使用Kubernetesrole-based access control,普通用户无法直接读取Secrets的内容。一些管理员创建 Secret,Pod 将其挂载或作为环境变量注入。现在你自己不需要密码就可以部署,而且你不能随便提取它(但如果你可以启动任意容器,把它转储出来也不是什么工作量)。

      李>
    3. 应用程序在启动时从某个外部来源获取数据库密码。 Hashicorp 的 Vault 是我在这里使用的解决方案:Pod 使用 Kubernetes 服务帐户运行,它用于从 Vault 获取令牌,然后使用它来获取数据库密码。 advanced version of this 分发一次性凭证,可以追溯到特定的 Pod 和服务帐户。这是最复杂的路径,但也是最安全的。

    【讨论】:

    • 谢谢! Vault 看起来是一个不错的解决方案,但对于我当前的用例来说工作量太大,但我可能会将它用于未来的项目。现在我可能会坚持使用 Gitlabs Secrets,就像你的 2. 方法一样处理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多