关于所需访问权限 GitHub Enterprise Importer
为了保护数据,GitHub 强制实施特定的访问要求来使用 GitHub Enterprise Importer。 这些要求会因尝试执行的任务而异。 为防止出错,应仔细查看本文,并确认是否符合要完成的任务的所有要求。
若要运行迁移,需要对迁移的源和目标具有足够的访问权限。
我的源和目标是什么?
源组织是指位于 GitHub.com 或 GitHub Enterprise Server 上、您想从中迁移数据的组织。
目标可以是:
- 如果您要迁移仓库,则需要在GitHub.com或GHE.com上的组织账户
- 如果您要迁移整个组织,则需要在GitHub.com或GHE.com上的企业账户
我需要哪些访问权限?
要对源和目标的迁移都具有足够的访问权限,需满足以下条件****。
- 组织或企业帐户中的必需角色
- 可以访问组织或企业账户的一个personal access token
- personal access token必须具有所有必需的范围,具体取决于角色和要完成的任务。
- 如果源或目标对 GitHub.com 使用 SAML 单点登录,则必须授权 personal access token 使用 SSO。
此外,如果您对源或目标使用 IP 允许列表,则可能需要配置允许列表,以允许 GitHub Enterprise Importer 访问。
如果你是首次从 GitHub Enterprise Server 3.8 或更高版本迁移,还需要由有权访问 管理控制台 的人员为 你的 GitHub Enterprise Server 实例 设置 Blob 存储。
关于迁移者角色
为了使组织所有者不再需要完成迁移, GitHub 包含使用 GitHub Enterprise Importer 的不同角色。
通过授予迁移者角色,可以指定其他团队或个人来处理迁移。
- 只能为 GitHub.com 或 GHE.com 上的组织授予迁移者角色。
- 可以将迁移者角色授予单个用户或团队。 强烈建议将迁移者角色分配给团队。 然后,可以通过调整团队成员身份来进一步自定义可运行迁移的人员。 请参阅“添加组织成员到团队”或“从团队中删除组织成员”。
- 迁移者必须使用满足运行迁移的所有要求的 personal access token。
警告
将组织中的迁移者角色授予用户或团队时,即授予他们导入或导出该组织中的任何存储库的能力。
若要授予迁移者角色,请参阅“授予迁移者角色”。
注意
- 如果要在两个组织之间迁移存储库,则可以将迁移者角色授予两个组织的同一个人或团队,但必须分别授予。
- 不能为企业帐户授予迁移者角色。 因此,只有当你是目标企业的所有者时,你才能运行组织迁移。 但是,可以将迁移者角色授予源组织的企业所有者。
GitHub CLI 不支持为 GitHub Enterprise Server 上的组织授予迁移者角色,因此,要从 GitHub Enterprise Server 迁移仓库,你必须是源组织的组织所有者。
必需的角色
对迁移的源和目标而言,不同任务需要不同角色。
源组织
下表列出了可以执行某些任务的具体角色。
| 任务 | 组织所有者 | 迁移者 |
|---|---|---|
| 运行迁移 | ||
| 为存储库迁移分配迁移者角色 |
目标组织或企业
下表列出了可以执行某些任务的具体角色。
| 任务 | 企业所有者 | 组织所有者 | 迁移者 |
|---|---|---|---|
| 将组织迁移到企业 | |||
| 为存储库迁移分配迁移者角色 | |||
| 将存储库迁移到组织 | |||
| 下载迁移日志 | |||
| 回收模型 |
personal access token 所需的作用域
若要执行迁移,您需要一个能够访问目标组织(用于存储库迁移)或企业帐户(用于组织迁移)的 personal access token。 还需要另一个可访问源组织的 personal access token。
对于其他任务(例如下载迁移日志),只需一个能够访问操作目标的 personal access token。
所需的范围 GitHubpersonal access token (classic) 取决于你的角色和要完成的任务。
注意
只能使用 personal access token (classic),而不能使用 fine-grained personal access token。这意味着,如果组织使用“限制GitHub Enterprise Importer访问组织”策略,则无法使用personal access tokens (classic)。 有关详细信息,请参阅“在企业中强制实施个人访问令牌策略”。
| 任务 | 企业所有者 | 组织所有者 | 迁移者 |
|---|---|---|---|
| 为存储库迁移分配迁移者角色 | admin:org | ||
| 运行存储库迁移(目标组织) | |||
repo、admin:org、workflow | |||
repo、read:org、workflow | |||
| 下载迁移日志 | |||
repo、admin:org、workflow | |||
repo、read:org、workflow | |||
| 回收模型 | admin:org | ||
| 运行迁移(源组织) | |||
admin:org、repo | |||
admin:org、repo | |||
| 进行组织迁移(目标企业) | |||
read:enterprise、admin:org、repo、workflow |
授予迁移者角色
若要允许除组织所有者以外的其他人运行存储库迁移或下载迁移日志,可以向用户或团队授予迁移者角色。 有关详细信息,请参阅关于迁移者角色。
您可以使用 GEI extension of the GitHub CLI 或 GraphQL API 来授予迁移程序角色。
使用 GEI extension 授予迁移器角色
若要使用 CLI 授予迁移者角色,必须先安装 GEI extension of the GitHub CLI。 有关详细信息,请参阅“将存储库从 GitHub.com 迁移到 GitHub Enterprise Cloud”。
-
在 GitHub.com 上,创建并记录一个 personal access token,使其满足授予迁移者角色的所有要求。 有关更多信息,请参阅创建用于personal access token的GitHub Enterprise Importer
-
将 personal access token 设置为环境变量,将以下命令中的 TOKEN 替换为你在上面记录的 personal access token。
-
如果使用终端,请使用
export命令。Shell export GH_PAT="TOKEN"
export GH_PAT="TOKEN" -
如果使用 PowerShell,请使用
$env命令。Shell $env:GH_PAT="TOKEN"
$env:GH_PAT="TOKEN"
-
-
使用
gh gei grant-migrator-role命令,将 ORGANIZATION 替换为你要为其授予迁移者角色的组织,将 ACTOR 替换为用户或团队名称,并将 TYPE 替换为USER或TEAM。Shell gh gei grant-migrator-role --github-org ORGANIZATION --actor ACTOR --actor-type TYPE
gh gei grant-migrator-role --github-org ORGANIZATION --actor ACTOR --actor-type TYPE注意
如果你要授予 GHE.com 的迁移者角色,则你还必须包含企业子域的目标 API URL。 例如:
--target-api-url https://api.octocorp.ghe.com。
使用 GraphQL API 授予迁移者角色
可以使用 grantMigratorRole GraphQL 突变来分配迁移者角色,并使用 revokeMigratorRole 突变来撤销迁移者角色。
必须使用满足所有访问要求的 personal access token (PAT)。 有关详细信息,请参阅 personal access token 所需的作用域。
grantMigratorRole 突变
此 GraphQL 突变设置迁移角色。
mutation grantMigratorRole (
$organizationId: ID!,
$actor: String!,
$actor_type: ActorType!
) {
grantMigratorRole( input: {
organizationId: $organizationId,
actor: $actor,
actorType: $actor_type
})
{ success }
}
| 查询变量 | 说明 |
|---|---|
organizationId | 组织的 ownerId 或组织 ID(来自 GetOrgInfo 查询)。 |
actor | 要将迁移角色分配到的团队或用户名。 |
actor_type | 指定迁移者是 USER 还是 TEAM。 |
revokeMigratorRole 突变
此突变将删除迁移者角色。
mutation revokeMigratorRole (
$organizationId: ID!,
$actor: String!,
$actor_type: ActorType!
) {
revokeMigratorRole( input: {
organizationId: $organizationId,
actor: $actor,
actorType: $actor_type
})
{ success }
}
为personal access token创建GitHub Enterprise Importer
- 请确认您是否具有完成所需任务的相应角色权限。 有关详细信息,请参阅“必需的角色”。
- 创建一个 personal access token (classic),并确保授予完成所需任务的所有权限范围。 只能使用 personal access token (classic),而不能使用 fine-grained personal access token。 有关详细信息,请参阅 管理个人访问令牌 和 personal access token 所需的范围。
- 如果您需要访问的组织强制要求使用 SAML 单点登录,请为 SSO 授权 personal access token。 有关详细信息,请参阅“授权个人访问令牌以与单点登录一起使用”。
为迁移配置 IP 允许列表
如果迁移的源或目的地使用 IP 允许列表(GitHub的 IP 允许列表功能或标识提供者 (IdP) 的 IP 允许列表限制,例如 Azure CAP),则需要在 GitHub 上配置 IP 允许列表。 请参阅“管理组织允许的 IP 地址”和“使用 IP 允许列表限制企业网络的流入流量”。
- 如果使用 GitHub 的 IP 允许列表功能,则必须将下面的 GitHub IP 范围添加到源和/或目标组织的允许列表中。
- 如果使用 IdP 的 IP 允许列表来限制对 GitHub 上企业的访问,则应在迁移完成之前在企业帐户设置中禁用这些限制。
IP 范围因迁移的目标是 GitHub.com 还是 GHE.com 而异。
如果迁移来源是 GitHub Enterprise Server,则无需将任何 GitHub IP 范围添加到防火墙配置或 你的 GitHub Enterprise Server 实例 上的 IP 允许列表中。 但是,根据 Blob 存储提供程序的设置,可能需要更新 Blob 存储提供程序的配置,以允许访问 GitHub 下面的 IP 范围。
GitHub.com 的 IP 范围
需要将以下 IP 范围添加到 IP 允许列表:
- 192.30.252.0/22
- 185.199.108.0/22
- 140.82.112.0/20
- 143.55.64.0/20
- 135.234.59.224/28 (2025 年 7 月 28 日添加)
- 2a0a:a440::/29
- 2606:50c0::/32
- 20.99.172.64/28(2025 年 7 月 28 日添加)
可以随时通过 REST API 的“获取GitHub Enterprise Importer元信息”终结点获取GitHub使用的最新 IP 范围列表。
响应中的 github_enterprise_importer 键包含用于迁移的 IP 范围列表。
有关详细信息,请参阅“元数据的 REST API 端点”。
Azure Blob 存储的虚拟网络防火墙规则GitHub.com
对于为迁移配置了 Azure Blob 存储以存储仓库数据的客户,必须向其存储帐户添加虚拟网络防火墙规则,以允许 GEI 访问仓库数据。 这需要使用 Azure CLI 或 PowerShell,因为目前不支持在 Azure 门户上添加这些虚拟网络防火墙规则。 必须将以下虚拟网络子网 ID 添加到存储帐户的虚拟网络防火墙规则中:
/subscriptions/cdf1c65c-e6f4-43b3-945f-c5280f104f9c/resourceGroups/ghr-network-service-1a72ec6f-45b6-44be-a4bd-f0fe50079c9f-5-westus2/providers/Microsoft.Network/virtualNetworks/1a72ec6f-45b6-44be-a4bd-f0fe50079c9f-5/subnets/1a72ec6f-45b6-44be-a4bd-f0fe50079c9f-5/subscriptions/173ad082-b20d-4d44-8257-7fbf34959bed/resourceGroups/ghr-network-service-1a72ec6f-45b6-44be-a4bd-f0fe50079c9f-5-westus3/providers/Microsoft.Network/virtualNetworks/1a72ec6f-45b6-44be-a4bd-f0fe50079c9f-5/subnets/1a72ec6f-45b6-44be-a4bd-f0fe50079c9f-5
若要向 Azure 存储帐户添加虚拟网络防火墙规则,可以使用上面提供的网络子网 ID,按照为 Azure 存储创建虚拟网络规则文档中的步骤 5 进行操作。 请确保使用与存储帐户关联的订阅 ID 提供 --subscription 参数。
GHE.com 的 IP 范围
可以随时通过 REST API 的“获取GitHub Enterprise Importer元信息”终结点获取GitHub使用的最新 IP 范围列表。
响应中的 github_enterprise_importer 键包含用于迁移的 IP 范围列表。
此外,如果您正从 GitHub Enterprise Server 迁移,并且使用的是带有防火墙规则的 Blob 存储帐户:
- 必须允许访问 GHE.com 的出口 IP 范围。 请参阅“GHE.com 的网络详细信息”。
- 如果正在使用 Azure Blob 存储,可能需要执行其他一些网络配置。 如果 Azure Blob 存储恰好与 GitHub Enterprise Importer 服务的计算位于同一区域,则可能会出现这种情况。 请联系 GitHub 支持。