关于提供专用注册表访问权限的重要性
当存储库中的代码具有存储在专用注册表中的依赖项时,某些安全功能需要访问注册表才能使其有效工作。 如果无法访问存储库的所有依赖项,Code Quality(公共预览版)的有效性、code scanning 默认设置和 Dependabot 的功能将受到限制。
Code scanning 默认设置访问专用注册表
如果未配置组织所用专用注册表的访问权限,code scanning 将仅从公共注册表中的可用依赖项收集必要数据。 大多数情况下,这足以发现大部分漏洞。 但是,在某些情况下,缺少访问权限可能会导致假阴性结果。 换句话说,code scanning 无法检测代码中的漏洞,因为它没有分析代码所需的所有信息。 例如,部分数据流路径可能无法被检测到,因为相关步骤定义在无法访问的依赖项中,而 code scanning 不知道如何解析这些步骤。
当你配置组织所用专用注册表的访问权限后,code scanning 将获得所需的所有信息,遗漏漏洞的可能性会大大降低。
Code scanning 的默认设置支持以下注册表类型:
| 语言 | 注册表类型 |
|---|---|
| C# | NuGet 源 |
| Go | GOPROXY 服务器,Git 源 |
| Java | Maven 存储库 |
提示
每个组织可以为每种类型的注册表定义一个访问配置。 如果组织中的代码库使用给定类型的多个注册表,则应设置统一的访问点,或定义对该组织中的代码库最重要的注册表的访问。
为 code scanning 默认设置定义注册表访问权限
你需要是组织所有者才能在用户界面中设置专用注册表的访问权限。 还可以将 REST API 与组织所有者或 {read,write}_org_private_registries 权限一起使用。
- 在组织的“设置”**** 选项卡中,向下滚动到“安全”部分,选择“机密和变量”****。
- 在展开的机密和变量列表中,选择“专用注册表”,显示“专用注册表”**** 页面。
- 单击“新建专用注册表”****,添加专用注册表的访问详情。
- 使用“URL”**** 和“类型”**** 字段定义注册表的位置和类型:
*
URL 是访问专用注册表的位置。 例如,要使用 GitHub Packages 中的 NuGet 注册表:
https://nuget.pkg.github.com/。 * 类型指注册表的类型。 - 根据身份验证方法,选择“令牌”**** 或“用户名和密码”****,然后在相应字段中输入数据。 某些类型的身份验证令牌(例如 GitHub Personal Access Token)绑定到特定的用户标识。 为这些选项选择 “用户名和密码 ”选项,并将相关用户名输入为 “用户名 ”,并将令牌输入为 “密码”。
- 定义组织中的哪些存储库可以使用这些详情访问该专用注册表:所有存储库、专用和内部存储库,或仅选定的存储库。
- 完成专用注册表的定义后,单击“添加注册表”**** 保存注册表信息。
提示
向组织添加专用注册表时,令牌或密码将以加密机密的形式存储。 注册表创建后,将无法再次查看令牌或密码。
启用 code scanning 默认设置以使用注册表定义
当你为单个或多个存储库启用 code scanning 默认设置时,GitHub 会检查这些存储库是否有权访问任何现有的专用注册表。 如果存储库可以访问专用注册表,code scanning 将在分析过程中使用相关定义。
首次配置专用注册表时,需要为所有要使用新定义的存储库禁用并重新启用 code scanning 默认设置。 后续运行时将自动应用新的或修改后的配置。
可以通过查看 Actions 日志文件,确认 code scanning 分析是否成功使用了专用注册表,具体请参阅确定代码扫描默认设置是否使用了任何专用注册表。
Code scanning 高级设置访问专用注册表
Code scanning 高级设置通过 codeql-action 使用运行分析的工作流可访问的任何专用注册表。 它无法访问默认设置所用的组织级专用注册表。
对于编译型语言,codeql-action 必须监视代码的构建过程。 你可以修改现有的构建工作流以同时运行 codeql-action,或创建新的工作流,用于构建代码的生产版本并运行 codeql-action。
构建过程所用的所有专用注册表也必须允许运行 codeql-action 的工作流访问。 有关高级设置的更多信息,请参阅 配置代码扫描的高级设置。
Dependabot 更新访问专用仓库
Dependabot 可以使用任何组织级专用注册表,并使用存储库中的 dependabot.yml 文件中定义的任何专用注册表。
Dependabot 无法检查存储在专用注册表中的代码的安全性或版本更新,除非它能够访问该注册表。 如果未配置专用注册表的访问权限,Dependabot 无法发起拉取请求来更新注册表中存储的任何依赖项。
当你配置一个或多个专用注册表的访问权限后,Dependabot 可以发起拉取请求来升级存在漏洞的依赖项或维护依赖项,具体请参阅 为 Dependabot 配置对专用注册表的访问权限 和 针对 Dependabot 的专用注册表配置指南。