代码托管的密钥与权限怎么管

2026-11-08

密钥进仓库是最常见的泄露方式,而且删掉提交也删不掉历史。四条规则:不进仓库、按用途分权、能过期、离职即撤。

代码托管平台上的安全事故,多数不是被攻破,而是密钥被提交进了仓库。这个错误很难完全避免,但可以把后果控制住。

规则一:密钥不进仓库

看起来是常识,实际每天都在发生。原因通常是本地测试时随手写了真密钥,提交时忘了改。

三个防线:

- `.gitignore` 里加 `.env`、`*.pem`、`credentials*` - 提交前用工具扫一遍敏感字符串(多数平台支持推送前检查,或装一个本地钩子) - 用示例文件代替真文件:仓库里放 `.env.example`,真值只在本地

规则二:删掉提交≠删掉密钥

这条最容易被误解。把密钥从文件里删掉再提交,历史提交里仍然能查到。

所以一旦密钥进过仓库,唯一正确的动作是:**立刻在服务方那边吊销并重新生成**。改代码只是止损的一半。

清理 git 历史(改写提交、强制推送)在团队仓库里风险很高,而且不能保证所有克隆都被清理。不要把它当作补救手段。

规则三:按用途分权

一个密钥干所有事,是最常见的省事做法,也是最危险的。

拆分方式:

- 读和写分开 - 按服务分开(部署用的、只读监控用的、CI 用的) - 按环境分开(测试环境密钥不能碰生产)

好处是泄露时影响范围有限,而且日志里能看出是哪个用途的密钥在异常调用。

规则四:能过期就设过期

长期有效的密钥等于长期有效的风险。设置有效期(比如 90 天),配合轮换流程,能把「一个泄露了三年没人发现」变成「最多三个月」。

轮换听着麻烦,实际做成自动的并不难:CI 里读密钥的地方统一走一个配置入口,换值时只改一处。

人员变动

有人离开时,要处理三件事:撤销个人访问令牌、把他从团队与仓库权限里移除、检查有没有以他个人名义创建的部署密钥或 Webhook。

第三项最容易漏。这类密钥不挂在账号权限上,人走了还能用。

泄露之后的第一小时

顺序很重要:先吊销,再排查调用日志,最后改代码。反过来做(先改代码后吊销),泄露窗口会被拉长。