Skip to main content

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

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

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

当一个仓库使用存储在专用注册表中的代码时,某些安全功能需要访问该注册表才能有效工作。 如果无法访问仓库的所有依赖项,code scanning 默认设置和 Dependabot 的功能将受到限制。

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

Code scanning 默认设置分析 C# 和 Java 代码,而无需构建它。 如果你没有定义对组织使用的专用注册表的访问权限,则 code scanning 仅会从公共注册表中收集可用依赖项的必要数据。 通常情况下,这对于揭示大多数漏洞来说已足够。 但是,在某些情况下,缺乏访问权限可能会导致假负结果,即 code scanning 无法检测到代码中的漏洞,因为它没有分析代码所需的所有信息。 例如,某些数据流路径可能无法被检测到,因为步骤是在不可访问的依赖项中定义的,而 code scanning 无法理解这些步骤。

当配置对组织使用的专用注册表的访问权限时,code scanning 将能够访问所需的所有信息,错过漏洞的可能性就会显著减少。

提示

可以为每个组织定义一个 Maven 专用注册表和一个 NuGet 专用源。 如果组织中的代码库使用多个注册表或源,你应定义对该组织中代码库最重要注册表的访问权限。

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

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

  1. 在组织的“Settings”选项卡上,向下滚动到“Security”部分,然后选择“Secrets and variables”********。
  2. 在机密和变量的展开列表中,选择“Private registries”以显示“Private Registries”页面****。
  3. 选择“New private registry”,添加专用注册表的访问详细信息。
  4. 使用 URL 和“Type”字段定义注册表的位置和类型********:
    • URL 是访问专用注册表的位置****。 例如,要对 NuGet 使用 GitHub Packages 注册表:https://nuget.pkg.github.com/
    • “类型”是注册表的类型****。
  5. 根据身份验证方法选择“Token”或“Username and password”,然后将数据输入到相应的字段中********。
  6. 定义组织中哪些仓库可以使用这些详细信息访问专用注册表:所有仓库、专用和内部仓库,或仅限选定的仓库。
  7. 定义完专用注册表后,选择“Add Registry”以保存注册表信息****。

提示

当你将专用注册表添加到组织时,令牌或密码将作为加密的密钥存储。 创建注册表后,无法再次查看令牌或密码。

启用 code scanning 默认设置以使用注册表定义

为一个仓库或一组仓库启用 code scanning 默认设置时,GitHub 会检查这些仓库是否有权限访问任何现有的专用注册表。 如果有任何专用注册表可供仓库使用,code scanning 将在分析过程中使用相关的定义。

首次配置专用注册表时,需要禁用并重新启用 code scanning 默认设置,以便让任何希望使用新定义的仓库生效。 新的或修改过的配置将在随后的运行中自动生效。

可以通过查看操作日志文件来确认 code scanning 分析是否成功使用了专用注册表,请参阅确定代码扫描默认设置是否使用了任何专用注册表

Code scanning 高级设置访问专用注册表

Code scanning 高级设置使用运行分析(使用 codeql-action)的工作流可用的任何专用注册表。 它无权访问默认设置使用的组织级专用注册表。

对于已编译的语言,codeql-action 必须观察代码的生成过程。 你可以修改现有的生成工作流,使其同时运行 codeql-action,或者创建一个新的工作流,用于生成生产版本的代码并同时运行 codeql-action

生成使用的任何专用注册表也必须对运行 codeql-action 的工作流可访问。 有关高级设置的详细信息,请参阅“配置代码扫描的高级设置”。

Dependabot 更新访问专用仓库

Dependabot 使用 dependabot.yml 文件中定义的任何专用注册表。 它无法访问 code scanning 默认设置使用的组织级专用注册表。

Dependabot 无法检查存储在专用注册表中的代码的安全性或版本更新,除非它能够访问该注册表。 如果未配置对专用注册表的访问权限,则 Dependabot 将无法提出拉取请求以更新存储在该注册表中的任何依赖项。

配置对一个或多个专用注册表的访问权限时,Dependabot 可以提出拉取请求,以升级易受攻击的依赖项或维护依赖项,请参阅“为 Dependabot 配置对专用注册表的访问权限”和“针对 Dependabot 的专用注册表配置指南”。