关于本指南
作为组织所有者,防止私人或敏感数据泄露应是首要任务。无论是有意还是意外,数据泄漏都可能给相关方带来重大风险。虽然 GitHub 已采取措施帮助您防止数据泄漏,但您也有责任管理组织,以加强安全性。
防御数据泄漏时有几个关键要素
- 采取主动的预防措施
- 及早发现可能的泄漏
- 在发生事件时保持缓解计划
最佳做法取决于您管理的组织类型。例如,专注于开源开发的组织可能需要比完全商业化的组织更宽松的控制,以便进行外部协作。本文提供了关于 GitHub 功能和设置的高级指导,您应根据自身需求实施。
保护账户
通过实施安全最佳实践来保护组织的仓库和设置,包括启用两因素认证(2FA)并要求所有成员使用,以及制定强密码准则。
-
要求组织成员、外部协作者和计费管理员为其个人账户启用两因素认证,使恶意行为者更难访问组织的仓库和设置。更多信息请参阅 在组织中要求使用两因素认证。
-
鼓励用户创建强密码并妥善保管,遵循 GitHub 推荐的密码准则。更多信息请参阅 创建强密码。
-
鼓励用户在个人账户设置中保持推送保护开启,这样无论向哪个公共仓库推送,他们都受到保护。更多信息请参阅 管理用户的推送保护。
-
在 GitHub 中建立内部安全策略,使用户知道在怀疑出现事件时应采取的适当步骤以及联系对象。更多信息请参阅 为仓库添加安全策略。
欲获取关于保护账户的更详细信息,请参阅 保护账户的最佳实践。
防止数据泄漏
作为组织所有者,您应根据组织类型适当限制和审查访问权限。考虑以下设置以实现更严格的控制。
| 建议 | 更多信息 |
|---|---|
| 禁用仓库的 Fork 功能。 | 为您的仓库管理分叉策略 |
| 禁用更改仓库可见性。 | 限制组织内仓库可见性更改 |
| 将仓库创建限制为私有或内部。 | 限制组织内的仓库创建 |
| 禁用仓库删除和转让。 | 设置删除或转让仓库的权限 |
| 将个人访问令牌的作用范围限制在必要的最小权限。 | 无 |
| 通过在适当情况下将公共仓库转换为私有来保障代码安全。您可以使用 GitHub 应用程序自动通知仓库所有者此更改。 | Prevent-Public-Repos in GitHub Marketplace |
| 通过验证域名并将电子邮件通知限制为仅已验证的邮件域,确认组织身份。 | 验证或批准组织的域名 |
| 确保您的组织已升级为 GitHub 客户协议,而非使用标准服务条款。 | 升级至 GitHub 客户协议 |
| 防止贡献者意外提交。 | 从仓库中删除敏感数据 |
检测数据泄漏
即使您对组织进行再严密的防护,仍可能出现数据泄漏,您可以通过使用机密扫描、审计日志和分支保护规则来应对。
使用机密扫描
机密扫描通过扫描并检测在 GitHub 仓库每个分支的完整 Git 历史中意外提交的机密,帮助保护代码并确保组织和仓库中的机密安全。任何匹配机密扫描合作伙伴、其他服务提供商或您/组织自定义的模式的字符串,都会在仓库的 安全与质量 选项卡中生成警报。
机密扫描提供两种形式:合作伙伴的机密扫描警报和用户的机密扫描警报。
-
合作伙伴的机密扫描警报:默认启用,并自动在所有公共仓库和公共 npm 包上运行。
-
用户的机密扫描警报:若要为组织获取额外的扫描能力,需要启用用户的机密扫描警报。
启用后,用户的机密扫描警报可在以下类型的仓库中检测到
- GitHub.com 上个人账户拥有的公共仓库
- 组织拥有的公共仓库
- 使用 GitHub Team 或 GitHub Enterprise Cloud 并拥有 GitHub 代码安全许可的组织拥有的私有和内部仓库
提示
无论机密扫描和推送保护的启用状态如何,使用 GitHub Team 和 GitHub Enterprise 的组织都可以运行免费报告,扫描组织代码中泄露的机密。请参阅 关于 GitHub 的机密安全。
欲了解机密扫描的更多信息,请参阅关于机密扫描。
您还可以为仓库或组织启用机密扫描作为推送保护。启用此功能后,机密扫描会阻止贡献者推送包含检测到的机密的代码。更多信息请参阅 关于推送保护。最后,您还可以将检测范围扩展到自定义机密字符串结构。更多信息请参阅 定义机密扫描的自定义模式。
审查组织的审计日志
您还可以通过利用组织的审计日志以及 GraphQL 审计日志 API,主动保护 IP 并维护组织的合规性。更多信息请参阅 审计日志审查 和 接口。
设置分支保护规则
为了确保所有代码在合并到默认分支之前得到适当审查,您可以启用分支保护。通过设置分支保护规则,您可以在贡献者推送更改之前强制执行特定工作流或要求。更多信息请参阅 关于受保护的分支。
作为分支保护规则的替代方案,您可以创建规则集。规则集相较于分支保护规则具有一些优势,例如对状态的支持,以及在无需管理员权限的情况下更好的可发现性。您还可以同时应用多个规则集。欲了解更多信息,请参阅 关于规则集。
缓解数据泄漏
如果用户推送了敏感数据,请要求他们使用 git filter-repo 工具将其删除。更多信息请参阅 从仓库中删除敏感数据。此外,如果敏感数据尚未推送,您可以在本地撤销这些更改;更多信息请参阅 GitHub 博客(但请注意,git revert 并不是撤销敏感数据添加的有效方式,因为它会在 Git 历史中留下原始的敏感提交)。
如果您无法直接与仓库所有者协调以删除您确信拥有的数据,您可以填写 DMCA 删除通知表格并通知 GitHub 支持。务必包括有问题的提交哈希。更多信息请参阅 DMCA 删除通知。
注意
如果您的某个仓库因错误主张被下架,您应填写 DMCA 反通知表格并通知 GitHub 支持。更多信息请参阅 DMCA 反通知。
撤销暴露的令牌
如果凭据在 GitHub 仓库中泄露,可使用 GitHub 机密扫描报告并撤销这些凭据。更多信息请参阅 解决机密扫描警报。
您也可以撤销您并不拥有且已在 GitHub 仓库之外泄露的凭据。这样做有助于提升 GitHub 社区的整体安全性,并能快速限制这些凭据的影响。API 支持撤销
- 带有
ghp_前缀的个人访问令牌(经典) - 带有
github_pat_前缀的细粒度个人访问令牌 - 带有
gho_前缀的 OAuth 应用令牌 - 带有
ghu_前缀的 GitHub App 用户到服务器令牌 - 带有
ghr_前缀的 GitHub App 刷新令牌
如果您在 GitHub 或其他地方发现任何暴露的令牌,可以使用 REST API 提交撤销请求。请参阅 撤销,获取完整且权威的受支持凭据类型列表。