Kubernetes 秘密真的是秘密吗?

Tog*_*omi 5 kubernetes

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

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

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

namespace: ZGVmYXVsdA==
Run Code Online (Sandbox Code Playgroud)

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

namespace: default
Run Code Online (Sandbox Code Playgroud)

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

谢谢。

Vit*_*Vit 5

来自Kubernetes Secrets 文档

\n

风险

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

另请查看精彩帖子Kubernetes 能保守秘密吗?这完全取决于您\xe2\x80\x99使用的工具,特别是“ Kubernetes plain Secrets 有什么\xe2\x80\x99s 错误吗? ”部分。

\n

我希望这回答了你的问题,但一般来说@Harsh Manvar 是对的:你应该首先有权访问该秘密。

\n