知识卡片

Secrets不是真正的加密

专业/工作 · 528.a

内容

Kubernetes Secret 这个名字容易让人误以为里面的数据是加密的,实际上它只是做了 Base64 编码,而编码和加密是两回事——Base64 是可逆的公开算法,任何人拿到 Secret 内容用 base64 –decode 一秒就能还原明文,不需要任何密钥。这意味着直接把 Secret 的 YAML 提交进 Git 仓库和提交明文密码没有本质区别。真正解决”密钥要不要能安全地存进 Git”这个问题,靠的是额外的机制:Bitnami Sealed Secrets 在提交前把内容真正加密,只有集群内的控制器持有私钥能解密还原;External Secrets 则干脆不把密钥内容放进仓库,只放一个指向外部密钥库(如 HashiCorp Vault)的引用清单,实际取值在运行时从外部拉取。发散:这是一个典型的”名字带来的错误安全感”案例——不去读实现细节、只看资源类型叫 Secret 就默认它安全,是配置管理里最容易踩的坑之一。

参考来源

《Cloud Native Spring in Action》第14章《Configuration and secrets management》