顺序很重要:先作废,再清理。反过来的话,清理要花半小时,这半小时里key一直是有效的。
第一步:立刻作废(两分钟)
- 去网关控制台把该key禁用或删掉。
- 签发新key。
- 新key只放进环境变量或密钥管理,不要落到文件里。
先做这三步,再处理仓库。别人扫到泄露key到实际滥用之间,往往就是几十分钟的窗口。
第二步:清历史,不只是删当前文件
把当前文件里的那行删掉、再提交一次,key仍然在历史里。任何人clone下来 git log -p 都能看到。要清的是历史:
git log --all -p -S 'sk-' --oneline | head # 先确认哪些提交里有 git filter-repo --path-glob '*.yaml' --invert-paths # 或者用 filter-repo 定向重写
重写历史会影响所有协作者,必须提前通知。操作前先做一次完整镜像备份。
第三步:假设它已经泄露
即使仓库是私有的,也要按已泄露处理。理由很直接:克隆过的每个人本地都有那份历史,你无法收回。作废是唯一可靠的止损。
第四步:查有没有被用过
- 看网关侧的用量曲线,找异常峰值。
- 看该key的调用来源IP(如果网关记录)。
- 有异常就按安全事件处理,不只是换个key。
第五步:防止下一次
- 在仓库里加pre-commit钩子,扫
sk-这类前缀。 - 把配置模板与实际凭据分开:仓库里只放模板,值靠环境变量注入。
- 把
.credentials.yaml加进.gitignore——它不是普通的配置文件,是钥匙。