软件包可以从仓库继承其可见性和访问权限,或者对于支持细粒度权限的注册表,您可以将软件包的可见性和权限单独设置,而不依赖于仓库。
有关支持细粒度权限的注册表列表以及有关软件包权限、PAT 的软件包相关作用域,或管理 GitHub Actions 工作流权限的更多信息,请参阅关于 GitHub 软件包的权限。
关于访问权限的继承
在支持细粒度权限的注册表中,软件包的作用域为个人账户或组织。在这些注册表中,您可以在不将软件包链接到仓库的情况下发布软件包,然后通过在软件包设置中设置访问权限和可见性来决定谁可以访问该软件包。
默认情况下,如果您发布的软件包已链接到仓库,则该软件包会自动继承链接仓库的访问权限(但不继承可见性)。例如,拥有链接仓库读取权限的用户也会拥有该软件包的读取权限。当软件包自动继承访问权限时,链接仓库中的 GitHub Actions 工作流也会自动获得对该软件包的访问权限。
只有在您在发布软件包之前将仓库链接到软件包时(例如在容器镜像中添加 org.opencontainers.image.source Docker 标签),软件包才会自动继承链接仓库的访问权限。如果您在软件包设置页面将已发布的软件包连接到仓库,则该软件包将保留其已有的访问权限,除非您明确选择此选项,否则不会继承该仓库的访问权限。此外,组织可以为其所有新创建的、作用域为该组织的软件包禁用访问权限的自动继承。有关详细信息,请参阅下面的“在组织中禁用访问权限的自动继承”。
当软件包从仓库继承权限时,要授予或撤销对软件包的访问,必须在链接的仓库中配置权限设置。如果您希望为软件包单独设置访问权限,而不是从链接的仓库继承,则必须从软件包中移除继承的权限。更多信息,请参阅下面的“选择软件包是否从仓库继承权限”。
如果您在仅支持仓库作用域权限的注册表中发布软件包,则该软件包始终链接到仓库,并始终继承该仓库的权限。
关于为软件包设置可见性和访问权限
如果软件包所属的注册表支持细粒度权限,则拥有该软件包管理员权限的任何人都可以将软件包设置为私有或公开,并且可以授予与组织和仓库层级权限分离的软件包访问权限。有关支持细粒度权限的注册表列表,请参阅关于 GitHub 软件包的权限。
在大多数注册表中,无论软件包是公开还是私有,拉取软件包都必须使用个人访问令牌或 GITHUB_TOKEN 进行身份验证。不过,在容器注册表中,公开软件包允许匿名访问,可直接通过 CLI 拉取而无需身份验证或登录。
注意
如果您发布的软件包已链接到仓库,则该软件包默认会继承链接仓库的权限。要访问软件包的细粒度权限设置,必须移除软件包的继承权限。如果您是组织所有者,可以为组织中所有新创建、作用域为组织的软件包禁用自动继承。更多信息,请参阅配置软件包的访问控制和可见性和配置软件包的访问控制和可见性。
当您发布软件包时,您会自动获得该软件包的管理员权限。如果您将软件包发布到组织中,组织中拥有 owner 角色的任何人也会获得该软件包的管理员权限。
对作用域为个人账户的软件包,您可以向任何人授予访问角色。对作用域为组织的软件包,您可以向组织内的任何个人或团队授予访问角色。
如果您使用 GitHub Actions 工作流来管理软件包,您可以在软件包设置的“管理 Actions 访问”下使用Add Repository按钮,为存放工作流的仓库授予访问角色。更多信息,请参阅配置软件包的访问控制和可见性。
| 权限 | 访问说明 |
|---|---|
| 已读 | 可以下载软件包。 可以读取软件包元数据。 |
| 写入 | 可以上传和下载此软件包。 可以读取和写入软件包元数据。 |
| 管理员 | 可以上传、下载、删除并管理此软件包。 可以读取和写入软件包元数据。 可以授予软件包权限。 |
注意
GitHub Actions 工作流使用 REST API 删除和恢复软件包的功能目前处于公开预览阶段,可能会有变更。
为您的个人账户配置软件包访问权限
如果您对作用域为个人账户的软件包拥有管理员权限,您可以为其他用户分配读取、写入或管理员角色。有关这些权限角色的更多信息,请参阅关于访问权限的继承。
如果您的软件包是私有或内部且作用域为组织,则只能向其他组织成员或团队授予访问权限。
-
搜索并点击您想要管理的软件包名称。
-
在软件包的主页右侧,点击 软件包设置。

-
在“管理访问”或“继承访问”下,点击Invite teams or people并输入您想授予访问权限的人员的名称、用户名或电子邮件。团队不能被授予作用域为个人账户的软件包的访问权限。
-
在用户名或团队名称旁边,使用Role下拉菜单选择所需的权限级别。
被选中的用户将自动获得访问权限,无需先接受邀请。
为组织配置软件包访问权限
如果您对作用域为组织的软件包拥有管理员权限,您可以为其他用户和团队分配读取、写入或管理员角色。有关这些权限角色的更多信息,请参阅关于访问权限的继承。
如果您的软件包是私有或内部且作用域为组织,则只能向其他组织成员或团队授予访问权限。
-
在 GitHub 上,前往您组织的主页。
-
在组织名称下,点击 软件包 选项卡。

-
搜索并点击您想要管理的软件包名称。
-
在软件包的主页右侧,点击 软件包设置。

-
在“管理访问”或“继承访问”下,点击Invite teams or people并输入您想授予访问权限的人员的名称、用户名或电子邮件。您也可以输入组织中的团队名称,以授予所有团队成员访问权限。
-
在用户名或团队名称旁边,使用Role下拉菜单选择所需的权限级别。
被选中的用户或团队将自动获得访问权限,无需先接受邀请。
选择软件包是否从仓库继承权限
默认情况下,如果您发布的软件包已链接到仓库,则该软件包会继承链接仓库的访问权限。我们建议让软件包从仓库继承权限,因为这简化了软件包访问权限的管理。
当软件包从仓库继承权限时,要授予或撤销对软件包的访问,必须配置链接仓库的权限。
如果您希望在细粒度层面上单独配置软件包的访问设置,而不受链接仓库的影响,则必须从软件包中移除继承的权限。
注意
如果您更改软件包获取访问权限的方式,软件包的现有权限将被覆盖。
选择作用域为您的个人账户的软件包的继承设置
-
在 GitHub 上,导航到您个人账户的主页。
-
在 GitHub 右上角,单击您的个人资料图片,然后单击 您的个人资料。

-
在您的个人资料页面的页眉,单击 软件包 选项卡。
-
搜索并点击您想要管理的软件包名称。
-
在软件包的主页右侧,点击 软件包设置。

-
要选择软件包是否从链接仓库继承访问权限,请在“管理访问”或“继承访问”下,选中或取消选中Inherit access from repository (recommended)。
注意
此部分的名称会根据软件包是否已从仓库继承权限而变化。
选择作用域为组织的软件包的继承设置
提示
如果您是组织所有者,可以阻止所有新创建的、作用域为您组织的软件包自动从链接仓库继承权限。更多信息,请参阅下面的“在组织中禁用访问权限的自动继承”。
-
在 GitHub 上,前往您组织的主页。
-
在组织名称下,点击 软件包 选项卡。

-
搜索并点击您想要管理的软件包名称。
-
在软件包的主页右侧,点击 软件包设置。

-
要选择软件包是否从链接仓库继承访问权限,请在“管理访问”或“继承访问”下,选中或取消选中Inherit access from repository (recommended)。
注意
此部分的名称会根据软件包是否已从仓库继承权限而变化。
在组织中禁用访问权限的自动继承
默认情况下,如果您发布的软件包已链接到仓库,则该软件包会自动继承链接仓库的访问权限。作为组织所有者,您可以为组织中所有作用域的软件包禁用自动继承。
如果您禁用访问权限的自动继承,新建的、作用域为您组织的软件包将不会自动继承链接仓库的权限。然而,拥有软件包管理员权限的任何人仍然可以为该软件包启用或禁用继承权限。
-
在 GitHub 页面右上角,点击您的个人头像,然后点击 组织。
-
点击即可选择组织。
-
在您的组织名称下,点击 设置。如果看不到“Settings”标签,请选择下拉菜单,然后点击Settings。

-
在侧边栏的“代码、计划和自动化”部分,点击 软件包。
-
在“Default Package Settings”下,取消选中Inherit access from source repository。
-
点击保存。
确保工作流对您的软件包的访问
对于作用域为个人账户或组织的软件包,要确保 GitHub Actions 工作流能够访问您的软件包,必须明确授予存放工作流的仓库访问权限。
指定的仓库不必是保存软件包源代码的仓库。您可以为多个仓库的工作流授予对软件包的访问权限。
如果您发布的软件包已链接到仓库,则链接仓库中的 GitHub Actions 工作流会自动获得对该软件包的访问权限,除非您的组织已禁用访问权限的自动继承。更多信息,请参阅上文的关于访问权限的继承。
注意
- 在软件包设置的“管理 Actions 访问”下使用Add Repository按钮将软件包与仓库同步,与将软件包连接到仓库不同。有关将仓库链接到软件包的更多信息,请参阅将仓库连接到软件包。
- 您可以使用
permissions键和packages范围来限制工作流作业的权限。更多信息,请参阅在工作流中使用 GITHUB_TOKEN 进行身份验证。 - 如果您授予公共仓库对私有软件包的访问权限,该仓库的分叉可能也能够访问这些私有软件包。
GitHub Actions 对作用域为个人账户的软件包的访问
-
搜索并点击您想要管理的软件包名称。
-
在软件包的主页右侧,点击 软件包设置。

-
要确保您的工作流能够访问您的软件包,必须添加存放工作流的仓库。在“管理 Actions 访问”下,点击Add repository并搜索您想添加的仓库。

-
使用Role下拉菜单选择您希望该仓库对软件包拥有的默认访问级别。
如需进一步自定义对软件包的访问,请参阅为您的个人账户配置软件包访问权限。
GitHub Actions 对作用域为组织的软件包的访问
-
在 GitHub 上,前往您组织的主页。
-
在组织名称下,点击 软件包 选项卡。

-
搜索并点击您想要管理的软件包名称。
-
在软件包的主页右侧,点击 软件包设置。

-
在“管理 Actions 访问”下,点击Add repository并搜索您想添加的仓库。

-
使用Role下拉菜单选择您希望该仓库对软件包拥有的默认访问级别。
如需进一步自定义对软件包的访问,请参阅为组织配置软件包访问权限。
确保 GitHub Codespaces 对您的软件包的访问
默认情况下,Codespace 可以无缝访问支持细粒度权限的注册表中的特定软件包,例如在同一仓库中发布且选中了Inherit access选项的软件包。有关支持细粒度权限和无缝 GitHub Codespaces 访问的 GitHub 软件包注册表列表,请参阅关于 GitHub 软件包的权限。
否则,要确保 Codespace 能访问您的软件包,必须授予启动该 Codespace 的仓库访问权限。
指定的仓库不必是保存软件包源代码的仓库。您可以为多个仓库中的 Codespace 授予对软件包的访问权限。
选择您希望在仓库的 Codespace 中共享的软件包后,您即可授予该仓库访问权限。
-
搜索并点击您想要管理的软件包名称。
-
在软件包的主页右侧,点击 软件包设置。

-
在“管理 Codespaces 访问”下,点击Add repository。

-
搜索您想添加的仓库。
-
对所有您希望授予访问权限的其他仓库重复此操作。
-
如果某仓库的 Codespace 不再需要访问软件包,您可以移除访问权限。点击。

为您的个人账户配置软件包的可见性
当您首次发布作用域为个人账户的软件包时,默认可见性为私有,只有您可以看到该软件包。您可以通过更改访问设置来修改私有或公开软件包的访问权限。
-
搜索并点击您想要管理的软件包名称。
-
在软件包的主页右侧,点击 软件包设置。

-
在页面底部的“Danger Zone”下,点击Change visibility。
-
选择可见性设置
-
要让所有人都能看到软件包,请选择Public。
警告
一旦将软件包设为公开,就无法再次将其设为私有。
-
要让软件包仅对自定义选择的人员可见,请选择Private。
-
-
确认时,输入软件包名称,然后点击I understand the consequences, change package visibility。
组织成员的软件包创建可见性
对于支持细粒度权限的注册表,您可以默认选择组织成员发布的软件包的可见性。有关这些注册表的列表,请参阅关于 GitHub 软件包的权限。
-
在 GitHub 页面右上角,点击您的个人头像,然后点击 组织。
-
点击即可选择组织。
-
在您的组织名称下,点击 设置。如果看不到“Settings”标签,请选择下拉菜单,然后点击Settings。

-
在左侧,点击Packages。
-
在“Package Creation”下,选择是否启用创建公开、私有或内部软件包。
-
要允许组织成员创建公开软件包,请点击Public。
-
要允许组织成员创建仅对其他组织成员可见的私有软件包,请点击Private。您还可以进一步自定义私有软件包的可见性。
-
要允许组织成员创建对所有组织成员可见的内部软件包,请点击Internal。如果组织属于企业,则软件包对所有企业成员可见。
-
为组织配置软件包的可见性
当您首次发布软件包时,默认可见性为私有,只有您可以看到该软件包。您可以通过访问设置为用户或团队授予不同的访问角色。一旦将软件包设为公开,就无法再将其设为私有。
-
在 GitHub 上,前往您组织的主页。
-
在组织名称下,点击 软件包 选项卡。

-
搜索并点击您想要管理的软件包名称。
-
在软件包的主页右侧,点击 软件包设置。

-
在页面底部的“Danger Zone”下,点击Change visibility并选择可见性设置
-
要让所有人都能看到软件包,请点击Public。
警告
一旦将软件包设为公开,就无法再次将其设为私有。
-
要让软件包对组织中自定义选择的人员可见,请点击Private。
-