kubernetes - Kubernetes 的秘密真的是秘密吗?
问题描述
在我开发 API 服务器时,我需要向 API 服务器提供一些帐户信息,这些信息不应该向任何人显示。K8s针对这种情况推荐secret,所以我用了。
但我想知道这个秘密是否真的是秘密。Secret 只是 base 64“编码”文本,而不是“加密”文本。
当我看到像下面这样的任意秘密时,
namespace: ZGVmYXVsdA==
通过解码我可以很容易地知道它的真正价值。
namespace: default
在这种情况下,秘密真的对安全有帮助吗?我所知道的秘密的安全优势是它是内存而不是节点文件系统。但我认为这还不够安全。
谢谢你。
解决方案
风险
- 在 API 服务器中,secret 数据存储在 etcd 中(默认情况下,etcd 数据不加密);所以:
- 管理员应该为集群数据启用静态加密(需要 v1.13 或更高版本)。
- 管理员应将 etcd 的访问权限限制为管理员用户。
- 管理员可能希望在不再使用时擦除/粉碎 etcd 使用的磁盘。
- 如果在集群中运行 etcd,管理员应确保使用 SSL/TLS 进行 etcd 对等通信。
- 如果您通过清单(JSON 或 YAML)文件配置密钥,该文件将密钥数据编码为 base64,则共享此文件或将其签入源存储库意味着密钥已泄露。Base64 编码不是一种加密方法,被认为与纯文本相同。
- 应用程序在从卷中读取它后仍然需要保护它的值,例如不意外地记录它或将其传输给不受信任的一方。
- 可以创建使用秘密的 Pod 的用户也可以看到该秘密的值。即使 API 服务器策略不允许该用户读取 Secret,用户也可以运行公开该 Secret 的 Pod。
- 目前,在任何节点上拥有 root 权限的任何人都可以通过模拟 kubelet 从 API 服务器读取任何秘密。这是一个计划的功能,只向实际需要它们的节点发送秘密,以限制根漏洞对单个节点的影响。
另请查看很棒的帖子Kubernetes 能否保守秘密?这完全取决于您使用的是什么工具,尤其是“ Kubernetes plain Secrets 有什么问题? ”部分..
我希望这回答了您的问题,但通常@Harsh Manvar 是正确的:您应该首先访问该秘密。
推荐阅读
- java - 在 Android 垃圾邮件上旋转屏幕保存的实例状态和 ActivityResultRegistry
- java - 401 on request where `permitAll()` 指定
- sql - 在 powershell 和 SQL 中转义双引号
- r - 在加载许多包时确定哪个版本的函数处于活动状态
- excel - 如果值在工作表 A 的列中但不存在于工作表 B 的列中,则将该值添加到工作表 B
- python - 是否可以将 .py 转换为包含所有图像和图标文件的单个 .exe 文件
- rdkit - 为什么 H 会因为 H 不存在的结构而出现微笑
- r - R/Shiny - 如何让工作表名称在上传后自动填写字段?
- powerbi - 有没有办法在 Power BI 中添加已经受到切片器影响的度量值?
- scheme - SICP/Scheme 中的 apply 函数