CI/CD 密钥治理:流水线越自动,凭证越要收紧
CI/CD 密钥治理流水线越自动凭证越要收紧一、自动化流水线最怕凭证到处飞CI/CD 自动化越完善流水线能做的事情越多拉代码、构建镜像、推送仓库、部署集群、发布制品、通知系统。能力越大凭证风险越高。如果一个长期 token 能从构建一直打到生产集群泄露后影响面会非常大。密钥治理不是把变量放进 CI 平台就结束。要看凭证来源、权限范围、生命周期、审计记录和泄露后的撤销速度。流水线越自动凭证越要短、窄、可追踪。二、凭证应该按阶段最小化构建、扫描、发布、部署每个阶段需要的权限不同。flowchart TD A[代码检出] -- B[依赖安装] B -- C[构建镜像] C -- D[安全扫描] D -- E[推送制品] E -- F[部署环境] B -- G[只读包源凭证] E -- H[制品仓库写权限] F -- I[环境部署权限]不要用一个万能凭证贯穿全流程。构建阶段不应该拥有生产部署权限扫描阶段也不应该拥有写集群权限。三、密钥要避免落入日志和镜像层下面是一个风险检查思路。git grep -n TOKEN\\|PASSWORD\\|SECRET . docker history image trivy fs .这些命令不能替代完整治理但能发现一部分硬编码和镜像层泄露。更可靠的方式是用 CI 平台的 secret 管理、临时凭证和最小权限服务账号。四、短期凭证比长期 token 更适合流水线长期 token 最大的问题是生命周期太长。一个月前泄露今天可能还有效。OIDC 联邦、临时 STS 凭证、按 job 签发的短期 token会明显降低泄露后的影响。还要限制密钥可见范围。只有受保护分支、受保护环境和经过审批的 job 才能读取生产凭证。PR 流水线尤其要小心来自外部贡献的代码不应该接触敏感变量。审计必须能回答谁在什么时候用什么凭证做了什么。没有审计密钥治理只能靠信任。出现异常部署、异常推送或异常访问时追不到 job 和提交就很难快速止损。最后密钥轮换要演练。很多团队写了轮换制度但从来没真正换过。一旦事故发生才发现凭证散落在脚本、平台变量和人工文档里。能定期轮换才说明密钥管理真的可控。还要给不同环境设置独立凭证。开发、测试、预发、生产共用同一套 token是非常危险的省事。低环境权限被滥用时不应该能影响生产生产凭证也不应该出现在普通调试 job 里。流水线日志要做脱敏和阻断。即使 CI 平台支持 secret mask也不能完全依赖它。脚本set -x、工具错误输出、构建参数回显都可能把凭证片段带出来。关键 job 应该默认关闭命令回显并对日志做二次扫描。制品仓库权限也要收紧。能推镜像不代表能覆盖任意 tag。生产部署依赖的 tag 或 digest 应该有保护规则避免普通流水线覆盖已发布制品。密钥治理和制品不可变性要一起看。最后要准备泄露响应清单。发现 token 泄露后谁吊销、谁排查使用记录、谁重跑发布、谁确认环境状态都要提前写清楚。事故时再找人会浪费最宝贵的窗口。还要区分机器凭证和人员凭证。流水线应该使用专门的服务身份不要复用个人账号 token。人员离职、转岗或权限变化时个人凭证会带来额外管理负担也会让审计结果变得不清晰。审批也要按环境分级。测试环境可以自动部署生产环境至少要有受保护分支、变更记录和必要审批。自动化不是取消控制而是把控制点放到更清晰的位置。五、总结CI/CD 密钥治理的原则是短期、最小权限、分阶段、可审计。不要让一个万能 token 贯穿构建到生产。流水线越自动越要把凭证边界收紧否则自动化会把一次泄露放大成全链路风险。