凭据轮换后如何证明旧值失效?
在 CI/CD 中建立密钥泄露扫描门禁:从误报处置到修复回归
凭据轮换最容易被误判为“把配置里的旧值替换掉”。实际上,代码和部署配置中不再出现旧字符串,只能说明新的读取路径已经建立,并不能证明旧凭据本身已不可用。真正需要回答的问题只有两个:签发端是否已经撤销或禁用该凭据,以及运行环境中旧值是否会被认证系统明确拒绝。这两类证据分别来自不同的控制面,不能互相替代。
在凭据生命周期一侧,可复核的撤销证据应当来自签发系统本身,而不是工单状态或口头确认。具备权限的所有者在完成禁用、撤销或过期操作后,应保留凭据标识、操作时间、执行人和撤销策略等记录。若旧凭据存在多个消费者,还必须先识别所有依赖关系并完成切换,否则可能出现“为了证明失效而直接撤销,结果先造成服务中断”的情况。撤销前的消费者梳理,本身就属于轮换计划的一部分,而不是事故处理。
在运行行为一侧,旧值是否失效应通过授权的非破坏性检查确认。检查的预期结果不是“应用仍然能正常工作”,而是旧凭据在认证环节被拒绝、标记为撤销或已过期。验证方式应避免使用生产写操作或真实业务请求,优先选择只读、范围受限或专门的健康检查入口。同时要确认失败认证不会把旧秘密写入错误页面、异常堆栈或指标标签,否则验证过程会制造新的暴露面。另一个容易忽略的问题是:一次拒绝响应只能说明该检查点到达了认证系统且认证系统返回了不可用信号,不能推断所有运行时路径都已失效。回滚配置中的旧值、镜像缓存中的历史环境变量、尚未重新构建的任务节点,都可能继续保留旧凭据。
因此,证明旧值失效应形成一条可复核的证据链:签发端有撤销记录,运行侧有拒绝结果,消费者已切换至新凭据,回滚路径不会重新启用旧值,审计日志中没有异常调用。扫描结果消失、日志不再打印密文、流水线重新通过,这些只能证明代码和制品不再携带凭据,不能替代对凭据本身的处置判断。只有把生命周期证据和运行时证据对应起来,轮换才算真正完成,而不是完成了一次字符串替换。

参与讨论
原来改配置不等于旧凭据失效