分析项目迁移

本指南介绍了如何使用 Cloud Asset Inventory Analyze Move API,在实际迁移项目之前从重要政策系统的列表中获取警告和拦截的详细报告。

启用 API

选择或创建项目作为 API 使用方项目,启用 Cloud Asset API

此使用方项目可能与您打算分析和迁移的项目不同。使用方项目将用于生成凭据以发出 API 请求。

下一部分介绍了在您计划分析的源项目上必须授予的必需角色和权限。

分配权限

如需执行项目迁移分析,您需要一个授予 cloudasset.assets.analyzeMove 权限的角色,例如 Cloud Asset ViewerViewer

如需接收服务的相关分析,您还需要与这些服务相关的角色。这些权限包括下列各项:

  • 如果您想要查看源项目的父级组织资源的继承 IAM 政策,则需要源项目的父级组织资源的 resourcemanager.organizations.getIamPolicy 权限。

  • 如果您想要查看从源项目的父级文件夹继承的 IAM 政策,则需要源项目的父级文件夹的 resourcemanager.folders.getIamPolicy 权限。

  • 如果您想要查看项目的 IAM 政策,则需要源项目的 resourcemanager.projects.getIamPolicy 权限。

  • 如果您想要查看继承自此项目的组织政策,则需要源项目的 orgpolicy.policy.get 权限。

  • 如果您想要查看在此项目中继承的 Compute Engine 防火墙政策,则需要源文件夹或组织资源的 compute.organizations.setSecurityPolicy 权限。

  • 如果您想要查看此项目中继承的代码,则需要对源项目或其祖先节点拥有 resourcemanager.hierarchyNodes.listEffectiveTags 权限。

执行分析

您可以使用 Google Cloud CLI 或 API 来分析从资源层次结构中资源的当前位置迁移资源的过程。

gcloud

如需分析从资源层次结构中的当前位置迁移项目的影响,请使用 gcloud asset analyze-move 命令:

gcloud asset analyze-move --project=PROJECT_ID \
  (--destination-folder=FOLDER_ID \
    | --destination-organization=ORGANIZATION_ID)

如需分析将项目移至其他文件夹的影响,请使用 --destination-folder 运行该命令:

gcloud asset analyze-move --project=PROJECT_ID \
  --destination-folder=FOLDER_ID

如需分析将项目迁移到其他组织的影响,请使用 --destination-organization 运行该命令:

gcloud asset analyze-move --project=PROJECT_ID \
  --destination-organization=ORGANIZATION_ID

其中:

  • PROJECT_ID 是要迁移的项目的唯一项目 ID。例如 --myProject123

  • FOLDER_ID 是用于执行分析的目标文件夹的数字文件夹 ID。例如 45678901123

  • ORGANIZATION_ID 是执行分析的目标组织的数字组织 ID。例如 78901123456

API

如需在不执行迁移的情况下分析从资源层次结构中项目的当前位置迁移项目的影响,请使用 cloudasset.analyzeMove 方法:

GET https://cloudasset.googleapis.com/v1/{resource=*/*}: \
  analyzeMove?destinationParent=DESTINATION_NAME

其中:

  • resource 是执行分析的资源的名称。仅支持项目资源,因此此字段必须是项目 ID 或项目编号。例如 projects/my-project-idprojects/12345

  • DESTINATION_NAME 是用于重新设置目标资源父级的 Google Cloud 文件夹或组织资源的名称。系统将分析将资源移至指定目标父级的影响。目标位置必须是文件夹编号或组织资源编号。例如 folders/123organizations/123

迁移分析响应

您从 Move Analysis API 收到的响应会按服务名称分组。每项服务下都有一个适用于此项目迁移的警告和拦截的列表。此分析返回的任何拦截意味着如果您在解决它们之前继续移动,项目迁移将在运行时被拦截。

排查错误

如果 Move Analysis API 返回错误,则它包含标准 gRPC 代码,以及描述 Move Analysis API 分析项目失败原因的消息。

下表描述了可能由 Move Analysis API 返回的错误代码:

错误名称 错误代码 说明
参数无效 3 如果您对项目调用 API 时使用了无效的参数(例如不正确的资源名称),则返回此错误代码。
没有权限 7 如果您没有执行分析所需的权限或源项目不存在,则系统会返回此错误消息。
内部 13 如果对 Identity and Access Management 或组织政策等政策系统的调用出现问题,则返回此错误代码。这并不表示不能迁移,您可以在检查服务是否中断后重试分析。
不可用 14 如果内部系统不同步,则返回此错误代码。这并不表示不能迁移,您可以重试分析。
未通过身份验证 16 如果您没有提供正确的凭据来执行此分析,则返回此错误代码。

错误消息示例

以下示例演示了针对要迁移的项目没有 cloudasset.assets.analyzeMove 权限的用户返回的错误代码:

{
  "error": {
  "code": 403,
  "message": "Failed to fetch Project: projects/test-project-service-3 to perform
              move analysis.",
  "status": "PERMISSION_DENIED"}
}

一些政策系统可能无法分析资源移动。以下示例演示了在用户对要迁移的项目没有 compute.organizations.setSecurityPolicy 权限时从分层防火墙服务返回的错误:

{
  "moveAnalysis": [{
    "displayName": "name hidden",
    "analysis": {
      "warnings": [{
        "detail": "details hidden"
      }]
    }
  }, {
    "displayName": "name hidden",
    "analysis": {
      "warnings": [{
        "detail": "details hidden"
      }]
    }
  }, {
    "displayName": "Hierarchical Firewall",
    "error": {
      "code": 7,
      "message": "Failed to retrieve inherited security policies to perform
                  analysis. Required 'compute.organizations.setSecurityPolicy'
                  permission for {resource ID}"
     }}]
}

后续步骤

Move Analysis API 提供了详细信息,可帮助您在将项目从一个组织资源迁移到另一个组织资源时缓解拦截和其他问题。如需详细了解如何在组织资源之间迁移项目,请参阅迁移项目