取消预配共享 VPC

本页面介绍了如何取消预配现有共享 VPC 配置,以将所有服务项目与共享 VPC 宿主项目断开连接。取消预配是一种单向过程。首先请确保您已熟悉共享 VPC 概览预配共享 VPC 页面中的内容。

Service Project Admin 任务

在连接到共享 VPC 宿主项目的每个服务项目中,Service Project Admin 必须移除宿主项目上的所有依赖项。依赖项可能包括实例、实例组、实例模板和负载平衡器转发规则。

确定受影响的资源

如需确定依赖于共享 VPC 宿主项目的资源,Service Project Admin 可列出其共享子网。在服务项目与宿主项目分离时,这些子网将不再可用;因此,依赖它们的任何资源都会受到影响。

删除资源

在服务项目管理员确定了将受到取消预配流程影响的资源之后,则需要删除这些资源:

Shared VPC Admin 任务

本部分中的所有任务都必须由共享 VPC 管理员执行。

分离服务项目

对于需要从共享 VPC 宿主项目分离的各服务项目,重复执行以下步骤。

gcloud

  1. 以 Shared VPC Admin 的身份向 gcloud 进行验证(如果尚未验证)。将 SHARED_VPC_ADMIN 替换为 Shared VPC Admin 的名称:

    gcloud auth login SHARED_VPC_ADMIN
    
  2. 将宿主项目与服务项目分离。将 SERVICE_PROJECT_ID 替换为服务项目的项目 ID,并将 HOST_PROJECT_ID 替换为宿主项目的项目 ID。

    如您有组织级别的 Shared VPC Admin 角色,请运行以下命令:

    gcloud compute shared-vpc associated-projects remove SERVICE_PROJECT_ID
        --host-project HOST_PROJECT_ID
    

    如您有文件夹级别的 Shared VPC Admin 角色,请运行以下命令:

    gcloud beta compute shared-vpc associated-projects remove SERVICE_PROJECT_ID
        --host-project HOST_PROJECT_ID
    
  3. 使用以下命令之一确认服务项目已分离:

    gcloud compute shared-vpc get-host-project SERVICE_PROJECT_ID
    
    gcloud compute shared-vpc list-associated-resources HOST_PROJECT_ID
    
  4. 如果您只需要分离服务项目,请退出 gcloud 以保护您的 Shared VPC Admin 帐号凭据。否则,请跳过此步骤并继续执行停用宿主项目的步骤。

    gcloud auth revoke SHARED_VPC_ADMIN
    

API

  1. 分离服务项目。

    • 如果您在组织级层拥有 Shared VPC Admin 角色,请使用 v1 API:

      POST https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/disableXpnResource
      {
      "xpnResource": {
        "id": "SERVICE_PROJECT_ID"
      }
      }
      
    • 如果您在文件夹级层拥有 Shared VPC Admin 角色,请使用 Beta 版 API:

      POST https://compute.googleapis.com/compute/beta/projects/HOST_PROJECT_ID/disableXpnResource
      {
      "xpnResource": {
        "id": "SERVICE_PROJECT_ID"
      }
      }
      

    请将占位符替换为有效值:

    • HOST_PROJECT_ID 是宿主项目的 ID。
    • SERVICE_PROJECT_ID 是要分离的服务项目的 ID。

    如需了解详情,请参阅 projects.disableXpnResource 方法。

  2. 确认服务项目已分离。

    • 检查服务项目是否未连接到任何宿主项目。

      GET https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/getXpnHost
      

      SERVICE_PROJECT_ID 替换为服务项目的 ID。

      如需了解详情,请参阅 projects.getXpnHost 方法。

    • 列出连接到共享 VPC 宿主项目的服务项目,以确认该项目不再列出。

      GET https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/getXpnResources
      

      HOST_PROJECT_ID 替换为宿主项目的 ID。

      如需了解详情,请参阅 projects.getXpnResources 方法。

停用宿主项目

只有在所有服务项目分离后才能为宿主项目停用共享 VPC。停用后,防止其被轻易删除的安全锁将被自动移除。

gcloud

  1. 以 Shared VPC Admin 的身份向 gcloud 进行验证(如果尚未验证)。将 SHARED_VPC_ADMIN 替换为 Shared VPC Admin 的名称:

    gcloud auth login SHARED_VPC_ADMIN
    
  2. 停用宿主项目的共享 VPC。将 HOST_PROJECT_ID 替换为宿主项目的 ID。

    如您有组织级别的 Shared VPC Admin 角色,请运行以下命令:

    gcloud compute shared-vpc disable HOST_PROJECT_ID
    

    如您有文件夹级别的 Shared VPC Admin 角色,请运行以下命令:

    gcloud beta compute shared-vpc disable HOST_PROJECT_ID
    
  3. 确认该项目不再列为您的组织的宿主项目。将 ORG_ID 替换为您的组织 ID(由 gcloud organizations list 确定)。

    gcloud compute shared-vpc organizations list-host-projects ORG_ID
    
  4. 如果您只需要停用宿主项目,您可以退出 gcloud 以保护您的 Shared VPC Admin 帐号凭据。否则,请跳过此步骤并继续执行删除项目的步骤。

    gcloud auth revoke SHARED_VPC_ADMIN
    

API

  1. 为项目停用共享 VPC。

    • 如果您在组织级层拥有 Shared VPC Admin 角色,请使用 v1 API:

      POST https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/disableXpnHost
      
    • 如果您在文件夹级层拥有 Shared VPC Admin 角色,请使用 Beta 版 API:

      POST https://compute.googleapis.com/compute/beta/projects/HOST_PROJECT_ID/disableXpnHost
      

    HOST_PROJECT_ID 替换为宿主项目的 ID。

    如需了解详情,请参阅 projects.disableXpnHost 方法。

  2. 列出您的宿主项目以确认该项目未列出。

    POST https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/listXpnHosts
    

    HOST_PROJECT_ID 替换为宿主项目的 ID。

    如需了解详情,请参阅 projects.listXpnHosts 方法。

删除项目

本部分讨论删除不再使用的项目;例如,您可能有一些服务项目在从宿主项目分离后需要删除,或者在停用宿主项目之后,可能不再需要宿主项目。

删除宿主项目

您可以选择将项目保留为正常项目或将其关停。关停项目会将其删除。

如果 IAM 主帐号具有组织的 resourcemanager.projectDeleter 角色,或者该主帐号是宿主项目的 Owner,则该主帐号可以删除宿主项目。如果 Shared VPC Admin 具有正确的角色或所有权,则可以删除宿主项目。

删除服务项目

如果您不再需要各服务项目,您可以选择关闭各服务项目。在此之前,请确保服务项目已与宿主项目分离

如果 IAM 主帐号具有组织的 resourcemanager.projectDeleter 角色,或者该主帐号是服务项目的 Owner,则该主帐号可以删除服务项目。如果 Service Project Admin 具有正确的角色或所有权,则可以删除服务项目。

强制删除宿主项目

尽管共享 VPC 对于宿主项目处于活动状态,但项目中会保留安全锁,以防止它被意外删除。由于该安全锁可由项目 Owner 移除,因此预配共享 VPC 准则中包含相应的步骤,可以定义一项组织政策,限制哪些 IAM 主帐号能够移除项目安全锁。

通常,应在按照如下顺序完成以下任务之后,再删除宿主项目:

  • 所有服务项目已均从宿主项目中分离,并且
  • 共享 VPC 已被停用

在共享 VPC 被停用时,保护宿主项目的安全锁将被自动移除。

本部分详细介绍如何强行关闭宿主项目。在以下情况下,您仅应考虑此选项:

  • 您不能遵循分离服务项目和停用共享 VPC 的常规步骤操作。
  • 除了自动添加的一个安全锁之外,还有额外的安全锁用于保护宿主项目。

如果您强行关停宿主项目,并且服务项目中有资源使用共享 VPC 网络,则会发生以下事件:

  • 宿主项目中的所有共享 VPC 网络、其子网、路由、防火墙规则及所有网络资源都会被删除。
  • 诸如在连接到宿主项目的服务项目中运行的实例等资源会停止。
  • 内部 TCP/UDP 负载平衡器会被停用(如果其转发规则依赖于共享 VPC 网络)。

gcloud

  1. 作为可以移除项目安全锁的 IAM 主帐号向 gcloud 进行身份验证。如果您的组织政策对可以移除安全锁的主帐号进行限制,则您必须作为具有组织的 resourcemanager.lienModifier 角色的 IAM 主帐号进行身份验证。如果您没有落实这样的政策,则宿主项目的项目所有者可以移除安全锁。

    ACCOUNT 替换为相应 IAM 主帐号的名称:

    gcloud auth login ACCOUNT
    
  2. 列出与宿主项目关联的安全锁。将 HOST_PROJECT_ID 替换为宿主项目的 ID。

    gcloud alpha resource-manager liens list \
    --project HOST_PROJECT_ID
    
  3. 按名称逐个移除各安全锁,直至不再有安全锁为止。 将 LIEN_NAME 替换为要移除的安全锁的名称。

    gcloud alpha resource-manager liens delete LIEN_NAME \
    --project HOST_PROJECT_ID
    
  4. 确认所有安全锁均已移除。

    gcloud alpha resource-manager liens list \
    --project HOST_PROJECT_ID
    
  5. 移除安全锁后,您可以退出 gcloud 以保护有权移除安全锁的 IAM 主帐号的凭据。

    gcloud auth revoke ACCOUNT
    
  6. 现在可以关停宿主项目了。

API

  1. 列出与宿主项目关联的安全锁。

    GET https://cloudresourcemanager.googleapis.com/v1/liens?parent=projects:HOST_PROJECT_ID
    

    HOST_PROJECT_ID 替换为宿主项目的 ID。

    如需了解详情,请参阅 liens.list 方法。

  2. 按名称移除各安全锁,直至不再有安全锁为止。

    DELETE https://cloudresourcemanager.googleapis.com/v1/liens/LIEN_NAME
    

    LIEN_NAME 替换为要删除的安全锁的名称。

    如需了解详情,请参阅 liens.delete 方法。

  3. 再次列出安全锁,以确认其已移除。

后续步骤