关于提供对私有注册表访问的重要性
当仓库中的代码依赖存放在私有注册表中时,某些安全功能需要访问该注册表才能有效工作。如果没有对仓库所有依赖的访问权限,代码质量(公开预览版)、代码扫描默认设置以及 Dependabot 的效果都会受到限制。
代码扫描默认设置对私有注册表的访问
如果您未定义组织使用的私有注册表的访问权限,代码扫描只会收集公共注册表中可用的依赖信息。大多数情况下,这已足以发现大部分漏洞。但在某些情况下,缺少访问权限会导致误报(漏报)。换句话说,代码扫描无法检测到代码中的漏洞,因为它缺少分析所需的完整信息。例如,某些数据流路径可能因为涉及不可访问的依赖而未被识别,代码扫描无法解释这些步骤。
当您为组织使用的私有注册表配置访问权限后,代码扫描即可获得全部所需信息,漏报的可能性大大降低。
代码扫描默认设置支持以下注册表类型
| 语言 | 注册表类型 |
|---|---|
| C# | NuGet 源 |
| Go | GOPROXY 服务器,Git 源 |
| Java | Maven 仓库 |
提示
每个组织可以为每种类型定义一个注册表。如果组织中的代码库使用同一种类型的多个注册表,您应设置统一的访问点,或至少为该组织的代码库定义最重要的注册表的访问。
为代码扫描默认设置定义注册表访问权限
您需要是组织所有者才能在用户界面中设置对私有注册表的访问。您也可以使用具有组织所有者或{read,write}_org_private_registries 权限的 REST API。
- 在组织的Settings选项卡中,向下滚动至“Security”章节,选择Secrets and variables。
- 在展开的“Secrets and variables”列表中,选择Private registries以显示“Private Registries”页面。
- 点击New private registry,添加私有注册表的访问详情。
- 使用URL和Type字段来定义注册表的位置和类型。
- URL 是访问私有注册表的地址。例如,要使用 GitHub Packages 作为 NuGet 注册表:
https://nuget.pkg.github.com/ORGANIZATION/index.json,其中ORGANIZATION为您在 GitHub 上的组织名称。 - Type 表示注册表的类型。
- URL 是访问私有注册表的地址。例如,要使用 GitHub Packages 作为 NuGet 注册表:
- 根据认证方式,选择Token或Username and password,并在相应字段中填写数据。某些认证令牌(例如 GitHub 个人访问令牌)绑定到特定用户身份,此时请选择Username and password,将用户名填入Username,将令牌填入Password。
- 使用以上信息定义组织中哪些仓库可以访问该私有注册表:全部、私有和内部,或仅选定的仓库。
- 完成私有注册表的定义后,点击Add Registry保存注册表信息。
提示
当您向组织添加私有注册表时,令牌或密码会以加密密钥的形式存储。注册表创建后,令牌或密码将无法再次查看。
启用代码扫描默认设置以使用注册表定义
当您为仓库或一组仓库启用代码扫描默认设置时,GitHub 会检查这些仓库是否能够访问已有的私有注册表。如果仓库可以访问私有注册表,代码扫描将在分析期间使用相应的定义。
首次配置私有注册表后,需对想使用新定义的仓库关闭并重新启用代码扫描默认设置。后续运行时会自动拾取新建或修改后的配置。
对于支持私有包注册表的语言,代码扫描默认设置会在工具状态页上显示信息,指示分析时可用的私有注册表配置,但不显示是否成功下载了私有依赖。有关工具状态页的更多信息,请参见使用工具状态页进行代码扫描。
此外,您也可以通过查看代码扫描日志(Actions 日志文件)来确认私有注册表是否被成功使用。
代码扫描高级设置对私有注册表的访问
代码扫描高级设置会使用在运行 codeql-action 的工作流中可用的任何私有注册表,但它不能访问默认设置使用的组织级私有注册表。
对于编译型语言,codeql-action 必须观察代码的构建过程。您可以在现有的构建工作流中加入 codeql-action,或创建一个新的工作流,先构建生产版本的代码,再运行 codeql-action。
构建过程中使用的任何私有注册表也必须对运行 codeql-action 的工作流可访问。有关高级设置的更多信息,请参见配置代码扫描的高级设置。
Dependabot 更新对私有注册表的访问
Dependabot 可以使用任何组织层级的私有注册表,也会使用仓库中 dependabot.yml 文件定义的私有注册表。
如果 Dependabot 无法访问私有注册表,就无法检查该注册表中的代码的安全或版本更新。未配置私有注册表访问权限时,Dependabot 将无法提交拉取请求来更新存放在该注册表中的任何依赖。
当您为一个或多个私有注册表配置访问权限后,Dependabot 能够提出拉取请求,以升级有漏洞的依赖或维护依赖,详见为 Dependabot 配置私有注册表访问权限以及Dependabot 私有注册表配置指南。
代码质量对私有注册表的访问
注意
GitHub 代码质量目前处于公开预览阶段,可能会有变更。在公开预览期间,代码质量不会产生费用,但代码质量扫描会消耗 GitHub Actions 分钟数。
GitHub 代码质量在为仓库启用时,可以使用组织层级的任何私有注册表。
如果向组织中添加了新注册表,需要先关闭再重新启用代码质量,以确保分析能够检测并使用这些新注册表。
如需为组织设置私有注册表访问权限,请参见为代码扫描默认设置定义注册表访问权限。