跳至主要内容

关于 GitHub Packages 的权限

了解如何管理包的权限。

谁可以使用此功能?

GitHub Packages 可用于 GitHub Free、GitHub Pro、GitHub Free for organizations、GitHub Team、GitHub Enterprise Cloud 和 GitHub Enterprise Server 3.0 或更高版本。


对于使用旧版按存储库付费计划的帐户所拥有的私有存储库,GitHub Packages 不可用于。此外,使用旧版按存储库付费计划的帐户无法访问支持细粒度权限的注册表,因为这些帐户按存储库计费。有关支持细粒度权限的注册表列表,请参阅“关于 GitHub Packages 的权限”。有关更多信息,请参阅“GitHub 的计划”。

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

针对用户/组织范围包的细化权限

具有细化权限的包的范围限定为个人帐户或组织。您可以更改访问控制和包的可见性,而无需更改连接(或链接)到包的存储库。

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

  • 容器注册表
  • npm 注册表
  • NuGet 注册表
  • RubyGems 注册表

针对存储库范围包的权限

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

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

  • Apache Maven 注册表
  • Gradle 注册表

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

包的可见性和访问权限

如果包属于支持细化权限的注册表,则拥有包的管理员权限的任何人都可以将包设置为私有或公有,并且可以授予包的访问权限,这些权限独立于组织和存储库级别设置的权限。有关支持细化权限的注册表列表,请参阅“关于 GitHub Packages 的权限”。

在大多数注册表中,要提取包,您必须使用个人访问令牌或 GITHUB_TOKEN 进行身份验证,无论包是公有还是私有。但是,在容器注册表中,公有包允许匿名访问,并且可以通过 CLI 提取而无需进行身份验证或登录。

注意:如果您发布链接到存储库的包,则该包默认继承链接存储库的权限。要访问包的细化权限设置,您必须移除包的继承权限。如果您是组织的所有者,则可以禁用对限定为组织的所有新包的权限自动继承。有关更多信息,请参阅“配置包的访问控制和可见性”和“配置包的访问控制和可见性”。

当您发布包时,您将自动获得包的管理员权限。如果您将包发布到组织,则组织中具有所有者角色的任何人都将获得包的管理员权限。

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

如果您使用 GitHub Actions 工作流来管理您的软件包,您可以通过使用软件包设置中“管理操作访问权限”下的“添加存储库”按钮,向存储工作流的存储库授予访问权限。有关更多信息,请参阅“配置软件包的访问控制和可见性”。

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

注意:GitHub Actions 工作流使用 REST API 删除和还原软件包的功能目前处于公开测试阶段,并且可能会更改。

有关更多信息,请参阅“配置软件包的访问控制和可见性”。

关于软件包注册表的范围和权限

GitHub Packages 仅支持使用个人访问令牌(经典版)进行身份验证。有关更多信息,请参阅“管理您的个人访问令牌”。

要使用或管理软件包注册表托管的软件包,您必须使用具有适当范围的个人访问令牌(经典版),并且您的个人帐户必须具有适当的权限。

例如

  • 要从存储库下载和安装软件包,您的个人访问令牌(经典版)必须具有 read:packages 范围,并且您的用户帐户必须具有读取权限。
  • 要在 GitHub 上删除软件包,您的个人访问令牌(经典版)至少必须具有 delete:packagesread:packages 范围。对于存储库范围的软件包,还需要 repo 范围。有关更多信息,请参阅“删除和还原软件包”。
范围说明所需的权限
read:packages从 GitHub Packages 下载和安装软件包读取
write:packages将软件包上传和发布到 GitHub Packages写入
删除:包从 GitHub Packages 中删除包管理员
仓库上传和删除包(以及 write:packagesdelete:packages写入或管理员

注意:GitHub Actions 工作流使用 REST API 删除和还原软件包的功能目前处于公开测试阶段,并且可能会更改。

创建 GitHub Actions 工作流时,可以使用 GITHUB_TOKEN 在 GitHub Packages 中发布、安装、删除和还原包,而无需存储和管理个人访问令牌。

有关详细信息,请参阅

关于存储库转移

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

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

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

维护对 GitHub Actions 工作流中包的访问

要确保您的工作流可以持续访问您的软件包,请确保在工作流中使用正确的访问令牌,并且您已为 GitHub Actions 启用对软件包的访问。

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

访问令牌

注意:GitHub Actions 工作流使用 REST API 删除和还原软件包的功能目前处于公开测试阶段,并且可能会更改。

  • 要发布、安装、删除和还原与工作流存储库关联的软件包,请使用 GITHUB_TOKEN
  • 要安装 GITHUB_TOKEN 无法访问的其他私有存储库关联的软件包,请使用个人访问令牌(经典)

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

具有细粒度权限的软件包的 GitHub Actions 访问

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