包的权限可以将范围限定为用户、组织或存储库。
用户/组织作用域包的精细权限
具有精细权限的包仅限于个人帐户或组织。 您可以从与包相连(或链接)的仓库分别更改包的访问控制和可见性。
以下 GitHub Packages 注册表支持精细权限。
- Container registry
- npm 注册表 - NuGet 注册表 - RubyGems 注册表
存储库范围的包的权限
存储库范围的包会继承发布包的存储库的权限和可见性。 通过转到存储库的主页并单击页面右侧的“包”链接,可以找到范围限定为存储库的包。 有关详细信息,请参阅“将仓库连接到包”。
以下 GitHub Packages 注册表仅支持存储库范围的权限。
- 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 上的包,personal access token (classic) 必须至少具有
delete:packages
和read:packages
范围。 存储库范围的包也需要repo
范围。 有关详细信息,请参阅“删除和恢复包”。
范围 | 说明 | 必需的权限 |
---|---|---|
read:packages | 从 GitHub Packages 下载和安装包 | 读取 |
write:packages | 将包上传和发布到 GitHub Packages | 写入 |
delete:packages | 从 GitHub Packages 中删除包 | 管理员 |
repo | 上传和删除包(连同 write:packages 或 delete: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 对运行工作流的存储库的访问权限。 您可以在包的设置页面上找到此设置。 有关详细信息,请参阅“配置包的访问控制和可见性”。