关于提供专用注册表访问权限的重要性
当存储库中的代码具有存储在专用注册表中的依赖项时,某些安全功能需要访问注册表才能使其有效工作。 如果无法访问存储库的所有依赖项,则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 是访问专用注册表的位置。 例如,若要在 NuGet 中使用GitHub Packages注册表:
https://nuget.pkg.github.com/ORGANIZATION/index.json,其中ORGANIZATION是您在GitHub上的组织名称。 - 类型指注册表的类型。
- URL 是访问专用注册表的位置。 例如,若要在 NuGet 中使用GitHub Packages注册表:
-
选择注册表的身份验证方法:
-
令牌:输入用于向注册表进行身份验证的令牌。
-
用户名和密码:输入用于向注册表进行身份验证的用户名和密码。 某些类型的身份验证令牌(例如 a GitHubPersonal Access Token)绑定到特定的用户标识。 为这些选项选择此选项,并将相关用户名输入为 “用户名 ”,并将令牌输入为 “密码”。
-
OIDC (OpenID Connect):使用云标识提供者的短期凭据,而不是存储长期机密。 选择此选项时,请选择提供程序并填写提供程序特定的字段。 有关详细信息,请参阅 为专用注册表配置 OIDC 身份验证。
-
-
定义组织中的哪些存储库可以使用这些详情访问该专用注册表:所有存储库、专用和内部存储库,或仅选定的存储库。
-
完成专用注册表的定义后,单击“添加注册表”**** 保存注册表信息。
提示
使用 令牌 或用户名和密码身份验证将专用注册表添加到组织时,令牌或 密码 存储为加密机密。 注册表创建后,将无法再次查看令牌或密码。
启用 code scanning 默认设置以使用注册表定义
为存储库或存储库组启用 code scanning 默认设置时, GitHub 检查存储库是否有权访问任何现有的专用注册表。 如果任何专用注册表可用于存储库, code scanning 将在分析期间使用相关定义。
首次配置专用注册表时,需要为想要使用新定义的任何存储库禁用并重新启用 code scanning 默认设置。 后续运行时将自动应用新的或修改后的配置。
对于支持专用包注册表的语言, code scanning 默认设置将生成有关 工具状态页的信息。 这显示了哪些专用注册表配置可用于分析,但无法确定 code scanning 默认设置是否能够成功从中下载私有依赖项。 有关 工具状态页 的详细信息,请参阅 使用工具状态页进行代码扫描。
或者,可以通过查看操作日志文件来确认专用注册表是否通过 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 的专用注册表配置指南。
为专用注册表配置 OIDC 身份验证
OIDC (OpenID Connect) 身份验证允许 Dependabot 使用云标识提供者的短期凭据来访问专用注册表,而无需存储长期机密。 使用 OIDC 时,会为每个 Dependabot 更新作业动态生成凭据。 必须在您的云提供商与 GitHub 之间配置信任关系,然后才能 Dependabot 进行身份验证。
注意
Dependabot 目前支持组织级别私有注册表的 OIDC 身份验证。
code scanning 默认设置不支持此功能。
选择 OIDC 作为专用注册表的身份验证方法时,请选择其中一个受支持的提供程序并填写必填字段:
- Azure:输入 Tenant ID(Azure AD 租户 ID)和 Client ID(Azure AD 应用程序客户端 ID)。 必须在 Azure AD 中配置联合凭据,该凭据信任 GitHub 的 OIDC 提供程序。
- AWS CodeArtifact:输入 AWS 区域、 帐户 ID(AWS 帐户 ID )、 角色名称 (IAM 角色名称)、 域 (CodeArtifact 域)和 域所有者 (CodeArtifact 域所有者/AWS 帐户 ID)。 可以选择提供 受众。 必须在 AWS 中配置一个 IAM OIDC 身份提供者来信任 GitHub 的 OIDC 提供者。
- JFrog Artifactory:输入 OIDC 提供程序名称。 可以选择提供 受众 和 标识映射名称。
创建后,无法更改专用注册表的身份验证类型。 若要从 OIDC 切换到另一种身份验证方法,反之亦然,请删除现有注册表并创建新的注册表。
有关 OIDC 工作原理的详细信息,请参阅 OpenID Connect。
Code Quality 对专用注册表的访问
注意
GitHub Code Quality 当前正处于 公共预览版 阶段,并可能会发生变化。 在 公共预览版期间,Code Quality 不会计费,尽管 Code Quality 扫描将使用 GitHub Actions 分钟。
为存储库启用任何可用的组织级专用注册表后,GitHub Code Quality 可以使用该注册表。
如果将新注册表添加到组织,则需要禁用并重新启用 Code Quality ,以确保分析检测和使用新的注册表。
若要为组织设置专用注册表访问权限,请参阅 定义代码扫描默认设置的注册表访问权限。