执行迁移

本页介绍了将 Google Cloud 项目从一个组织资源迁移到另一个组织资源,或从无组织资源迁移到有组织资源的步骤。

如需迁移项目,您必须确保自己拥有正确的 Identity and Access Management (IAM) 权限,并且在源资源和目标资源上都配置了特定的组织政策。

准备工作

项目迁移是一项跨组织操作。为防止资源未经授权被移动,您必须满足以下要求。

所需的角色

如需获得在组织资源之间迁移项目所需的权限,请让管理员为您授予以下 IAM 角色:

  • 您要迁移的组织资源中的项目的 Project IAM Admin (roles/resourcemanager.projectIamAdmin)
  • 项目父级资源(文件夹或组织资源)上的 Project Mover (roles/resourcemanager.projectMover)
  • 如果目标资源是文件夹: 目标资源上的 Project Mover (roles/resourcemanager.projectMover)
  • 如果目标资源是组织: 目标资源的 Project Creator (roles/resourcemanager.projectCreator)

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

必须在源组织和目标组织中向同一用户账号授予这些角色。这些预定义角色包含迁移项目所需的权限。 如需查看所需的确切权限,请展开所需权限部分。

所需权限

迁移项目需要以下权限:

  • resourcemanager.projects.getIamPolicy 对要在组织资源之间迁移的项目拥有
  • 对要在组织资源之间迁移的项目拥有 resourcemanager.projects.update 权限
  • 项目的父资源(文件夹或组织资源)的 resourcemanager.projects.move 权限
  • 如果目标资源是文件夹:对目标资源的 resourcemanager.projects.move 权限
  • 如果目标资源是组织资源:对目标资源的 resourcemanager.projects.create 权限
  • 如果您要迁移尚未与组织关联的项目:对要迁移的项目拥有 resourcemanager.projects.setIamPolicy 权限

您还可以通过自定义角色或其他预定义角色获取这些权限。

必需的组织政策

默认情况下,项目迁移受到限制。您必须通过在两个组织的根级层设置组织政策来明确允许导出和导入。如需配置迁移所需的组织政策,您必须在父组织和目标组织中都拥有 roles/orgPolicy.policyAdmin 角色。

  • 在源组织资源上:设置 constraints/resourcemanager.allowedExportDestinations 政策。 添加目标组织的 ID 作为允许的值。

  • 在目标组织资源上:设置 constraints/resourcemanager.allowedImportSources 政策。 添加来源组织的 ID 作为允许的值。

执行迁移

授予权限并强制执行政策后,您可以使用 Google Cloud CLI 或 Resource Manager API 迁移项目。

gcloud

如需将项目迁移到其他组织资源,请运行以下命令:

gcloud beta projects move PROJECT_ID \
    --organization ORGANIZATION_ID

您还可以使用以下命令将文件夹指定为目标资源:

gcloud beta projects move PROJECT_ID \
    --folder FOLDER_ID

替换以下字段:

  • PROJECT_ID:您要迁移的项目的 ID 或编号。
  • ORGANIZATION_ID:您要将项目移至的目标组织资源的 ID。
  • FOLDER_ID:您要将项目移至的文件夹的 ID。

您只能指定一个目标,即文件夹或组织资源。

API

借助 v1 Resource Manager API,您可以通过将项目的 parent 字段设置为目标资源的 ID 来在组织资源之间迁移项目。

如需迁移项目,请执行以下操作:

  • 使用 projects.get() 方法获取 project 对象。
  • parent 字段更新为目标资源 ID。
  • 执行 projects.update() 方法。

以下代码段演示了这些步骤:

    project = crm.projects().get(projectId=flags.projectId).execute()
    project['parent'] = {
        'type': 'organization',
        'id': flags.organizationId
    }

    project = crm.projects().update(
    projectId=flags.projectId, body=project).execute()

迁移后任务

成功迁移项目后,您必须执行多项迁移后任务,以确保运营的连续性、安全合规性和正确的结算。迁移项目会更改其资源层次结构,从而影响继承的权限和组织级政策。

以下是一些您可以在迁移后完成的步骤:

  1. 政策验证:验证项目是否从其新父级继承了预期的组织政策。

  2. 访问权限控制:审核 IAM 角色,确保新组织中的用户拥有必要的访问权限。

  3. 结算:如果项目需要向目标组织结算,请更新结算账号。 这是一个可选步骤。 如需了解详情,请参阅更改项目的结算账号在组织资源之间迁移结算账号

  4. 清理:撤消临时 Project Mover 角色,并移除 allowedExportDestinationsallowedImportSources 限制条件。

更改项目的结算账号

Cloud Billing 账号可以跨组织资源使用。将项目从一个组织资源移动到另一个组织资源不会影响结算,系统会对旧结算账号继续收费。不过,在组织资源之间迁移项目时,系统通常还会要求改用新的结算账号。

如需更改结算账号,请执行以下操作:

  1. 前往 Google Cloud 控制台中的“结算”页面
    转到“结算”页面
  2. 点击要更改的结算账号的名称。
  3. 与此结算账号相关联的项目下,找到要迁移的项目的名称,然后点击右侧的菜单按钮。
  4. 点击更改结算账号,然后选择新的结算账号。
  5. 点击设置账号

已经产生但尚未在交易历史记录中报告的费用将被计入原来的结算账号。这可能包括项目迁移之前最多两天的费用。

在组织资源之间迁移结算账号

结算账号可以从一个组织资源迁移到另一个组织资源,但这通常不是必须执行的步骤。大多数现有组织资源已经拥有应该改用的结算账号。

如果新结算账号未与任何组织资源相关联,您必须拥有该结算账号的 roles/billing.admin 角色,以及要与结算账号相关联的组织资源的 roles/billing.adminroles/billing.creator 角色。

如果您需要迁移现有结算账号,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往“结算”页面
    转到“结算”页面
  2. 点击要迁移的结算账号的名称。
  3. 账号管理页面的顶部,点击更改组织
  4. 选择目标组织资源,然后点击确定

该结算账号现在已经与指定的组织资源相关联。

回滚迁移

如果您错误地迁移了项目,则可以将旧来源用作新目的地,将旧目的地作为新来源,再次执行迁移来回滚该操作。为此,您必须拥有必要的 IAM 权限并执行组织政策,就好像这是全新的迁移。

如需反向迁移,请执行以下操作:

  1. 在组织政策(allowedExportDestinationsallowedImportSources)中交换来源 ID 和目标 ID。
  2. 重复执行迁移命令,将项目移回原始源 ID。

后续步骤