Skip to main content

通过机密扫描保护推送

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

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

Note: 秘密扫描 as a protection push is currently in beta and subject to change. To request access to the beta release, contact your account management team.

关于机密的推送保护

到目前为止,> - 秘密扫描,用于高级安全 在推送检查机密,并向用户提醒暴露的机密。 When you enable push protection, 秘密扫描 also checks pushes for high-confidence secrets (those identified with a low false positive rate). 秘密扫描 lists any secrets it detects so the author can review the secrets and remove them or, if needed, allow those secrets to be pushed.

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

提供者支持的密钥密钥类型
Adafruit IOAdafruit IO 密钥adafruit_io_key
Alibaba CloudAlibaba 云访问密钥 IDalibaba_cloud_access_key_id
Alibaba CloudAlibaba 云访问密钥机密alibaba_cloud_access_key_secret
AmazonAmazon OAuth Client IDamazon_oauth_client_id
AmazonAmazon OAuth Client Secretamazon_oauth_client_secret
Amazon Web Services (AWS)Amazon AWS 访问密钥 IDaws_access_key_id
Amazon Web Services (AWS)Amazon AWS 机密访问密钥aws_secret_access_key
Amazon Web Services (AWS)Amazon AWS Session Tokenaws_session_token
Amazon Web Services (AWS)Amazon AWS Temporary Access Key IDaws_temporary_access_key_id
AsanaAsana 个人访问令牌asana_personal_access_token
AtlassianBitbucket 服务器个人访问令牌bitbucket_server_personal_access_token
AzureAzure Active Directory 应用程序密钥azure_active_directory_application_secret
AzureAzure Cache for Redis Access Keyazure_cache_for_redis_access_key
AzureAzure DevOps 个人访问令牌azure_devops_personal_access_token
Checkout.comCheckout.com 生产密钥checkout_production_secret_key
ClojarsClojars 部署令牌clojars_deploy_token
DatabricksDatabricks 访问令牌databricks_access_token
DigitalOceanDigitalOcean 个人访问令牌digitalocean_personal_access_token
DigitalOceanDigitalOcean OAuth 令牌digitalocean_oauth_token
DigitalOceanDigitalOcean 刷新令牌digitalocean_refresh_token
DigitalOceanDigitalOcean 系统令牌digitalocean_system_token
DiscordDiscord 自动程序令牌discord_bot_token
DopplerDoppler 个人令牌doppler_personal_token
DopplerDoppler 服务令牌doppler_service_token
DopplerDoppler CLI 令牌doppler_cli_token
DopplerDoppler SCIM 令牌doppler_scim_token
DopplerDoppler Audit 令牌doppler_audit_token
DropboxDropbox 短暂访问令牌dropbox_short_lived_access_token
DuffelDuffel Live Access Tokenduffel_live_access_token
EasyPostEasyPost Production API Keyeasypost_production_api_key
FlutterwaveFlutterwave Live API Secret Keyflutterwave_live_api_secret_key
FullstoryFullStory API 密钥fullstory_api_key
GitHubGitHub 个人访问令牌github_personal_access_token
GitHubGitHub OAuth 访问令牌github_oauth_access_token
GitHubGitHub 刷新令牌github_refresh_token
GitHubGitHub App 安装访问令牌github_app_installation_access_token
GitHubGitHub SSH 私钥github_ssh_private_key
GoogleGoogle Cloud Storage Access Key Secretgoogle_cloud_storage_access_key_secret
GoogleGoogle Cloud Storage Service Account Access Key IDgoogle_cloud_storage_service_account_access_key_id
GoogleGoogle Cloud Storage User Access Key IDgoogle_cloud_storage_user_access_key_id
GrafanaGrafana API 密钥grafana_api_key
HubspotHubspot API 密钥hubspot_api_key
IntercomIntercom 访问令牌intercom_access_token
IonicIonic 个人访问令牌ionic_personal_access_token
IonicIonic 刷新令牌ionic_refresh_token
线性线性 API 密钥linear_api_key
线性线性 OAuth 访问令牌linear_oauth_access_token
MidtransMidtrans Production Server Keymidtrans_production_server_key
New RelicNew Relic Personal API Keynew_relic_personal_api_key
New RelicNew Relic REST API Keynew_relic_rest_api_key
New RelicNew Relic Insights Query Keynew_relic_insights_query_key
npmnpm 访问令牌npm_access_token
NuGetNuGet API 密钥nuget_api_key
OnfidoOnfido Live API Tokenonfido_live_api_token
OpenAIOpenAI API 密钥openai_api_key
PlanetScalePlanetscale 数据库密码planetscale_database_password
PlanetScalePlanetscale OAuth 令牌planetscale_oauth_token
PlanetScalePlanetScale 服务令牌planetscale_service_token
PostmanPostman API 密钥postman_api_key
ProctorioProctorio 密钥proctorio_secret_key
redirect.pizzaredirect.pizza API Tokenredirect_pizza_api_token Samsara

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

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

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

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

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

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

  3. Under "秘密扫描", under "Push protection", click Enable all. Screenshot showing how to enable push protection for 秘密扫描 for an organization

  4. Optionally, click "Automatically enable for private repositories added to 秘密扫描."

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

  1. 在 GitHub.com 上,导航到仓库的主页面。

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

  3. In the "Security" section of the sidebar, click Code security and analysis.

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

  5. Under "秘密扫描", under "Push protection", click Enable. Screenshot showing how to enable push protection for 秘密扫描 for a repository

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

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

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

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

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

注意

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

允许推送被阻止的机密

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

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

当您允许推送密钥时,将在“Security(安全)”选项卡中创建警报。 GitHub closes the alert and doesn't send a notification if you specify that the secret is a false positive or used only in tests. If you specify that the secret is real and that you will fix it later, GitHub keeps the security alert open and sends notifications to the author of the commit, as well as to repository administrators. 更多信息请参阅“管理来自密码扫描的警报”。

  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. 在三小时内重新尝试在命令行上推送。 如果您在三小时内没有推送,则需要重复此过程。

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

当您使用 Web UI 尝试将受支持的密钥提交到启用了机密扫描作为推送保护的存储库或组织时,GitHub 将阻止提交。 您将在页面顶部看到一个横幅,其中包含有关密钥位置的信息,并且密钥也将在文件中加下划线,以便您可以轻松找到它。

显示由于机密扫描推送保护而在 Web UI 中阻止提交的屏幕截图

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

可以使用 Web UI 从文件中删除机密。 删除机密后,页面顶部的横幅将更改,并告诉您现在可以提交更改。

显示密钥修复后允许在 Web UI 中提交的屏幕截图

绕过密钥的推送保护

如果 GitHub 阻止了您认为可以安全推送的机密,则可以允许该机密并说明应允许该机密的原因。 如果确认某个机密是真实的,并且打算稍后修复它,则应尽快修复。

当您允许推送密钥时,将在“Security(安全)”选项卡中创建警报。 GitHub closes the alert and doesn't send a notification if you specify that the secret is a false positive or used only in tests. If you specify that the secret is real and that you will fix it later, GitHub keeps the security alert open and sends notifications to the author of the commit, as well as to repository administrators. 更多信息请参阅“管理来自密码扫描的警报”。

如果确认某个机密是真实的,并且打算稍后修复它,则应尽快修复。

  1. 在 GitHub 阻止提交时显示在页面顶部的横幅中,单击 Bypass protection(绕过保护)

  2. 选择最准确描述为什么您应该能够推送密钥的选项。

    • 如果机密仅在测试中使用,并且不构成威胁,请单击 It's used in tests(它在测试中使用)
    • 如果检测到的字符串不是机密,请单击 It's a false positive(这是误报)
    • 如果密钥是真实的,但您打算稍后修复它,请单击 I'll fix it later(稍后修复)

    显示包含用于取消阻止密钥推送的选项的表单屏幕截图

  3. 单击 Allow secret(允许密钥)