取消预配共享 VPC

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

Service Project Admin 任务

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

确定受影响的资源

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

删除资源

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

共享 VPC 管理任务

本部分中的所有任务都必须由 Shared VPC Admin 执行。

分离服务项目

对于需要与共享 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://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/disableXpnResource
          {
          "xpnResource": {
            "id": "SERVICE_PROJECT_ID"
          }
          }
          
    • 如果您在文件夹级层拥有 Shared VPC Admin 角色,请使用 Beta 版 API:

          POST https://www.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://www.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/getXpnHost
          

      将 SERVICE_PROJECT_ID 替换为服务项目的 ID。

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

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

          GET https://www.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://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/disableXpnHost
          
    • 如果您在文件夹级层拥有 Shared VPC Admin 角色,请使用 Beta 版 API:

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

    将 HOST_PROJECT_ID 替换为宿主项目的 ID。

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

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

        POST https://www.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 进行身份验证。如果您的组织政策对可以移除安全锁的成员进行限制,则您必须作为 IAM 成员以组织的 resourcemanager.lienModifier 角色进行身份验证。如果您没有这样的政策,则宿主项目的项目 Owner 可以移除安全锁。

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

后续步骤