Skip to main content

授予安全功能访问专用注册表的权限

如果你的组织使用专用注册表,可以通过配置这些注册表的访问权限,改善 code scanning 分析结果,并让 Dependabot 能够维护更多依赖项。

关于提供专用注册表访问权限的重要性

当存储库中的代码具有存储在专用注册表中的依赖项时,某些安全功能需要访问注册表才能使其有效工作。 如果无法访问存储库的所有依赖项,Code Quality(公共预览版)的有效性、code scanning 默认设置和 Dependabot 的功能将受到限制。

Code scanning 默认设置访问专用注册表

如果未配置组织所用专用注册表的访问权限,code scanning 将仅从公共注册表中的可用依赖项收集必要数据。 大多数情况下,这足以发现大部分漏洞。 但是,在某些情况下,缺少访问权限可能会导致假阴性结果。 换句话说,code scanning 无法检测代码中的漏洞,因为它没有分析代码所需的所有信息。 例如,部分数据流路径可能无法被检测到,因为相关步骤定义在无法访问的依赖项中,而 code scanning 不知道如何解析这些步骤。

当你配置组织所用专用注册表的访问权限后,code scanning 将获得所需的所有信息,遗漏漏洞的可能性会大大降低。

Code scanning 的默认设置支持以下注册表类型:

语言注册表类型
C#NuGet 源
GoGOPROXY 服务器,Git 源
JavaMaven 存储库

提示

每个组织可以为每种类型的注册表定义一个访问配置。 如果组织中的代码库使用给定类型的多个注册表,则应设置统一的访问点,或定义对该组织中的代码库最重要的注册表的访问。

为 code scanning 默认设置定义注册表访问权限

你需要是组织所有者才能在用户界面中设置专用注册表的访问权限。 还可以将 REST API 与组织所有者或 {read,write}_org_private_registries 权限一起使用。

  1. 在组织的“设置”**** 选项卡中,向下滚动到“安全”部分,选择“机密和变量”****。
  2. 在展开的机密和变量列表中,选择“专用注册表”,显示“专用注册表”**** 页面。
  3. 单击“新建专用注册表”****,添加专用注册表的访问详情。
  4. 使用“URL”**** 和“类型”**** 字段定义注册表的位置和类型: * URL 是访问专用注册表的位置。 例如,要使用 GitHub Packages 中的 NuGet 注册表:https://nuget.pkg.github.com/。 * 类型指注册表的类型。
  5. 根据身份验证方法,选择“令牌”**** 或“用户名和密码”****,然后在相应字段中输入数据。 某些类型的身份验证令牌(例如 GitHub Personal Access Token)绑定到特定的用户标识。 为这些选项选择 “用户名和密码 ”选项,并将相关用户名输入为 “用户名 ”,并将令牌输入为 “密码”。
  6. 定义组织中的哪些存储库可以使用这些详情访问该专用注册表:所有存储库、专用和内部存储库,或仅选定的存储库。
  7. 完成专用注册表的定义后,单击“添加注册表”**** 保存注册表信息。

提示

向组织添加专用注册表时,令牌或密码将以加密机密的形式存储。 注册表创建后,将无法再次查看令牌或密码。

启用 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 的专用注册表配置指南