密钥扫描门禁是什么
在提交与流水线两个层面识别疑似泄露:本地 pre-commit 拦住手滑提交,CI 全量扫描兜底历史与跨文件场景;一旦命中立即阻断并通知。常见工具包括 gitleaks、TruffleHog、GitLab Secret Detection 等。核心价值是把泄露发现时刻从事后左移到提交当下——发现之后的关键动作是轮换:密钥一旦进入 Git 历史,删除文件并不等于解除风险。
基本信息
| 扫描时机 | pre-commit 本地扫描 + CI 全量扫描(含历史提交) |
|---|---|
| 判定 | 命中即阻断,同时通知安全负责人 |
| 处理 | 吊销并轮换密钥,评估影响后清理历史 |
| 基线 | 对历史存量建立基线,聚焦新增泄露 |
| 误报治理 | 维护 allowlist 并附说明与期限,定期清理 |
命中后的处置顺序
| 步骤 | 动作 | 目的 |
|---|---|---|
| 1 | 吊销并轮换密钥 | 先止血,与历史清理无关 |
| 2 | 评估使用范围与日志 | 确认是否已被使用 |
| 3 | 清理工作区与历史 | 防止后续克隆传播 |
| 4 | 复盘来源并补钩子 | 防同类再犯 |
典型使用场景
- 提交前拦截:pre-commit 钩子阻断含密钥的暂存区内容
- CI 兜底:对完整历史扫描,捕获钩子未装或被跳过的提交
- 供应商审计:出具无明文密钥入库的证据链
- 事件响应:确认泄露后按处置顺序执行并留存记录
- 合规材料:金融、医疗类项目把扫描报告纳入发布材料
- 历史清理工具链:用 git filter-repo 或 BFG 重写历史后,协调所有协作者重新克隆
gitleaks 扫描示例
gitleaks 扫描示例
# CI 全量扫描,报告脱敏后存档
gitleaks detect --source . --redact --report-format sarif \
--report-path gitleaks.sarif
# 本地 pre-commit 快速拦截暂存区
gitleaks protect --staged发现泄露后只删代码不够:密钥已进入历史记录,必须轮换。
轮换要配套:密钥管理系统同步吊销旧凭据、通知依赖方、验证新凭据下发,缺一环等于没轮换完整。