尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

kubesec密钥管理进阶:用多PGP密钥控制K8s Secret访问权限并安全轮换的实战指南

kubesec密钥管理进阶:用多PGP密钥控制K8s Secret访问权限并安全轮换的实战指南 kubesec密钥管理进阶用多PGP密钥控制K8s Secret访问权限并安全轮换的实战指南【免费下载链接】kubesecSecure Secret management for Kubernetes (with gpg, Google Cloud KMS and AWS KMS backends)项目地址: https://gitcode.com/gh_mirrors/kub/kubeseckubesec是一款专为 Kubernetes 打造的Secret 加密管理工具支持 PGPGnuPG、Google Cloud KMS 和 AWS KMS 三种后端。当团队多人协作、成员离职或密钥泄露时如何用多把 PGP 密钥精细控制谁能解密 Secret、又如何安全地完成密钥轮换正是本文要解决的进阶问题。一、为什么需要多 PGP 密钥管理 K8s Secret 默认的 Kubernetes Secret 以明文base64形式存储在 etcd 中一旦集群被攻破所有凭据直接暴露。kubesec 的做法是把 Secret 加密后提交到 Git 仓库只有持有对应解密密钥的人才能看到明文。单密钥模式的问题在于权限无法共享只有加密者自己能解密团队成员无法协作离职即瘫痪唯一持钥人离职整份 Secret 永久不可读无法最小化授权给 A 团队开的钥匙B 团队也能用。而 kubesec 天然支持多密钥共存同一个 Secret 可以被 2 把、5 把甚至更多 PGP 密钥同时封印任何一把密钥的持有者都能解开互不干扰。二、先搞懂原理一把 DEK 钥匙多把外锁 理解多密钥机制只需记住 cmd/encrypt.go 里的加密协议README.md 也有说明DEK数据加密密钥每个 Secret 随机生成一把 256 位 AES 密钥用它以 AES-GCM 模式加密data中的每一个值多把外锁这把 DEK 再分别被每一把 PGP 密钥加密并签名以注释行的形式附在 Secret 文件尾部一把钥匙一条注释解密时用你自己的 PGP 私钥解开属于自己的那条注释拿到 DEK再还原数据。# kubesec:v:3 # kubesec:pgp:160A7A9C...D89:Base64(用D89这把PGP密钥加密的DEK) # kubesec:pgp:72ECF46A...310:Base64(用310这把PGP密钥加密的DEK) # kubesec:mac:...关键结论加钥匙不动 DEK摘钥匙必换 DEK。这是后面所有轮换操作的地基源码见 cmd/encrypt.go 中的KeySetMutation.applyTo与RotateDEK方法。三、给团队加人追加 PGP 密钥的正确姿势 ➕1. 拿到新成员的 PGP 指纹让对方运行gpg --list-secret-keys --fingerprint复制 40 位指纹。2. 用前缀追加密钥kubesec encrypt -i --keypgp:160A7A9CF46221A56B06AD64461A804F2609FD89 secret.enc.yml表示在现有密钥集合上追加DEK 保持不变其他成员无需任何变动。PGP 密钥还可以和云 KMS 混用例如同时加一把 AWS KMSkubesec encrypt -i \ --keypgp:160A7A9CF46221A56B06AD64461A804F2609FD89 \ --keyaws:arn:aws:kms:us-west-1:000000000000:key/xxxx-xxxx secret.enc.yml⚠️ 注意/-前缀不能与不带前缀的--key...整体替换模式混用CLI 会直接报错退出逻辑见 kubesec.go 的buildKeySet函数。四、安全轮换移除离职人员密钥并自动换 DEK ✂️这是多密钥管理中最重要的一步。假设离职成员的指纹是...310kubesec encrypt -i --key-pgp:6206C32E111611688694CF5530BDA87E3E71C268 secret.enc.yml这条命令背后发生了两件事源码cmd/encrypt.go从密钥集合中摘除该指纹对应的注释行——离职者从此无法再解开新版本自动触发 DEK 轮换重新生成一把随机 DEK 和新 IV所有保留下来的密钥用新 DEK 重新封装。轮换安全清单 ✅步骤操作目的1kubesec introspect secret.enc.yml审计现状先看清谁有权限2--key-pgp:旧指纹移除密钥切断旧钥匙并强制换 DEK3提交并推送新文件新版本对旧钥匙失效4更新所有 Secret 明文旧版本文件仍在 Git 历史里5再次introspect复核确认密钥集合符合预期第 4 步最容易被忽略README 明确提醒——被移除的人可能还留着旧版本文件而旧版本的 DEK 他能解。所以轮换密钥的同时应把数据库密码、Token 等明文值也一并换掉做到人走、钥断、密变三位一体。五、用 introspect 一张命令摸清访问权限 kubesec introspect secret.enc.yml输出会按类型分组列出所有持钥者PGP 指纹 用户 ID未知密钥显示UNKNOWN、GCP KMS 密钥、AWS KMS 密钥。实现见 cmd/introspect.go。日常建议把introspect输出当作权限台账每次变更密钥集合前后各跑一次diff 一眼就能看出变化。若发现指纹旁显示UNKNOWN说明公钥还没导入本地可用gpg --recv-keys补全。六、进阶技巧让轮换更顺手的 3 个细节 1. Git 合并后 MAC 校验失败kubesec 对数据和密钥集合计算了 MACAES-GMACgit merge把文件尾部注释合并乱了就会报 MACs dont match。此时用kubesec edit -i --recompute-mac secret.enc.yml在编辑器里人工核对内容无误后保存即可重算 MAC。相关逻辑在 cmd/edit.go。2. CI/CD 无人值守解密自动化环境没有 gpg-agent 弹窗直接用--passphrase内联传递口令并可用--keyring指定专用密钥环避免污染默认 keyringkubesec decrypt --keyring ci.keyring --passphrasesecret secret.enc.yml | kubectl apply -f -参数解析见 kubesec.go 的PersistentPreRun钩子。命令行前的空格可避免口令进入 shell 历史。3. Yubikey 加持的硬件级防护私钥可保存在 Yubikey 上物理钥匙不在手就解不了密。密钥列表与权限解析含密钥能力位 e/s/c/a 的判断都在 gpg/gpg.go 中--list-secret-keys只放行具备Encrypt 能力的密钥。七、总结一句话记住多密钥管理 场景命令核心效果加人授权--keypgp:指纹追加外锁DEK 不变移除/离职--key-pgp:指纹摘除外锁DEK 强制轮换权限审计kubesec introspect查看持钥者台账合并冲突kubesec edit -i --recompute-mac人工确认后重算 MACkubesec 的多 PGP 密钥机制本质上就是DEK 为锁芯公钥为钥匙串加钥匙只是多配一把摘钥匙则必须换锁芯再配合人走密变的明文轮换就能让 K8s Secret 的访问权限始终与团队真实结构保持一致。 想零成本上手仓库自带 playground 镜像构建文件 kubesec-playground.dockerfile一条docker run就能带着预置的 GPG 环境开始练习。【免费下载链接】kubesecSecure Secret management for Kubernetes (with gpg, Google Cloud KMS and AWS KMS backends)项目地址: https://gitcode.com/gh_mirrors/kub/kubesec创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表