Skip to main content

存储库和组织的推送保护

通过对存储库和组织的推送保护,secret scanning 会阻止参与者将机密推送到存储库,并在参与者绕过该阻止时生成警报。

谁可以使用此功能?

公共存储库可免费使用存储库和组织推送保护功能。 使用 GitHub Enterprise Cloud 且拥有 GitHub Advanced Security 许可证的组织也可以在其专用存储库和内部存储库上启用推送保护。

存储库和组织的推送保护简介

截至目前,secret scanning 在推送后检查机密,并向用户提醒公开的机密。__ 为组织或存储库启用推送保护时,secret scanning 还会检查推送是否支持受支持的机密。 Secret scanning 列出了它检测到的所有机密,便于作者进行查看和删除,或者根据需要允许推送这些机密。

如果参与者绕过机密的推送保护块,GitHub:

  • 在存储库的“安全性”选项卡中创建一条警报。****
  • 将绕过事件添加到审核日志。
  • 向监管存储库的组织或个人帐户所有者、安全管理员和存储库管理员发送一封电子邮件警报,其中包含指向机密的链接以及允许使用该机密的原因。

此表显示了用户可以绕过推送保护块的每种方式的警报行为。

绕过原因警报行为
它在测试中使用GitHub 创建已关闭的警报,该警报解析为“在测试中使用”
这是假正GitHub 创建已关闭的警报,该警报解析为“假正”
我稍后会修复它GitHub 创建未结警报

在存储库或组织的 secret scanning 警报页上,你可以应用 bypassed:true 筛选条件轻松查看哪些警报是用户绕过推送保护产生的结果。

可以监视安全警报,了解用户何时绕过推送保护并创建警报。 有关详细信息,请参阅“审核安全警报”。

有关推送保护支持的机密和服务提供商的信息,请参阅“机密扫描模式”。

**** 注意:github.dev 基于 Web 的编辑器不支持推送保护。 有关编辑器的详细信息,请参阅“github.dev 基于 web 的编辑器”。

此外,_用户_的推送保护会自动防止意外将机密提交到公共存储库,无论存储库是否启用了 secret scanning。 默认情况下,用户的推送保护处于开启状态,但可以随时通过个人帐户设置禁用该功能。 有关详细信息,请参阅“用户的推送保护”。

启用 secret scanning 作为推送保护

若要在公共存储库中使用 secret scanning 作为推送保护,组织或存储库需要启用 secret scanning。 的用户自有存储库 有关详细信息,请参阅 “管理组织的安全和分析设置”、“管理存储库的安全和分析设置”和“关于 GitHub 高级安全性”。

组织所有者、安全管理员和存储库管理员还可以通过 API 为 secret scanning 启用推送保护。 有关详细信息,请参阅“存储库的 REST API 终结点”,并展开“security_and_analysis 对象的属性”部分。

还可以通过个人帐户设置为所有现有公共存储库启用推送保护。 对于新创建的任何公共存储库,默认情况下将启用推送保护。 有关详细信息,请参阅“为存储库配置机密扫描”。

注意:**** 在启用了 secret scanning 作为推送保护的情况下为存储库创建分支时,默认情况下不会在分支上启用此功能。 可以在分支上启用此功能,就像在独立存储库上启用它一样。

启用 secret scanning 作为组织的推送保护

可以使用“代码安全性和分析”的组织设置页,为组织中的所有现有存储库启用或禁用作为推送保护的 secret scanning。

  1. 在 GitHub.com 上,导航到组织的主页。

  2. 在组织名称下,单击 “设置”****。 如果看不到“设置”选项卡,请选择“”下拉菜单,然后单击“设置”********。

    组织配置文件中选项卡的屏幕截图。 “设置”选项卡以深橙色标出。

  3. 在边栏的“安全性”部分中,单击“ 代码安全性和分析”。

  4. 在“代码安全性和分析”下,查找“GitHub Advanced Security”。

  5. 在“Secret scanning”下的“推送保护”下,单击“全部启用”。

  6. (可选)单击“自动启用添加到 secret scanning 的存储库”。

  7. (可选)若要在消息中包含成员在尝试推送机密时会看到的自定义链接,请选择“阻止提交时在 CLI 和 Web UI 中添加资源链接”,然后键入 URL,并单击“保存链接” 。

    “代码安全性和分析”页的“推送保护”部分的屏幕截图。 “在阻止提交时在 CLI 和 Web UI 中添加资源链接”复选框和自定义链接文本字段以深橙色边框突出显示。

有关在整个组织中启用安全功能的详细信息,请参阅“保护你的组织”。

启用 secret scanning 作为存储库的推送保护

  1. 在 GitHub.com 上,导航到存储库的主页。

  2. 在存储库名称下,单击 “设置”。 如果看不到“设置”选项卡,请选择“”下拉菜单,然后单击“设置”********。

    存储库标头的屏幕截图,其中显示了选项卡。 “设置”选项卡以深橙色边框突出显示。

  3. 在边栏的“安全性”部分中,单击“ 代码安全性和分析”。

  4. 在“代码安全性和分析”下,查找“GitHub Advanced Security”。

  5. 在“Secret scanning”下的“推送保护”下,单击“启用”。 演示如何为存储库的 secret scanning 启用推送保护的屏幕截图。

使用机密扫描作为命令行的推送保护

尝试将受支持的机密推送到受推送保护保护的存储库时,GitHub 将阻止推送。 可以从分支中删除该机密,或遵循提供的 URL 来允许推送。

在命令行上,每次最多显示 5 个检测到的机密。 如果存储库中已检测到特定机密并且警报已存在,则 GitHub 不会阻止该机密。

组织所有者可以提供在阻止推送时显示的自定义链接。 此自定义链接可以包含特定于组织的资源和建议,例如有关使用建议机密保管库或者要联系谁来了解与所阻止的机密相关的问题的指示。

如果确认机密是真实的,则需要将机密从分支和出现机密的所有提交中删除,然后再次推送。 有关修正被阻止机密的详细信息,请参阅“推送受推送保护阻止的分支”。

如果确认机密是真实的,并且你打算稍后修补它,你应该致力于尽快修补机密。 例如,你可以撤销该机密,并从存储库的提交历史记录中删除机密。 必须撤销已公开的真实机密,以避免未经授权的访问。 在撤销机密之前,可以考虑先轮换机密。 有关详细信息,请参阅“从存储库中删除敏感数据”。

注释

  • 如果 Git 配置支持推送到多个分支,而不仅仅是推送到当前分支,则由于附加和意外的引用被推送,你的推送可能被阻止。 有关详细信息,请参阅 Git 文档中的 push.default 选项
  • 如果在推送超时后进行 secret scanning,GitHub 仍将在推送后扫描你的提交有无机密。

允许推送被阻止的机密

如果 GitHub 阻止了一个你认为可以安全推送的机密,则可以允许该机密并指定允许的原因。

允许推送机密时,将在“安全性”选项卡中创建警报。如果指定机密为误报或仅在测试中使用,则 GitHub 会关闭警报,且不会发送通知。 如果指定机密是真实的并且稍后将修复它,GitHub 会将安全警报保持打开状态,并向提交的作者以及存储库管理员发送通知。 有关详细信息,请参阅“管理来自机密扫描的警报”。

当参与者绕过机密的推送保护块时,GitHub 还会向选择接收电子邮件通知的组织所有者、安全管理员和存储库管理员发送电子邮件警报。

  1. 当推送被阻止时,请访问 GitHub 返回的 URL。

  2. 选择最能描述为何应该能够推送机密的选项。

    • 如果机密仅在测试中使用,并且不会构成任何威胁,请单击“它在测试中使用”。
    • 如果检测到的字符串不是机密,请单击“它是误报”。
    • 如果机密是真实的,但你打算稍后修复它,请单击“稍后修复”。

    注意: 如果存储库启用了秘密扫描,则需要指定绕过推送保护的原因。

    当推送到未启用机密扫描的_公共_存储库时,由于_用户的推送保护_(默认情况下,用户帐户处于启用状态),仍然可以防止意外推送机密。

    通过用户的推送保护,如果公共存储库的推送包含受支持的机密,GitHub 将自动阻止这些推送,但无需指定允许该机密的原因,并且 GitHub 也不会生成警报。 有关详细信息,请参阅“用户的推送保护”。

  3. 单击“允许我推送此机密”。

  4. 在三个小时内在命令行上重新尝试推送。 如果三小时内未推送,则需要重复此过程。

使用机密扫描作为 Web UI 的推送保护

使用 Web UI 尝试将受支持的机密提交到受推送保护保护的存储库时,GitHub 将阻止提交。

你将看到一个对话框,其中包含有关机密位置的信息,以及允许推送机密的选项。 机密还会在文件中加下划线,以便可以轻松找到它。

GitHub 在 Web UI 中一次只显示一个检测到的秘密。 如果存储库中已检测到特定机密并且警报已存在,则 GitHub 不会阻止该机密。

组织所有者可以提供在阻止推送时显示的自定义链接。 此自定义链接可以包含特定于组织的资源和建议。 例如,自定义链接可以指向自述文件,其中包含有关组织的机密保管库、向哪些团队和个人呈报问或是组织对于处理机密和重写提交历史记录的已批准策略的信息。

可以使用 Web UI 从文件中删除机密。 删除机密后,即可提交更改。

绕过机密的推送保护

如果确认机密是真实的,则需要将机密从分支和出现机密的所有提交中删除,然后再次推送。 有关修正被阻止机密的详细信息,请参阅“推送受推送保护阻止的分支”。

如果确认机密是真实的,并且你打算稍后修补它,你应该致力于尽快修补机密。 有关详细信息,请参阅“从存储库中删除敏感数据”。

如果 GitHub 阻止了一个你认为可以安全推送的机密,则可以允许该机密并指定允许的原因。

允许推送机密时,将在“安全性”选项卡中创建警报。如果指定机密为误报或仅在测试中使用,则 GitHub 会关闭警报,且不会发送通知。 如果指定机密是真实的并且稍后将修复它,GitHub 会将安全警报保持打开状态,并向提交的作者以及存储库管理员发送通知。 有关详细信息,请参阅“管理来自机密扫描的警报”。

当参与者绕过机密的推送保护块时,GitHub 还会向选择接收电子邮件通知的组织所有者、安全管理员和存储库管理员发送电子邮件警报。

  1. 在 GitHub 阻止提交时出现的对话框中,查看机密的名称和位置。

  2. 选择最能描述为何应该能够推送机密的选项。

    • 如果机密仅在测试中使用,并且不会构成任何威胁,请单击“它在测试中使用”。
    • 如果检测到的字符串不是机密,请单击“它是误报”。
    • 如果机密是真实的,但你打算稍后修复它,请单击“稍后修复”。

    注意: 如果存储库启用了秘密扫描,则需要指定绕过推送保护的原因。

    当推送到未启用机密扫描的_公共_存储库时,由于_用户的推送保护_(默认情况下,用户帐户处于启用状态),仍然可以防止意外推送机密。

    通过用户的推送保护,如果公共存储库的推送包含受支持的机密,GitHub 将自动阻止这些推送,但无需指定允许该机密的原因,并且 GitHub 也不会生成警报。 有关详细信息,请参阅“用户的推送保护”。

  3. 单击“允许机密”。