Skip to main content

关于 GitHub Packages 的权限

了解如何管理包的权限。

谁可以使用此功能?

GitHub Packages 适用于 GitHub Free、GitHub Pro、面向组织的 GitHub Free、GitHub Team、GitHub Enterprise Cloud、GitHub Enterprise Server 3.0 或更高版本以及 。
GitHub Packages 不适用于使用旧版按仓库计划的帐户所拥有的私有仓库。 此外,使用旧版按存储库计划的帐户无法访问支持精细权限的注册表,因为这些帐户按存储库计费。 有关支持精细权限的注册表的列表,请参阅“关于 GitHub Packages 的权限”。 有关详细信息,请参阅“GitHub 的计划”。

包的权限可以将范围限定为用户、组织或存储库。

用户/组织作用域包的精细权限

具有精细权限的包仅限于个人帐户或组织。 您可以从与包相连(或链接)的仓库分别更改包的访问控制和可见性。

以下 GitHub Packages 注册表支持精细权限。

  • Container registry
  • npm 注册表 - NuGet 注册表 - RubyGems 注册表

存储库范围的包的权限

存储库范围的包会继承发布包的存储库的权限和可见性。 通过转到存储库的主页并单击页面右侧的“包”链接,可以找到范围限定为存储库的包。 有关详细信息,请参阅“将仓库连接到包”。

以下 GitHub Packages 注册表仅支持存储库范围的权限。

  • Docker 注册表 (docker.pkg.github.com)
  • Apache Maven 注册表
  • Gradle 注册表

对于 其他注册表,可以选择允许将包的范围限定为用户或组织,或链接到存储库。

包的可见性和访问权限

如果包属于支持粒度权限的注册表,对包具有管理员权限的任何人都可以将包设置为专用或公共,并且可以授予对包的访问权限,这些权限不同于在组织和存储库级别设置的权限。 有关支持精细权限的注册表的列表,请参阅“关于 GitHub Packages 的权限”。

在大多数注册表中,若要拉取包,必须使用 personal access token 或 GITHUB_TOKEN 进行身份验证,无论该包是公共包还是专用包。 但是,在 Container registry 中,公共包支持匿名访问,无需身份验证或通过 CLI 登录即可进行拉取。

注意:如果发布链接到存储库的包,则默认情况下,该包会从链接的存储库继承其权限。 要访问包的精细权限设置,必须移除该包的继承权限。 如果你是组织的所有者,则可以禁用针对组织范围的所有新包的权限的自动继承。 有关详细信息,请参阅“配置包的访问控制和可见性”和“配置包的访问控制和可见性”。

你发布包时,会自动获取对包的管理员权限。 如果将包发布到组织,则组织中具有 owner 角色的任何人也会获得包的管理员权限。

对于范围限定为个人帐户的包,可以授予任何人访问角色。 对于范围限定为组织的包,可以为组织中的任何人或团队授予访问角色。

如果使用 GitHub Actions 工作流来管理包,可以通过 :使用包的设置中“管理 Actions 访问”下的“添加存储库”**** 按钮 向存储工作流的存储库授予访问角色。 有关详细信息,请参阅“配置包的访问控制和可见性”。

权限访问说明
读取可以下载包。
可以读取包元数据。
写入可以上传和下载此包。
可以读取和写入包元数据。
管理员可以上传、下载、删除和管理此包。
可以读取和写入包元数据。
可以授予包权限。

注意:GitHub Actions 工作流使用 REST API 删除和还原包的功能目前提供公共 beta 版本,可能会发生更改。

有关详细信息,请参阅“配置包的访问控制和可见性”。

管理包

GitHub Packages 仅支持使用 personal access token (classic) 进行身份验证。 有关详细信息,请参阅“管理个人访问令牌”。

要使用或管理由包注册表托管的包,必须使用具有适当范围的 personal access token (classic),并且个人帐户必须具有适当的权限。

例如:

  • 要从存储库下载和安装包,你的 personal access token (classic) 必须具有 read:packages 范围,并且用户帐户必须具有读取权限。
  • 要删除 GitHub Enterprise Cloud 上的包,personal access token (classic) 必须至少具有 delete:packagesread:packages 范围。 存储库范围的包也需要 repo 范围。 有关详细信息,请参阅“删除和恢复包”。
作用域说明必需的权限
read:packages从 GitHub Packages 下载和安装包读取
write:packages将包上传和发布到 GitHub Packages写入
delete:packages从 GitHub Packages 中删除包管理员
repo上传和删除包(连同 write:packagesdelete:packages)。写入或管理员

注意:GitHub Actions 工作流使用 REST API 删除和还原包的功能目前提供公共 beta 版本,可能会发生更改。

创建 GitHub Actions 工作流时,可使用 GITHUB_TOKEN 发布、安装、删除和还原 GitHub Packages 中的包,无需存储和管理 personal access token。

更多信息请参阅:

关于仓库转让

可以将存储库转移到其他个人帐户或组织。 有关详细信息,请参阅“转让仓库”。

转移存储库时,GitHub 可能会转移与存储库关联的包,具体取决于包所属的注册表。

  • 对于支持精细权限的注册表,包的范围限定为个人帐户或组织,并且与包关联的帐户在转移存储库时不会更改。 如果已将包链接到存储库,则在将存储库传输给另一个用户时会删除该链接。 与存储库关联的任何 codespaces 或 GitHub Actions 工作流都将失去对该包的访问权限。 如果包从链接的存储库继承了其访问权限,则用户将失去对包的访问权限。 有关这些注册表的列表,请参阅上面的“用户/组织范围包的精细权限”。
  • 对于仅支持存储库范围权限的注册表,包直接发布到存储库,GitHub 在存储库转移过程中转移与存储库关联的包。 与包关联的所有可计费使用量随后都会向存储库的新所有者计费。 如果以存储库上的协作者身份删除了以前的存储库所有者,他们可能无法再访问与存储库关联的包。 有关这些注册表的列表,请参阅上面的“存储库范围包的权限”。

在 GitHub Actions 工作流程中维持对包的访问权限

为了确保工作流程将保持对包的访问,请确保在工作流程中使用正确的访问令牌,并启用了 GitHub Actions 对包的访问权限。

有关 GitHub Actions 的更多概念背景或在工作流中使用包的示例,请参阅“使用 GitHub Actions 工作流程管理 GitHub Packages”。

访问令牌

注意:GitHub Actions 工作流使用 REST API 删除和还原包的功能目前提供公共 beta 版本,可能会发生更改。

  • 要发布、安装、删除和还原与工作流存储库关联的包,请使用 GITHUB_TOKEN
  • 要安装与 GITHUB_TOKEN 无法访问的其他专用存储库相关联的包,请使用 personal access token (classic)

有关 GitHub Actions 工作流中使用的 GITHUB_TOKEN 的详细信息,请参阅“自动令牌身份验证”。

GitHub Actions 对具有精细权限的包的访问权限

若要确保工作流可以访问存储在支持精细权限的注册表中的包,必须授予 GitHub Actions 对运行工作流的存储库的访问权限。 您可以在包的设置页面上找到此设置。 有关详细信息,请参阅“配置包的访问控制和可见性”。