处理特殊情况

本文档介绍了如何在迁移项目时处理特殊情况。迁移项目时,请确保您已获得对项目、其父级资源和目标资源授予的必要 IAM 权限。

迁移未与组织资源关联的项目

您可以将尚未与组织资源关联的项目迁移到组织资源中。不过,您无法使用此过程将其更改回无组织。如果您的某个项目 但您希望将其还原为 无组织,请联系您的支持代表寻求帮助。

您必须在目标组织资源上分配 roles/resourcemanager.projectCreator 角色。

如果您没有项目父级组织资源的 resourcemanager.organizations.get 权限,您的项目可能不会在 Google Cloud 控制台中的实际组织下按预期显示。这可能会导致项目看起来未关联 任何组织资源的人员。如需了解详情,请参阅 限制用户的项目公开范围

如需确定项目是否与组织资源相关联,请执行以下操作:

gcloud

运行以下命令:

gcloud projects describe PROJECT_ID

PROJECT_ID 替换为您要迁移的项目的 ID。

如果输出中显示父级资源,则表示该项目未与组织资源相关联。

如果父级资源(文件夹或组织资源)显示在 输出即表示项目与某个组织相关联 资源。

迁移与组织资源无关的项目的过程与在组织资源之间迁移项目的过程类似,但并不需要迁移计划中涉及的所有步骤。如需将项目迁移到组织资源,您应该按以下步骤操作:

  1. 验证项目将继承的政策对此项目的影响。

  2. 在目标位置创建一个专用导入文件夹 组织资源。

  3. 按照分配权限中所述,为项目目标父级资源分配 Identity and Access Management 权限。

  4. 确定是否需要更改结算账号

然后,您就可以执行迁移。

控制台

如需将项目迁移到组织资源,请执行以下操作:

  1. 打开 IAM &管理员 >Google Cloud 控制台页面。

    打开“设置”页面

  2. 选择页面顶部的项目选择器

  3. 组织选择器中选择无组织。如果您未与任何组织资源建立关联,则系统不会显示组织选择器,因此您可以跳过此步骤。

  4. 选择您要迁移的项目。

    项目选择器的屏幕截图

  5. 点击页面顶部的迁移

  6. 组织下拉列表中,选择组织资源 作为项目迁移目标的目标位置

gcloud

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

gcloud beta projects move PROJECT_ID \
    --organization ORGANIZATION_ID

其中:

  • PROJECT_ID 是您要迁移到组织资源的项目的 ID。
  • ORGANIZATION_ID 是您要将项目迁移到的组织资源的 ID。

API

使用 Resource Manager API,您可以将项目迁移到组织中 方法是将该资源的 parent 字段设置为 组织资源。

如需将项目迁移到组织资源,请执行以下操作:

  • 使用 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 项目可以根据特定条件进行迁移。首先,在 Google Cloud 中拥有 roles/orgpolicy.policyAdmin 角色的用户 源组织资源必须设置一个包含 constraints/resourcemanager.allowEnabledServicesForExport 对 要导出项目的父级。此限制条件应将 SHARED_VPC 列为 allowed_value

您无需在迁移前停用共享 VPC。但是,必须先迁移共享 VPC 宿主项目,然后才能迁移其所有服务项目。我们建议您在源位置和目标位置的组织资源之间匹配防火墙规则,这可以最大限度地减少潜在问题,并避免项目和网络在迁移期间出现任何停机时间。如果您在迁移其他服务项目时无限期地将一些服务项目留在源组织资源中,我们不能保证您的网络的健康。

如果您迁移宿主项目,则可以将其移回源组织资源。宿主项目和服务项目在不同组织中可以存在多长时间没有确切期限。但是,当您开始迁移服务项目时,必须先迁移所有服务项目,然后再 可以再次迁移宿主项目

自定义 Identity and Access Management 角色

您可以在组织资源级层创建自定义 Identity and Access Management 角色,以便精细控制对资源的访问权限,但这些角色仅在创建它们的组织资源中有效。如果您尝试将包含用户的 IAM 政策绑定的项目迁移到组织资源级层的自定义 IAM 角色,则该迁移将会失败并显示失败的前提条件错误,说明相关角色不存在于目标组织资源中。

列出组织级别的所有自定义 IAM 角色 资源,请运行以下 Google Cloud CLI 命令:

gcloud iam roles list --organization ORGANIZATION_ID

其中,ORGANIZATION_ID 是您要列出其角色的组织资源 ID。如需了解如何查找组织资源 ID,请参阅创建和管理组织资源

如需获取组织资源中自定义 Identity and Access Management 角色的相关信息, 运行以下 Google Cloud CLI 命令:

gcloud iam roles describe --organization ORGANIZATION_ID \
    ROLE_ID

其中:

  • ORGANIZATION_ID 是 角色的父级组织资源。

  • ROLE_ID 是您要描述的角色的名称。

如要解决失败的前提条件错误,您应该为项目继承的每个组织级层自定义角色创建等效的项目级层自定义角色。然后,移除引用组织级层自定义角色的 IAM 角色绑定。

项目迁移后,您便可以更新 IAM 政策以使用目标组织资源中的组织层级自定义角色。

如需进一步了解自定义角色,请参阅创建和管理自定义角色

存储分区锁定

借助 Cloud Storage 存储分区锁定,您可以在 Cloud Storage 存储分区中配置数据保留政策,来管理存储分区中对象必须保留多长时间。存储分区锁定是使用安全锁进行保护,防止意外删除项目。

在迁移过程中,保留政策和安全锁将与项目一起保留, 但如果要迁移的是具有存储桶锁的项目 并防止意外移动。

VPC Service Controls 安全边界

借助 VPC Service Controls,用户可以围绕其 Google Cloud 服务设置基于项目的安全边界,从而降低数据渗漏风险。您无法迁移 VPC Service Controls 安全边界保护的项目。

如需从安全边界中移除项目,请参阅管理服务边界。VPC Service Controls 边界中的项目可能无法在 组织资源。此准则适用于边界创建后一天或 已更新。项目发布后,可能需要过几个小时才能迁移 已从服务边界中移除

专用互连

我们建议将包含专用互连对象的项目以及带有 VLAN 连接的项目一起迁移。具有专用互连对象或关联了这些对象的 VLAN 连接的项目在组织资源之间迁移后将继续正常运行。唯一的限制是您无法创建新的 VLAN 连接 组织资源分配之间的关系。

在具有 专用互连对象或 VLAN 连接 此对象可能不会传播到其他组织资源。 我们建议您尽可能不要让此类项目在组织资源之间拆分太长时间。

合作伙伴互连

使用合作伙伴互连迁移项目时,无需特别注意。

跨项目服务账号

在迁移跨项目服务账号时,会发生以下情况:

  • 如果您要迁移的项目附加了跨项目服务账号,那么该服务账号在目标组织资源中仍将有效。该项目将继续与 即使有组织政策 会限制 项目。
  • 如果您迁移的项目关联了跨项目服务账号 到源组织资源中的其他项目,则该服务账号将 继续在目标组织资源中正常运行。不过,您不会 以便在任何拥有网域的资源上使用该服务账号 为他们应用限制组织政策,限制他们只能 来源组织资源的网域。

例如,假设您在 organizations/12345678901 中拥有 project-A。此项目附加了 serviceAccount-1,用于将其设置为跨项目服务账号。project-Bproject-C 也同样位于 organizations/12345678901 并且同样使用 serviceAccount-1

您已将一项具有网域限制条件的组织政策应用于 project-C,从而仅允许它访问 organizations/12345678901. 的网域

如果将 serviceAccount-1 添加到 project-C 的 IAM 绑定中,然后将 project-A 迁移到 organizations/45678901234,则该服务账号将正常运行。

如果您将 project-A 迁移到 organizations/45678901234,然后尝试将 serviceAccount-1 添加到 project-C 的 IAM 绑定中,则绑定会因违反网域限制条件而失败。

支持案例

如果要迁移的项目有未处理的支持请求,您需要联系 您的 Google 支持联系人,告知迁移已完成。具有待 Google 处理的支持请求的任何项目都将无法查看这些支持请求,除非 Google 支持团队更新请求元数据以指向新的组织资源。

如果您的项目配置为使用 内部 OAuth 同意屏幕 而您将该资源迁移到了另一个组织资源, 目标组织资源可以授权请求。此行为最长可能需要 24 小时才能生效。在此之前,源组织资源的成员可以对请求进行授权。

以下步骤介绍了如何确保源组织资源的成员在迁移过程中不会失去访问权限。请考虑在以下位置创建新用户: 组织资源成员的目标组织资源,以便 您无需更改 OAuth 权限请求页面配置。

为了避免源组织资源的成员失去访问权限,请执行以下操作:

  1. 将 OAuth 同意屏幕更新为外部而不是内部。

  2. 标记为内部且使用敏感数据的应用不需要申请应用验证。如果应用使用敏感数据, 那么,当同意屏幕更新为外部用户时,来源用户 组织资源会看到一个 “未验证的应用”屏幕 。为了避免这种情况,请针对使用敏感或受限范围的应用进行应用验证

OS Login

如果启用了 OS Login, 您的源项目,则需要分配 roles/compute.osLoginExternalUser 角色 任何有权访问该项目的主账号。这样可以确保这些主账号 不会失去对目标组织资源的访问权限。

虚拟机 (VM) 实例的共享预留

在共享预留中,创建预留的项目(所有者项目)或与之共享预留的任何项目(使用方项目)都可以通过创建虚拟机实例来使用预留。您只能与所有者项目所在组织中的项目共享预留。

将所有者或使用方项目迁移到其他组织后, 会发生以下情况:

  • 如果您将所有者项目迁移到其他组织,Compute Engine 会删除所有者项目创建的所有预留。正在运行的虚拟机实例不受影响。
  • 如果您将使用方项目迁移到其他组织,则使用方项目会停止使用之前组织中的任何共享预留中的资源。

如需了解详情,请参阅共享预留的工作原理

将服务账号附加到资源

对于大多数 Google Cloud 服务,用户需要具有服务账号的 iam.serviceAccounts.actAs 权限才能将该服务账号关联到资源。但是,在过去,为了方便某些服务的使用,即使用户不具备模拟服务账号的权限,某些服务也允许用户将服务账号关联到资源。如需了解详情,请参阅需要具备将服务账号关联到资源的权限

如果客户的源组织资源具有旧版行为(可以在没有正常角色授予的情况下附加服务账号),而目标组织资源则没有,则将 Service Account User 角色 (roles/iam.serviceAccountUser) 授予将这些服务账号附加到资源的用户。有关您需要附加服务的权限的信息 请参阅服务账号的角色 身份验证

如要查看您的组织资源是否有旧版行为,请执行以下操作:

  1. 在 Google Cloud 控制台中,转到组织政策页面。

    转到“组织政策”页面

  2. 从页面顶部的项目选择器中,选择组织 要检查其旧状态的资源。

  3. 在组织政策列表顶部的过滤条件框中,输入 constraints/appengine.enforceServiceAccountActAsCheck

  4. 如果 appengine.enforceServiceAccountActAsCheck 组织政策 出现,则表示组织资源具有旧版行为。

  5. 针对以下每项组织政策重复第 3 步和第 4 步 限制条件:

    • appengine.enforceServiceAccountActAsCheck
    • dataflow.enforceComputeDefaultServiceAccountCheck
    • dataproc.enforceComputeDefaultServiceAccountCheck
    • composer.enforceServiceAccountActAsCheck
  6. 如果出现任何组织政策限制条件,则您的组织资源将使用旧版行为。

如果源组织资源具有旧版行为和目标位置 没有,则授予上述角色。如果源组织资源和目标组织资源都具有旧版行为,则无需执行任何操作,但建议强制执行政策以防止意外模拟。

使用 Analytics Hub 迁移项目

如果您将使用 Analytics Hub 的项目迁移到 组织资源,则可能会遇到一些错误。接收者 请与支持团队联系

如果来自旧组织的数据交换资源不是 可在新版 Analytics Hub 的 Analytics Hub 管理员页面中找到 组织,请使用 Analytics Hub API 更新数据 新组织中的广告交易平台。

使用 projects.locations.dataExchanges.patch 方法

PATCH https://analyticshub.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/dataExchanges/DATA_EXCHANGE_ID?update_mask=UPDATE_DX_FIELD -d { UPDATE_DX_FIELD:UPDATE_DX_VALUE }

替换以下内容:

  • PROJECT_ID 是项目的唯一标识符。
  • LOCATION 是数据交换的位置。
  • DATA_EXCHANGE_ID 是数据交换的 ID。
  • UPDATE_DX_FIELD 是要更新的字段。
  • UPDATE_DX_VALUE 是该字段的更新值。

使用备份和灾难恢复服务迁移项目

您需要先停用备份和灾难恢复服务,然后才能将项目迁移到其他组织资源。目前,此服务已停用,您需要考虑服务中断的风险。完成向新的组织资源的迁移后,您应重新启用备份和灾难恢复服务。

后续步骤

如需了解如何执行迁移,请参阅执行迁移