关于本指南
作为组织所有者,防止泄露专用或敏感数据应该是首要任务。 无论是有意还是意外,数据泄露都可能给相关方带来重大风险。 虽然 GitHub 采取措施来帮助防止数据泄漏,但你还负责管理组织来强化安全性。
在防范数据泄露方面,有几个关键组件:
- 采取主动的预防方法
- 及早检测可能的泄露
- 在事件发生时维护缓解计划
最佳方法取决于所管理的组织类型。 例如,专注于开放源代码开发的组织可能需要比完全商业化的组织更宽松的控制,以允许外部协作。 本文提供关于GitHub功能和设置的整体指导,您应根据您的需求来实施这些功能和设置。
保护帐户
通过实施安全最佳做法来保护组织的存储库和设置,包括启用 2FA 并要求所有成员使用 2FA,以及建立强密码准则。
- 尽可能使用 SAML 和 SCIM 集成以及 2FA 身份验证来启用安全身份验证过程。 有关详细信息,请参阅“[AUTOTITLE](/organizations/managing-saml-single-sign-on-for-your-organization/about-identity-and-access-management-with-saml-single-sign-on)”、“[AUTOTITLE](/organizations/managing-saml-single-sign-on-for-your-organization/about-scim-for-organizations)”和“[AUTOTITLE](/authentication/securing-your-account-with-two-factor-authentication-2fa)”。
-
要求组织成员、外部协作者和计费经理为其个人帐户启用 2FA,从而使恶意参与者更难访问组织的存储库和设置。 这是启用安全身份验证的一个步骤。 有关详细信息,请参阅“在你的组织中要求进行双因素身份验证”。
-
根据 GitHub 推荐的密码指导原则,鼓励用户设置强密码并按照指南适当保护它们。 有关详细信息,请参阅 创建强密码。
-
鼓励用户在其个人帐户设置中保持启用用户的推送保护,这样无论他们推送到哪个公共存储库,都将受到保护。 有关详细信息,请参阅 管理用户的推送通知保护。
-
在其中 GitHub建立内部安全策略,以便用户知道要采取的适当步骤,以及如果怀疑发生事件,则与谁联系。 有关详细信息,请参阅“将安全策略添加到存储库”。
有关保护帐户的详细信息,请参阅 确保帐户安全的最佳做法。
防止数据泄露
作为组织所有者,应根据组织类型适当地限制和查看访问权限。 请考虑以下设置进行更严格的控制:
| 建议 | 详细信息 |
|---|---|
| 禁用创建存储库分支的功能。 |
[AUTOTITLE](/repositories/managing-your-repositorys-settings-and-features/managing-repository-settings/managing-the-forking-policy-for-your-repository)
禁止更改存储库可见性。 |
限制在组织中更改仓库可见性
将存储库创建限制为专用或内部。 |
限制在组织中创建仓库
禁用存储库删除和传输。 |
设置删除或转让仓库的权限
| |
禁用使用部署密钥的功能。 |
限制在您的组织中使用部署密钥
| |
范围 personal access token限定为所需的最低权限。 | None
通过在适当的时候将公共存储库转换为专用存储库来保护代码。 可以使用GitHub App自动通知仓库所有者此更改。 |
中的 Prevent-Public-ReposGitHub Marketplace
通过验证域并将电子邮件通知仅限于已验证的电子邮件域来确认组织的标识。 |
验证或批准您组织的域名 和 限制组织的电子邮件通知
确保组织已升级到 GitHub 客户协议,而不是使用标准服务条款。 |
升级到 GitHub 客户协议
防止参与者进行意外提交。 |
从存储库中删除敏感数据
检测数据泄露
无论你如何加强组织以防止数据泄露,某些问题仍可能发生,可以通过使用 secret scanning、审核日志和分支保护规则来应对此类情况。
使用 secret scanning
Secret scanning 通过扫描和检测在存储库中每个分支的完整 Git 历史记录中意外提交的机密,帮助保护整个组织和存储库中的 GitHub 机密的安全。 与机密扫描合作伙伴、其他服务提供商或组织定义的模式匹配的任何字符串都报告为存储库 **“安全**”选项卡中的警报。
有两种 secret scanning 可用的形式: 合作伙伴的机密扫描警报 和 用户机密扫描警报。
-
合作伙伴的机密扫描警报:这些默认处于启用状态,并自动在所有公共存储库和公共 npm 包上运行。 -
用户机密扫描警报:若要获取组织的其他扫描功能,需要启用 用户机密扫描警报。启用后, 用户机密扫描警报 可以在以下类型的存储库上检测到: 的许可证。
- 由使用GitHub Enterprise Cloud的组织拥有的公共存储库
- 您拥有许可证时可以使用私有存储库和内部存储库 GitHub Code Security
提示
无论secret scanning的启用状态和推送保护如何,GitHub Team和GitHub Enterprise上的组织都可以运行免费报告,扫描组织中代码以发现泄露的机密。 请参阅 关于 GitHub 的机密安全性。
有关 secret scanning 的详细信息,请参阅 关于机密扫描。
还可以启用 secret scanning 作为存储库或组织的推送保护。 启用此功能时,secret scanning 会阻止参与者用检测到的机密来推送代码。 有关详细信息,请参阅 [AUTOTITLE](/code-security/secret-scanning/protecting-pushes-with-secret-scanning)。 最后,还可以扩展检测以包含自定义机密字符串结构。 有关详细信息,请参阅“[AUTOTITLE](/code-security/secret-scanning/using-advanced-secret-scanning-and-push-protection-features/custom-patterns/defining-custom-patterns-for-secret-scanning)”。
审查组织的审核日志
你还可以利用组织的审核日志及 GraphQL 审核日志 API,主动保护 IP 并维护组织的合规性。 有关详细信息,请参阅 查看贵组织的审核日志 和 接口。
设置分支保护规则
要确保所有代码在合并到默认分支之前都经过适当的评审,可以启用分支保护。 通过设置分支保护规则,可以在参与者推送更改之前强制实施某些工作流或要求。 有关详细信息,请参阅“关于受保护分支”。
可以创建规则集作为分支保护规则的替代方法。 相比分支保护规则,规则集有更多的优势,例如它有状态,可发现性更好,而且无需管理员访问权限。 还可以同时应用多个规则集。 有关详细信息,请参阅“关于规则集”。
缓解数据泄露
如果用户推送了敏感数据,请要求他们使用 git filter-repo 工具将其删除。 有关详细信息,请参阅“从存储库中删除敏感数据”。 此外,如果敏感数据尚未推送,则只需在本地撤消这些更改;有关详细信息,请参阅 the GitHub Blog (但请注意, git revert 在 Git 历史记录中保留原始敏感提交时,无法撤消添加敏感数据的有效方法)。
如果无法直接与存储库所有者协调以删除你确信拥有的数据,可以填写 DMCA 删除通知表单并告知 GitHub 支持。 确保包含有问题的提交哈希值。 有关详细信息,请参阅 DMCA 删除通知。
注意
如果你的某个存储库因虚假声明而被下架,应填写 DMCA 抗辩通知表单并通知 GitHub 支持团队。 有关详细信息,请参阅 DMCA 抗辩通知。
吊销公开的令牌
如果凭据已在存储库中 GitHub 公开, GitHubsecret scanning 则可用于报告和撤销凭据。 有关详细信息,请参阅“解决机密扫描产生的警报”。
您还可以撤销您不拥有且已在 GitHub 存储库外部泄露的凭据。 通过执行此操作,你将为社区的整体安全性 GitHub 做出贡献,并可以快速限制这些凭据的影响。 API 支持撤销:
- 带有
ghp_前缀的Personal access tokens (classic) -
Fine-grained personal access tokens带有`github_pat_`前缀的 -
OAuth app 具有 `gho_` 前缀的标记 - 用户到服务器令牌,前缀为
ghu_ -
GitHub App 使用 `ghr_` 前缀刷新令牌
如果发现任何暴露的令牌,无论是在 GitHub 上还是其他位置,都可以使用 REST API 提交吊销请求。 有关支持的凭据类型的完整和权威列表,请参阅 撤销 。
后续步骤
-
[AUTOTITLE](/code-security/supply-chain-security/end-to-end-supply-chain/securing-code) -
[AUTOTITLE](/code-security/supply-chain-security/end-to-end-supply-chain/securing-builds)