Skip to main content

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

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

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

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

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

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

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

提示

每个组织可以为每种类型的注册表定义一个访问配置。 如果组织的代码库使用多个同类型的注册表,应优先为该组织代码库中最重要的注册表配置访问权限。

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

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

  1. 在组织的“设置”**** 选项卡中,向下滚动到“安全”部分,选择“机密和变量”****。
  2. 在展开的机密和变量列表中,选择“专用注册表”,显示“专用注册表”**** 页面。
  3. 单击“新建专用注册表”****,添加专用注册表的访问详情。
  4. 使用“URL”**** 和“类型”**** 字段定义注册表的位置和类型:
    •           **URL** 是访问专用注册表的位置。 例如,要使用 GitHub Packages 中的 NuGet 注册表:`https://nuget.pkg.github.com/`。
      
    •           **类型**指注册表的类型。
      
  5. 根据身份验证方法,选择“令牌”**** 或“用户名和密码”****,然后在相应字段中输入数据。
  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 的专用注册表配置指南