跳至主要内容

关于 GitHub Packages 的权限

了解如何管理包的权限。

谁可以使用此功能?

GitHub Packages 可用于 GitHub 免费版、GitHub 专业版、GitHub 组织免费版、GitHub 团队版、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 登录即可拉取。

注意

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

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

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

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

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

注意

GitHub Actions 工作流使用 REST API 删除和恢复包的功能目前处于公开预览阶段,可能会发生变化。

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

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

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

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

例如

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

注意

GitHub Actions 工作流使用 REST API 删除和恢复包的功能目前处于公开预览阶段,可能会发生变化。

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

有关更多信息,请参阅

关于仓库迁移

您可以将仓库迁移到另一个个人帐户或组织。有关更多信息,请参阅“迁移仓库”。

迁移仓库时,GitHub 可能会迁移与仓库关联的软件包,具体取决于软件包所属的注册表。

  • 对于支持细粒度权限的注册表,软件包的作用域限定为个人帐户或组织,并且在您迁移仓库时,与软件包关联的帐户不会更改。如果您已将软件包链接到仓库,则在您将仓库迁移到其他用户时,该链接将被移除。与仓库关联的任何 codespace 或 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 对运行工作流的仓库的访问权限。您可以在软件包的设置页面上找到此设置。有关更多信息,请参阅“配置软件包的访问控制和可见性”。