密钥红线守护者 (secret-guardian)
概述
自动扫描代码、配置文件、云函数中的密钥信息(API Key、AppSecret、数据库口令、私钥块、通用口令),发现明文泄露立即阻断并告警。脱敏内核:扫代码,不扫人。
核心原则:扫代码,不扫人;阻断不误伤(commit 不阻断);告警双通道;脱敏零落盘。
使用场景
- 代码提交(git push 前,commit 不阻断——保留日常开发节奏)
- 云函数部署(部署前自动触发)
- 配置文件保存(配置修改时触发)
触发机制(四步:触发 → 扫描 → 判定 → 阻断/告警)
代码提交 / 云函数部署 / 配置保存
│ 触发
▼
┌──────────────────────────────┐
│ 密钥扫描器(secret-guardian) │
│ ① 扫描范围:代码+配置+云函数 │
│ ② 脱敏判定:仅匹配模式,零落盘 │
│ ③ 命中判定:明文密钥 → 阻断 │
│ ④ 告警:宿主推送 + 审计周报TOP │
└──────────────────────────────┘
| 步骤 | 动作 | 判定 |
|---|---|---|
| ① 扫描 | 全量 / 增量(git diff、mtime 回退)/ 深度(base64、拼接、嵌套) | — |
| ② 脱敏 | 只记"文件名+行号+匹配类型",绝不落密钥值;敏感文件按名标记不读取 | 敏感 → 按名标记 + CRIT |
| ③ 阻断 | git push / 云函数部署 / 配置保存 命中明文密钥 | 全阻断(CRIT) |
| ④ 告警 | 宿主推送通道 + 审计底座周报异常 TOP 双通道;告警负载可汇入审计底座 | 立即告警 |
红线
- 扫代码不扫人:排除 key 文件、证件类图片/PDF、聊天记录、个人文档目录;宁可漏报不越线。
- 脱敏零落盘:evidence 只记"密钥名+是否配置",绝不落值;含敏感字段的响应只记字段名。
- commit 不阻断:阻断范围 = git push / 云函数部署 / 配置保存;commit 保留(日常开发节奏不被打断)。
- 密钥只有资产所有人可查填:AI 不得打开、读取、扫描任何密钥文件与云端密钥配置(密钥红线,永久)。
规则文件
assets/secret_rules.json:密钥模式 / 敏感扩展名 / 忽略规则 / 深度扫描 / 增量扫描 / 存储 / 告警对接 / 撤销(全部可复算,禁硬编码)assets/scripts/secret_guard.py:扫描 + 判定 + 事件记录 + 告警 + 查询导出 + 撤销核心脚本assets/scripts/hooks/:CI/部署集成模板(git pre-push / 云函数部署前 / 配置保存,sh + ps1,含接入说明)
事件契约(16 列,可汇入外部审计底座)
| 事件类型 | result | severity | 说明 |
|---|---|---|---|
| 扫描通过 | secret.pass | INFO | target=扫描根目录,status=clean |
| 命中明文密钥 | secret.found | CRIT | rule_id=命中规则(深扫为 secret-leak-deep) |
| 阻断动作 | secret.blocked | CRIT | action=block,human_decision=待定 |
| 告警负载 | 告警 JSON | — | 16 列 + anomaly_type(secret-leak/secret-block) |
脚本规范
- Python 3.11+ 标准库(无第三方依赖)
- 扫描结果默认写入
%LOCALAPPDATA%\SecretGuardian\findings\(--base-dir可回退包内开发期路径;migrate旧数据复制不删源) --selftest自检门禁:旧 8 + 新 15 用例(增量/深扫/告警结构/query/export/undo/脱敏/CI 模板)- 阻断动作(push/部署/配置保存)在宿主集成层执行;本脚本输出判定 + 提供 hook 模板,不自行调 git
双通道触发规范(语音 + 点击)
- 语音指令表(唤醒词由宿主自定义,示例用「Guardian」):
| 语音指令 | 等价动作 |
|---|---|
| "Guardian,扫密钥" | scan --mode push(或点击「立即扫描」) |
| "Guardian,查泄露" | query --result FOUND |
| "Guardian,导出扫描报告" | export --format md |
| "Guardian,发密钥告警" | alert --push-audit(汇入审计底座) |
| "Guardian,恢复误删的扫描记录" | undo --restore <id> |
- 点击入口:宿主安全控制台 → 密钥红线守护者 → 立即扫描 / 查看命中记录 / 导出报告 / 告警记录
- 授权一致:语音确认 ≡ 点击确认(唯一执行出口);阻断是默认动作无需授权,扫描范围变更须资产所有人确认
- 状态同步:扫描/命中/阻断/告警事件按 16 列契约可汇入外部审计底座;告警双通道 = 宿主推送 + 审计周报异常 TOP
- 降级:语音通道异常只 log 不外抛,点击兜底;双通道均异常 → 安全默认(阻断不执行)