本文档介绍了在迁移项目时如何处理特殊情况。迁移项目时,请确保您在项目、其父级资源和目标资源上拥有所需的 Identity and Access Management (IAM) 权限。
迁移未与组织资源关联的项目
您可以将尚未与组织资源关联的项目迁移到组织资源中。不过,您无法使用此流程将其更改回无组织。如果您的某个项目与您的组织资源相关联,并且您希望将其还原为无组织,请联系您的支持代表寻求帮助。
您必须在目标组织资源中获授 roles/resourcemanager.projectCreator 角色。
如果您没有项目父组织资源的 resourcemanager.organizations.get 权限,那么您的项目很可能不会在Google Cloud 控制台中的实际组织下按预期显示。这可能会使您看起来该项目未与任何组织资源相关联。如需了解详情,请参阅限制用户对项目的查看权限。
如需确定项目是否与组织资源相关联,请执行以下操作:
gcloud
运行以下命令:
gcloud projects describe PROJECT_ID
将 PROJECT_ID 替换为要迁移的项目的 ID。
如果输出中未显示父资源,则表示相应项目未与组织资源相关联。
如果输出中显示了父级资源(文件夹或组织资源),则表示相应项目与组织资源相关联。
迁移与组织资源无关的项目的过程与在组织资源之间迁移项目的过程类似,但并不需要迁移计划中涉及的所有步骤。如需将项目迁移到组织资源,您应该按以下步骤操作:
然后,您就可以执行迁移。
控制台
如需将项目迁移到组织资源,请执行以下操作:
在 Google Cloud 控制台中打开 IAM 和管理 > 设置页面。
选择页面顶部的项目选择器。
从组织选择器中选择无组织。如果您未与任何组织资源建立关联,则系统不会显示组织选择器,因此您可以跳过此步骤。
选择您要迁移的项目。

点击页面顶部的迁移。
在组织下拉列表中,选择要将项目迁移到其中的组织资源。
gcloud
如需将项目迁移到组织资源,请运行以下命令:
gcloud beta projects move PROJECT_ID \
--organization ORGANIZATION_ID
其中:
- PROJECT_ID 是您要迁移到组织资源的项目 ID。
- ORGANIZATION_ID 是您要将项目迁移到的组织资源的 ID。
API
使用 Resource Manager API,您可以将项目的 parent 字段设置为组织资源的组织资源 ID,从而将项目迁移到组织资源中。
如需将项目迁移到组织资源,请执行以下操作:
- 使用
projects.get()方法获取project对象。 - 将其
parent字段设置为组织资源的组织资源 ID。 - 使用
projects.update()方法更新project对象。
parent 字段一经设置便无法更改。
以下代码段展示了上述步骤:
project = crm.projects().get(projectId=flags.projectId).execute()
project['parent'] = {
'type': 'organization',
'id': flags.organizationId
}
如果源项目中启用了 OS Login,您需要将 roles/compute.osLoginExternalUser 角色分配给有权访问该项目的任何主账号。
共享 VPC
共享 VPC 项目可以根据特定条件进行迁移。首先,源组织资源中拥有 roles/orgpolicy.policyAdmin 角色的用户必须设置组织政策,其中包含要导出的项目的父级上的 constraints/resourcemanager.allowEnabledServicesForExport 限制条件。此限制条件应将 SHARED_VPC 列为 allowed_value。
您无需在迁移之前停用共享 VPC。不过,必须先迁移共享 VPC 宿主项目,然后再迁移其所有服务项目。我们建议您在源位置和目标位置的组织资源之间匹配防火墙规则,这可以最大限度地减少潜在问题,并避免项目和网络在迁移期间出现任何停机时间。如果您在迁移其他服务项目时无限期地将一些服务项目留在源组织资源中,我们不能保证您的网络的健康。
如果您迁移宿主项目,则可以将其移回源组织资源。宿主项目和服务项目可以分属于不同组织的时间没有确切的截止期限。不过,在开始迁移服务项目后,必须先迁移所有项目,然后才能再次迁移宿主项目。
自定义 IAM 角色
您可以在组织资源级层创建自定义 IAM 角色,以便精细控制对资源的访问权限,但这些角色仅在创建它们的组织资源中有效。 如果您尝试迁移包含用户与组织级自定义 IAM 角色之间的允许政策绑定的项目,则迁移将会失败并显示失败的前提条件错误,说明相关角色不存在于目标组织资源中。
如需列出组织资源级层的所有自定义 IAM 角色,请运行以下 Google Cloud CLI 命令:
gcloud iam roles list --organization ORGANIZATION_ID
其中,ORGANIZATION_ID 是您要列出其角色的组织资源 ID。如需了解如何查找组织资源 ID,请参阅获取组织资源 ID。
如需了解组织资源中的自定义 IAM 角色,请运行以下 gcloud CLI 命令:
gcloud iam roles describe --organization ORGANIZATION_ID \
ROLE_ID
其中:
ORGANIZATION_ID是角色的父组织资源的组织资源 ID。ROLE_ID是您要描述的角色的名称。
如要解决失败的前提条件错误,您应该为项目继承的每个组织级层自定义角色创建等效的项目级层自定义角色。然后,移除引用组织级层自定义角色的 IAM 角色绑定。
项目迁移后,您便可以更新允许政策以使用目标组织资源中的组织级自定义角色。
如需进一步了解自定义角色,请参阅创建和管理自定义角色。
存储分区锁定
借助 Cloud Storage 存储桶锁定,您可以在 Cloud Storage 存储桶中配置数据保留政策,来管理存储桶中对象必须保留多长时间。存储分区锁定是使用安全锁进行保护,防止意外删除项目。
在迁移过程中,保留政策和安全锁将保留在项目中,但您应该清楚是否迁移强制执行存储桶锁定的项目,并防止意外移动。
VPC Service Controls 安全边界
借助 VPC Service Controls,用户可以围绕其Google Cloud 服务设置基于项目的安全边界,从而降低数据渗漏风险。您无法迁移 VPC Service Controls 安全边界保护的项目。
如需从安全边界中移除项目,请参阅管理服务边界。位于 VPC Service Controls 边界内的项目可能无法在组织资源之间迁移。此准则适用于创建或更新边界后的一天内。从服务边界中移除项目后,可能需要几个小时的时间才能迁移项目。
适用于服务账号的情境感知访问权限政策
借助情境感知访问权限,用户可以根据网络、位置和时间等情境属性,为服务账号定义对 Google Cloud 资源的访问政策。 您无法迁移至少有一项针对服务账号的情境感知访问权限政策的项目。
如需删除服务账号的情境感知访问权限政策,请参阅管理访问权限绑定。
创建或删除政策时,请注意以下时间方面的考虑因素:
- 政策创建:新创建的情境感知访问权限政策可能不会立即阻止迁移。这种传播延迟在政策创建后最长可持续 24 小时。
- 政策删除:从项目中移除所有情境感知访问权限政策后,可能需要几个小时才能迁移项目。
专用互连
我们建议将包含专用互连对象的项目以及带有 VLAN 连接的项目一起迁移。在组织资源之间迁移后,具有专用互连对象或关联了这些对象的 VLAN 连接的项目将继续正常运行。唯一的限制是,您将无法在组织资源拆分之间创建新的 VLAN 连接。
对一个组织资源中附加了专用互连对象或关联了该对象的 VLAN 连接的项目进行的配置更改可能不会传播到另一个组织资源。我们建议您尽可能不要跨组织资源拆分此类项目太长时间。
合作伙伴互连
使用合作伙伴互连迁移项目时,无需特别注意。
管理项目
管理项目是已启用应用的文件夹中的 Google Cloud 项目,用作所有以应用为中心的元数据的中央存储库。每个已启用应用的文件夹只能包含一个管理项目。管理项目为应用库和 API 提供基础设施,包括结算、配额和访问权限控制。您无法迁移管理项目。