取消预配共享 VPC

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

Service Project Admin 任务

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

确定受影响的资源

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

删除资源

在 Service Project Admin 确定了将受到取消预配流程影响的资源之后,需要删除这些资源:

共享 VPC 管理任务

本部分中的所有任务都必须由共享 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 对于宿主项目处于活跃状态,但项目中会保留安全锁,以防止它被意外删除。由于该安全锁可由项目所有者移除,因此配置共享 VPC 准则中包含相应的步骤,可以定义一项组织政策,限制哪些 IAM 成员能够移除项目安全锁。

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

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

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

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

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

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

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

gcloud

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

    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. 再次列出安全锁,以确认其已移除。

后续步骤