首页 > 解决方案 > Kubernetes 的秘密真的是秘密吗?

问题描述

在我开发 API 服务器时,我需要向 API 服务器提供一些帐户信息,这些信息不应该向任何人显示。K8s针对这种情况推荐secret,所以我用了。

但我想知道这个秘密是否真的是秘密。Secret 只是 base 64“编码”文本,而不是“加密”文本。

当我看到像下面这样的任意秘密时,

namespace: ZGVmYXVsdA==

通过解码我可以很容易地知道它的真正价值。

namespace: default

在这种情况下,秘密真的对安全有帮助吗?我所知道的秘密的安全优势是它是内存而不是节点文件系统。但我认为这还不够安全。

谢谢你。

标签: kubernetes

解决方案


来自Kubernetes Secrets 文档

风险

  • 在 API 服务器中,secret 数据存储在 etcd 中(默认情况下,etcd 数据不加密);所以:
    1. 管理员应该为集群数据启用静态加密(需要 v1.13 或更高版本)。
    2. 管理员应将 etcd 的访问权限限制为管理员用户。
    3. 管理员可能希望在不再使用时擦除/粉碎 etcd 使用的磁盘。
    4. 如果在集群中运行 etcd,管理员应确保使用 SSL/TLS 进行 etcd 对等通信。
  • 如果您通过清单(JSON 或 YAML)文件配置密钥,该文件将密钥数据编码为 base64,则共享此文件或将其签入源存储库意味着密钥已泄露。Base64 编码不是一种加密方法,被认为与纯文本相同。
  • 应用程序在从卷中读取它后仍然需要保护它的值,例如不意外地记录它或将其传输给不受信任的一方。
  • 可以创建使用秘密的 Pod 的用户也可以看到该秘密的值。即使 API 服务器策略不允许该用户读取 Secret,用户也可以运行公开该 Secret 的 Pod。
  • 目前,在任何节点上拥有 root 权限的任何人都可以通过模拟 kubelet 从 API 服务器读取任何秘密。这是一个计划的功能,只向实际需要它们的节点发送秘密,以限制根漏洞对单个节点的影响。

另请查看很棒的帖子Kubernetes 能否保守秘密?这完全取决于您使用的是什么工具,尤其是“ Kubernetes plain Secrets 有什么问题? ”部分..

我希望这回答了您的问题,但通常@Harsh Manvar 是正确的:您应该首先访问该秘密。


推荐阅读