软件包的权限可以限定在用户、组织或仓库范围内。
针对用户/组织范围软件包的细粒度权限
细粒度权限的软件包限定在个人账户或组织下。您可以独立于与软件包相连(或关联)的仓库来更改软件包的访问控制和可见性。
以下 GitHub 软件包注册表支持细粒度权限。
- 容器注册表
- npm 注册表
- NuGet 注册表
- RubyGems 注册表
针对仓库范围软件包的权限
仓库范围的软件包会继承其发布所在仓库的权限和可见性。您可以通过访问该仓库的主页,并点击页面右侧的 Packages 链接来查找仓库范围的软件包。更多信息,请参阅 Connecting a repository to a package。
以下 GitHub 软件包注册表 仅 支持仓库范围的权限。
- Apache Maven 注册表
- Gradle 注册表
对于其他注册表,您可以选择允许软件包限定在用户或组织下,或关联到仓库。
软件包的可见性和访问权限
如果软件包所属的注册表支持细粒度权限,则拥有该软件包管理员权限的任何人都可以将软件包设置为私有或公开,并且可以授予与组织和仓库级别权限设置相独立的软件包访问权限。支持细粒度权限的注册表列表,请参阅 About permissions for GitHub Packages。
在大多数注册表中,无论软件包是公开还是私有,拉取软件包都必须使用个人访问令牌或 GITHUB_TOKEN 进行身份验证。然而,在容器注册表中,公开软件包允许匿名访问,可通过 CLI 拉取而无需身份验证或登录。
注意
如果您发布的软件包已关联到仓库,则该软件包默认会继承关联仓库的权限。要访问软件包的细粒度权限设置,必须移除软件包的继承权限。如果您是组织所有者,您可以为组织中所有新创建的用户/组织范围软件包禁用自动继承权限。更多信息,请参阅 Configuring a package's access control and visibility 和 Configuring a package's access control and visibility。
当您发布软件包时,系统会自动授予您该软件包的管理员权限。如果您向组织发布软件包,组织中拥有 owner 角色的任何人也会获得该软件包的管理员权限。
对于限定在个人账户下的软件包,您可以为任意人员授予访问角色。对于限定在组织下的软件包,您可以为组织内的任意人员或团队授予访问角色。
如果您使用 GitHub Actions 工作流来管理软件包,可以通过在软件包设置中“Manage Actions access”下的 Add Repository 按钮,为存放工作流的仓库授予访问角色。更多信息,请参阅 Configuring a package's access control and visibility。
| 权限 | 访问说明 |
|---|---|
| 已读 | 可以下载软件包。 可以读取软件包元数据。 |
| 写入 | 可以上传和下载此软件包。 可以读取和写入软件包元数据。 |
| 管理员 | 可以上传、下载、删除并管理此软件包。 可以读取和写入软件包元数据。 可以授予软件包权限。 |
注意
GitHub Actions 工作流使用 REST API 删除和恢复软件包的功能目前处于公开预览阶段,可能会有变更。
更多信息,请参阅 Configuring a package's access control and visibility。
关于软件包注册表的作用域和权限
注意
GitHub Packages 仅支持使用个人访问令牌(经典版)进行身份验证。欲了解更多信息,请参阅 管理您的个人访问令牌。
要使用或管理由软件包注册表托管的软件包,必须使用具有相应作用域的个人访问令牌(经典版),并且您的个人账户必须具备相应权限。
例如
- 要从仓库下载并安装软件包,您的个人访问令牌(经典版)必须拥有
read:packages作用域,并且您的用户账户必须具备读取权限。 - 要删除软件包,您的个人访问令牌(经典版)至少需要拥有
delete:packages和read:packages作用域。更多信息,请参阅 Deleting and restoring a package。
| 范围 | 描述 | 所需权限 |
|---|---|---|
read:packages | 从 GitHub 软件包下载并安装软件包 | 读取 |
write:packages | 上传并发布软件包到 GitHub 软件包 | 写入 |
delete:packages | 从 GitHub 软件包删除软件包 | 管理员 |
注意
GitHub Actions 工作流使用 REST API 删除和恢复软件包的功能目前处于公开预览阶段,可能会有变更。
创建 GitHub Actions 工作流时,您可以使用 GITHUB_TOKEN 来发布、安装、删除和恢复 GitHub 软件包,而无需存储和管理个人访问令牌。
欲了解更多信息,请参阅
关于仓库转移
您可以将仓库转移至其他个人账户或组织。更多信息,请参阅 Transferring a repository。
转移仓库时,GitHub 可能会根据软件包所属的注册表将该仓库关联的软件包一起转移。
- 对于支持细粒度权限的注册表,软件包限定在个人账户或组织下,转移仓库时软件包所属的账户不会改变。如果您已将软件包关联到仓库,转移仓库到其他用户后该关联会被移除。任何与该仓库关联的 codespaces 或 GitHub Actions 工作流将失去对软件包的访问。如果软件包的访问权限是从关联的仓库继承的,用户也会失去对该软件包的访问。此类注册表列表请参阅上文的 针对用户/组织范围软件包的细粒度权限。
- 对于仅支持仓库范围权限的注册表,软件包直接发布到仓库,GitHub 会在仓库转移过程中一起转移这些软件包。所有与这些软件包相关的计费使用量随后将计入新仓库所有者。若前任仓库所有者被移除为仓库协作者,则可能无法再访问该仓库关联的软件包。此类注册表列表请参阅上文的 针对仓库范围软件包的权限。
在 GitHub Actions 工作流中保持对软件包的访问
为了确保您的工作流能够持续访问软件包,请确保在工作流中使用了正确的访问令牌,并已为软件包启用 GitHub Actions 访问。
欲了解 GitHub Actions 的概念背景或在工作流中使用软件包的示例,请参阅 Managing GitHub packages using GitHub Actions workflows。
访问令牌
注意
GitHub Actions 工作流使用 REST API 删除和恢复软件包的功能目前处于公开预览阶段,可能会有变更。
- 要发布、安装、删除和恢复与工作流仓库关联的软件包,请使用
GITHUB_TOKEN。 - 要安装
GITHUB_TOKEN无法访问的其他私有仓库中的软件包,请使用个人访问令牌(经典版)
有关在 GitHub Actions 工作流中使用的 GITHUB_TOKEN 的更多信息,请参阅 在工作流中使用 GITHUB_TOKEN 进行身份验证。
针对细粒度权限软件包的 GitHub Actions 访问
为了确保您的工作流能够访问存放在支持细粒度权限的注册表中的软件包,您必须为运行工作流的仓库授予 GitHub Actions 访问权限。此设置可在软件包的设置页面找到。更多信息,请参阅 Configuring a package's access control and visibility。