GitHub 新增 PR 密钥合并阻断:代理凭据响应方案

GitHub 于 2026 年 9 月 9 日宣布,仓库规则集现在可以在拉取请求引入的密钥扫描告警尚未解决时阻止合并。对在 GitHub 中维护代理客户端、浏览器测试和数据采集自动化的团队,这新增了一道评审阶段控制。

明亮彩色玻璃全球互联网流水线在受保护网络前分流一个破损凭据胶囊

这是 GitHub 的公测能力,并非 98IP 功能。GitHub 表示,它面向使用 GitHub Secret Protection 或 GitHub Advanced Security 的客户开放。该规则可以减少误泄漏路径,但不能让已经暴露的代理凭据重新安全,也不会自动从历史中清除内容,更不能替代立即轮换。

公开来源说明:GitHub,《Block pull requests with exposed secrets from merging》,2026 年 9 月 9 日。

规则检查什么

GitHub 说明了两个合并条件:拉取请求头提交的密钥扫描已经完成;拉取请求提交所引入的密钥告警均已关闭。

默认情况下,规则作用于开放的拉取请求,并阻断供应商模式识别出的密钥。管理员还可以选择自定义或通用模式等其他类别。

设置名称为“Require secret scanning alerts are resolved”,可在仓库、组织或企业规则集中配置,也可通过 GitHub 公开的 REST 与 GraphQL 表达方式统一管理。

它与推送防护的差异

推送防护尝试在密钥进入仓库前阻止推送;新规则位于 PR 合并边界,可以覆盖推送防护未拦截或未配置拦截的情况。

应把两者作为分层控制:本地让密钥远离跟踪文件;推送防护在进入仓库前拦截;PR 规则阻止未解决告警进入受保护分支;真正暴露后仍需撤销、轮换、调查和清理验证。

不能因为有 PR 规则就关闭前置防护。即使没有合并,密钥也可能已出现在分支、fork、日志或构件中。

识别代理凭据的全部形态

代理认证材料可能是用户名密码、API 令牌、嵌入用户名的会话编号、含凭据的完整代理 URL、环境文件与命令历史、复制到夹具的 CI 变量、截图和调试日志,以及允许列表管理令牌。

不得用真实凭据构造公开自定义模式。应根据已记录结构使用合成示例,同时避免把普通 URL 或 IP 地址大量误报为凭据。过高误报会诱导不安全绕过。

可结合代理凭据轮换指南执行替换流程。

安全配置合并规则

  1. 盘点包含代理客户端、采集 Worker、CI 模板和基础设施定义的仓库。
  2. 确认 GitHub 安全权限和密钥扫描覆盖范围。
  3. 明确受保护分支与规则集范围。
  4. 启用“Require secret scanning alerts are resolved”。
  5. 先使用供应商模式,再添加经过审查的代理专用模式。
  6. 将绕过权限限制到具名应急角色。
  7. 每次绕过必须有工单、原因和过期时间。
  8. 使用无生产价值的合成凭据测试。

先在少量仓库启用,并测量扫描时间、告警量、误报率、解决时间和绕过频率。不要因为某个通用模式噪声大就整体弱化规则,应调整模式与范围。

把真实告警当作暴露事件

只要告警包含真实代理凭据,即使 PR 未合并,也应假设内容可能已被复制。

1. 停止传播

阻断相关工作流,移除公开构件,防止分支继续复用。不要把值粘贴到聊天、Issue 或事故工单。

2. 撤销或轮换

在供应商或内部密钥管理器中使旧值失效,创建只具备工作负载所需产品、地区、目标、并发和期限的新凭据。

3. 查清暴露范围

检查提交历史、fork、工作流日志、缓存、发布构件、容器层、包仓库和配置包。GitHub Actions 缓存权限审计可降低低信任任务保存可复用状态的风险。

4. 清理并验证

从当前代码树删除密钥,并按政策使用获准流程重写历史。最新文件干净并不能证明旧对象、fork 或构件已经干净。

5. 通过受管路径恢复

使用批准的密钥存储在运行时注入新值,避免命令行参数和详细日志,并限制可读取它的作业与环境。

6. 监控旧身份

在供应商遥测允许时,检查撤销身份的继续尝试、意外地区、陌生网关、异常并发和目的类别,只保存必要且脱敏的证据。

验证规则确实阻断合并

在一次性仓库中使用合成模式:启用测试分支规则;提交无害合成标记并打开 PR;等待头提交扫描;确认告警开放时不能合并;删除标记并推送新提交;等待再次扫描;确认只有告警解决后才放行;验证未授权用户不能绕过;检查应急角色的绕过审计轨迹。

绝不能用真实代理密码作测试标记。即使仓库、日志和截图公开,测试也必须无害。

区分告警解决与风险解决

告警可能因撤销、误报、测试使用或政策接受而标记为已解决,但工作流状态不代表风险已经消失。

真实凭据应关联一份响应记录,包括凭据别名、仓库别名、首次发现/撤销/补发时间、历史与构件检查状态、旧身份监控状态和负责人。只保存别名,不保存密钥本身;记录需要访问控制与保留期限。

治理绕过权限

规则集可以存在绕过主体,因此绕过治理决定真实强度。每次绕过必须有具名批准人、事故或发布工单、狭窄仓库范围和自动到期时间,并在事后复核。

紧急生产修复也不应把真实凭据放进源码。若为误报,应改进模式或记录合成夹具,不能把点击跳过警告变成习惯。

对买方和运营团队的启示

采购或续费代理服务前,应确认凭据能否独立轮换、按子账号隔离、限制地区或目标,并在不暴露值的情况下审计。共享永久密码会让仓库暴露的代价远高于短期、窄范围凭据。

还要验证轮换后旧连接不会无限期保持授权。代理池隔离与恢复指南可以把路由健康与凭据事故分开处理。

检查清单

  • [ ] 推送防护与 PR 合并阻断形成分层。
  • [ ] 受保护分支与仓库范围明确。
  • [ ] 代理专用模式使用合成示例。
  • [ ] 绕过权限范围小、可审计且会过期。
  • [ ] 真实告警立即触发撤销或轮换。
  • [ ] 已检查历史、fork、日志、缓存与构件。
  • [ ] 新凭据具有更小范围和生命周期。
  • [ ] 密钥在运行时注入且不进入缓存。
  • [ ] 合成回归测试证明合并门槛有效。
  • [ ] 旧身份活动只以脱敏证据监控。

常见问题

阻止合并是否表示凭据从未暴露?

不是。它可能已经存在于分支、fork、日志、缓存或构件中。真实凭据即使没有合并也应轮换。

新规则对所有仓库都可用吗?

GitHub 表示公测面向 Secret Protection 或 Advanced Security 客户。依赖前应确认当前权限和仓库覆盖。

删除检测到的代理 URL 而不轮换可以吗?

不可以。删除只减少后续暴露,已有副本可能仍存在。先撤销或轮换,再清理和验证。

通用密钥模式能替代供应商模式吗?

不能完全替代。它能发现未记录格式,但误报可能更多,需要合成数据和受控治理。

合规说明

代理凭据属于敏感认证数据。仅使用获准代理资源和目标,遵守仓库与供应商政策,最小化日志,并执行适用的事故通知和隐私要求。不得公开密钥值,也不得使用泄漏凭据测试第三方访问。