关于提供专用注册表访问权限的重要性
当存储库使用专用注册表中存储的代码时,部分安全功能需要访问该注册表才能有效运行。 如果无法访问存储库的所有依赖项,code scanning 默认设置和 Dependabot 的功能将受到限制。
Code scanning 默认设置访问专用注册表
如果未配置组织所用专用注册表的访问权限,code scanning 将仅从公共注册表中的可用依赖项收集必要数据。 大多数情况下,这足以发现大部分漏洞。 但在某些情况下,缺少访问权限可能导致误报结果,即 code scanning 由于没有足够的代码分析信息,无法检测到代码中的漏洞。 例如,部分数据流路径可能无法被检测到,因为相关步骤定义在无法访问的依赖项中,而 code scanning 不知道如何解析这些步骤。
当你配置组织所用专用注册表的访问权限后,code scanning 将获得所需的所有信息,遗漏漏洞的可能性会大大降低。
提示
每个组织可以为每种类型的注册表定义一个访问配置。 如果组织的代码库使用多个同类型的注册表,应优先为该组织代码库中最重要的注册表配置访问权限。
为 code scanning 默认设置定义注册表访问权限
你需要是组织所有者才能在用户界面中设置专用注册表的访问权限。 也可以使用具有组织所有者权限或 {read,write}_org_private_registries 权限的 REST API 进行配置。
- 在组织的“设置”**** 选项卡中,向下滚动到“安全”部分,选择“机密和变量”****。
- 在展开的机密和变量列表中,选择“专用注册表”,显示“专用注册表”**** 页面。
- 单击“新建专用注册表”****,添加专用注册表的访问详情。
- 使用“URL”**** 和“类型”**** 字段定义注册表的位置和类型:
-
**URL** 是访问专用注册表的位置。 例如,要使用 GitHub Packages 中的 NuGet 注册表:`https://nuget.pkg.github.com/`。 -
**类型**指注册表的类型。
-
- 根据身份验证方法,选择“令牌”**** 或“用户名和密码”****,然后在相应字段中输入数据。
- 定义组织中的哪些存储库可以使用这些详情访问该专用注册表:所有存储库、专用和内部存储库,或仅选定的存储库。
- 完成专用注册表的定义后,单击“添加注册表”**** 保存注册表信息。
提示
向组织添加专用注册表时,令牌或密码将以加密机密的形式存储。 注册表创建后,将无法再次查看令牌或密码。
启用 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 的专用注册表配置指南。