您可以在组织资源之间迁移 Google Cloud 项目,也可以将独立项目(没有组织资源的项目)移至组织资源中。如需在组织之间迁移项目,您必须拥有所需的 Identity and Access Management (IAM) 权限,并在来源和目标组织资源上配置必要的组织政策。如需移动独立项目,您只需拥有项目和目标组织资源所需的 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()
迁移后的任务
成功迁移项目后,您必须执行多项迁移后任务,以确保运营连续性、安全合规性和正确的结算。迁移项目会更改其资源层次结构,这会影响继承的权限和组织级政策。
以下是您可以在迁移后完成的一些步骤:
政策验证:验证项目是否从其新父级继承了预期的组织政策。
访问权限控制:审核 IAM 角色,确保新组织中的用户拥有必要的访问权限。
结算:如果需要向目标组织收取项目费用,请更新结算账号。 这是一个可选步骤。 如需了解详情,请参阅更改项目的结算账号和在组织资源之间迁移结算账号。
清理:撤消临时 Project Mover 角色,并移除
allowedExportDestinations和allowedImportSources限制条件。”
更改项目的结算账号
Cloud Billing 账号可跨组织资源使用。将项目从一个组织资源移至另一个组织资源不会影响结算,系统会继续向旧结算账号收取费用。不过,在组织资源之间迁移项目通常还需要迁移到新的结算账号。
如要更改结算账号,请执行以下操作:
- 前往 Google Cloud 控制台中的“结算”页面。
转到“结算”页面 - 点击要更改的结算账号的名称。
- 在与此结算账号相关联的项目下,找到要迁移的项目名称,然后点击右侧的菜单按钮。
- 点击更改结算账号,然后选择新的结算账号。
- 点击设置账号。
已经产生但尚未在交易历史记录中报告的费用将被计入原来的结算账号。这可能包括项目迁移前最多两天的费用。
在组织资源之间迁移结算账号
结算账号可以从一个组织资源迁移到另一个组织资源,但通常这不是必需的步骤。大多数现有组织资源都已有结算账号,应改用该账号。
如果新的结算账号没有关联的组织资源,您必须对该结算账号拥有 roles/billing.admin 角色,并对要与该结算账号关联的组织资源拥有 roles/billing.admin 和 roles/billing.creator 角色。
如果您需要迁移现有结算账号,请执行以下操作:
- 在 Google Cloud 控制台中,前往“结算”页面。
转到“结算”页面 - 点击您要迁移的结算账号的名称。
- 在账号管理页面的顶部,点击更改组织。
- 选择目标组织资源,然后点击确定。
结算账号现已与指定的组织资源相关联。
回滚迁移
Google Cloud 如果迁移期间或之后出现问题,组织之间的迁移不会自动回滚。如果您需要还原迁移,则必须手动执行回滚。
如果您错误地迁移了项目,则可以通过再次执行迁移来回滚操作,将旧来源作为新目标,将旧目标作为新来源。您必须拥有必要的 IAM 权限并强制执行组织政策,才能允许此操作,就像这是一次全新的迁移一样。
如需撤消迁移,请执行以下操作:
- 在组织政策(
allowedExportDestinations和allowedImportSources)中交换来源 ID 和目标 ID。 - 重复执行迁移命令,将项目移回原始来源 ID。