Skip to main content

通过机密扫描保护推送

您可以使用 秘密扫描,通过启用推送保护来防止将支持的机密推送到您的组织或存储库中。

秘密扫描 is available for organization-owned repositories in GitHub Enterprise Server if your enterprise has a license for GitHub Advanced Security. For more information, see "GitHub's products."

Note: Your site administrator must enable 秘密扫描 for 您的 GitHub Enterprise Server 实例 before you can use this feature. For more information, see "Configuring 秘密扫描 for your appliance."

注意: 秘密扫描 作为保护推送目前处于测试阶段,可能会有所变化。 要申请使用测试版,请联系我们的客户管理团队

关于机密的推送保护

到目前为止,> - 秘密扫描 在推送检查机密,并向用户提醒暴露的机密。 启用推送保护时, 秘密扫描 还会检查推送是否存在高置信度机密(以低误报率标识的机密)。 秘密扫描 列出了它检测到的任何机密,以便作者可以查看机密并删除它们,或者在需要时允许推送这些机密。

If a contributor bypasses a push protection block for a secret, GitHub:

  • generates an alert.
  • creates an alert in the "Security" tab of the repository.
  • adds the bypass event to the audit log.

秘密扫描 作为推送保护,当前会扫描存储库中查找由以下服务提供商颁发的机密。

If access to a resource requires paired credentials, then secret scanning will create an alert only when both parts of the pair are detected in the same file. This ensures that the most critical leaks are not hidden behind information about partial leaks.

提供者支持的密钥密钥类型
Adafruit IOAdafruit IO 密钥adafruit_io_key
Alibaba CloudAlibaba Cloud Access Key ID with Alibaba Cloud Access Key Secretalibaba_cloud_access_key_id
alibaba_cloud_access_key_secret
AmazonAmazon OAuth Client ID with Amazon OAuth Client Secretamazon_oauth_client_id
amazon_oauth_client_secret
Amazon Web Services (AWS)Amazon AWS Access Key ID with Amazon AWS Secret Access Keyaws_access_key_id
aws_secret_access_key
Amazon Web Services (AWS)Amazon AWS Session Token with Amazon AWS Temporary Access Key ID and Amazon AWS Secret Access Keyaws_session_token
aws_temporary_access_key_id
aws_secret_access_key
AsanaAsana 个人访问令牌asana_personal_access_token
AtlassianBitbucket 服务器个人访问令牌bitbucket_server_personal_access_token
AzureAzure Active Directory 应用程序密钥azure_active_directory_application_secret
AzureRedis 访问密钥的 Azure 缓存azure_cache_for_redis_access_key
AzureAzure DevOps 个人访问令牌azure_devops_personal_access_token

启用 秘密扫描 作为推送保护

要将 秘密扫描 用作推送保护,组织或存储库需要同时启用 GitHub Advanced Security 和 秘密扫描。 更多信息请参阅“管理组织的安全性和分析设置”、“管理存储库的安全和分析设置”和“关于 GitHub Advanced Security”。

组织所有者、安全管理员和存储库管理员可以通过 UI 和 API 为 秘密扫描 启用推送保护。 更多信息请参阅“存储库”,并展开 REST API 文档中的“security_and_analysis 对象的属性”部分。

启用 秘密扫描 作为组织的推送保护

  1. 在 您的 GitHub Enterprise Server 实例 上,导航到组织的主页面。
  2. 在组织名称下,单击 设置. 组织设置按钮
  1. 在边栏的“Security(安全性)”部分中,单击 Code security and analysis(代码安全性和分析)

  2. 在“Code security and analysis(代码安全性和分析)”下,找到“GitHub Advanced Security”。

  3. 在“秘密扫描”下的“Push protection(推送保护)”下,单击 Enable all(启用所有)显示如何为组织启用 秘密扫描 推送保护的屏幕截图

  4. (可选)单击“自动为添加到 秘密扫描 的私有仓库启用”。

启用 秘密扫描 作为存储库的推送保护

  1. 在 您的 GitHub Enterprise Server 实例 上,导航到仓库的主页面。

  2. 在仓库名称下,单击 Settings(设置)仓库设置按钮

  3. 在边栏的“Security(安全性)”部分中,单击 Code security and analysis(代码安全性和分析)

  4. 在“Code security and analysis(代码安全性和分析)”下,找到“GitHub Advanced Security”。

  5. 在“秘密扫描”下的“Push protection(推送保护)”下,单击 Enable all(启用)显示如何为仓库启用 秘密扫描 推送保护的屏幕截图

从命令行使用 秘密扫描 作为推送保护

当您尝试将受支持的密钥推送到启用了 秘密扫描 作为推送保护的存储库或组织时,GitHub 将阻止推送。 您可以从提交中删除机密,也可以按照提供的 URL 进行推送。

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

显示当用户尝试将密钥推送到存储库时推送被阻止的屏幕截图

如果需要从正在推送的分支上的最新提交(即 HEAD)以及包含该机密的任何早期提交中删除机密,您可以从 HEAD 中删除机密,然后在引入提交和已删除机密的 HEAD 的第一个版本之间压缩提交。

注意

  • 如果您的 git 配置支持推送到多个分支,而不仅仅是到默认分支,则您的推送可能会由于推送了其他和意外的引用而被阻止。 更多信息请参阅 Git 文档中的 push.default 选项
  • 如果在推送时 秘密扫描 超时,GitHub 仍将在推送后运行扫描。

允许推送被阻止的机密

如果 GitHub 阻止了您认为可以安全推送的机密,则可以允许该机密并说明应允许该机密的原因。

如果确认某个机密是真实的,并且打算稍后修复它,则应尽快修复。 例如,您可以撤销密钥,并从存储库的提交历史记录中删除密钥。 更多信息请参阅“从仓库中删除敏感数据”。

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

  1. 访问 GitHub 在推送被阻止时返回的 URL。 显示包含用于取消阻止密钥推送的选项的表单屏幕截图
  2. 选择最准确描述为什么您应该能够推送密钥的选项。
    • 如果机密仅在测试中使用,并且不构成威胁,请单击 It's used in tests(它在测试中使用)
    • 如果检测到的字符串不是机密,请单击 It's a false positive(这是误报)
    • 如果密钥是真实的,但您打算稍后修复它,请单击 I'll fix it later(稍后修复)
  3. 单击 Allow me to push this secret(允许我推送此机密)
  4. 在三小时内重新尝试在命令行上推送。 如果您在三小时内没有推送,则需要重复此过程。