什么是推送保护?
推送保护是一种 secret scanning 功能,旨在防止敏感信息(如机密或令牌)被推送到存储库。 与 secret scanning 在机密提交后检测不同,推送保护会在推送过程中主动扫描代码中的机密,若检测到则阻止推送。
推送保护的工作原理
推送保护会阻止在以下场景中检测到的机密:
- 从命令行推送
- 在GitHub UI
- 对 REST API 的请求
- 与 GitHub MCP 服务器(仅限公共存储库)的交互
当推送保护在推送尝试期间检测到潜在的机密时,它将阻止推送并提供详细的消息,说明阻止的原因。 你需要审查相关代码,删除所有敏感信息,然后重新尝试推送。
推送保护的类型
有两种类型的推送保护:
-
[存储库的推送保护](#push-protection-for-repositories) -
[用户的推送保护](#push-protection-for-users)
存储库的推送保护
可以在存储库、组织或企业级为存储库启用推送保护。 这种形式的推送保护:
- 需要启用 GitHub Secret Protection
- 默认禁用,并且可由存储库管理员、组织所有者、安全管理器或企业所有者启用
- 阻止包含机密的推送访问特定的受保护存储库
- 在存储库、组织和企业的“安全”选项卡中为推送保护绕过生成警报****
用户的推送保护
用户的推送保护仅在 GitHub.com 上可用,并且特定于你的 GitHub 帐户。 这种形式的推送保护:
- 默认启用
- 阻止将机密推送到 GitHub 上的公共存储库
- 除非在存储库级别也启用推送保护,否则不会在绕过推送保护时生成警报
推送保护绕过和警报
对于存储库的推送保护,默认情况下,对存储库具有写入访问权限的任何人都可以通过指定绕过原因来绕过推送保护。 当贡献者绕过推送保护限制时,GitHub:
- 在存储库、组织和企业的 “安全 ”选项卡中创建警报
- 将绕过事件添加到审核日志
- 向正在监视存储库的个人帐户、组织与企业所有者、安全经理和存储库管理员发送电子邮件警报,邮件中包含隐私信息的链接及其允许的原因。
下表显示了用户可指定的每个绕过原因的警报行为。
| 绕行原因 | 警报行为 |
|---|---|
| 用于测试 | GitHub 创建一个已关闭并标记为“用于测试”的警报 |
| 这是误报 | GitHub 创建已关闭的警报,该警报解析为“假正” |
| 我稍后会修复它 | GitHub 创建未结警报 |
如果希望更好地控制哪些参与者可以绕过推送保护以及应允许哪些包含机密的推送,则可以配置指定的审阅者组来监督和管理绕过请求。
推送保护的优点
-
**预防性安全:** 推送保护在推送时扫描代码中的机密,充当第一道防御机制。 这种预防性方法有助于在将潜在问题合并到存储库之前捕获这些问题。 -
**即时反馈:** 如果在推送尝试期间检测到潜在机密,开发人员会收到即时反馈。 这种即时通知支持快速修正,降低敏感信息泄露的可能性。 -
**降低数据泄露风险:** 通过阻止包含敏感信息的提交,推送保护大幅降低意外数据泄露的风险。 这有助于防范基础设施、服务和数据被未授权访问。 -
**高效的机密管理:** 开发人员无需事后处理泄露的机密,而是可以从源头解决问题。 这使机密管理更高效、更省时。 -
**绕过功能实现灵活性:** 对于发生误报或需要某些模式的情况,可以绕过用户的推送保护,并且指定的用户可以使用委派的绕过功能来绕过存储库的推送保护。 这提供了灵活性,而不会损害整体安全性。 -
**能够检测自定义模式(适用于组织中的存储库):** 组织可以定义用于检测其环境特有的机密的自定义模式。 此自定义可确保推送保护可以有效地识别和阻止非标准机密。
自定义
为存储库启用推送保护后,可以通过以下方式对其进行自定义:
- 定义自定义模式以阻止包含唯一机密模式的推送
- 指定可以绕过推送保护的参与者,并批准其他参与者的绕过请求
后续步骤
若要启用推送保护,请执行以下作: * 有关存储库,请参阅 为存储库启用推送保护。
-
**对于组织**,需要应用 security configuration。 请参阅“[AUTOTITLE](/code-security/how-tos/secure-at-scale/configure-organization-security/establish-complete-coverage/creating-a-custom-security-configuration)”。
有关推送保护支持的机密和服务提供商的列表,请参阅 支持的机密扫描模式。