借助 VPC Service Controls 安全地使用 IAP 实现 TCP 转发

本页面介绍如何使用 VPC Service Controls,以保证安全地使用 IAP 进行 TCP 转发,以及如何在 VPC Service Controls 边界内使用 IAP 进行 TCP 转发。

准备工作

  1. 阅读 VPC Service Controls 概览

  2. 设置使用不带服务边界的 IAP TCP 转发。

  3. 使用 VPC Service Controls 创建服务边界。此服务边界可保护 Google 管理的指定服务资源。创建服务边界时,请执行以下操作:

    1. 将包含您要通过 IAP 连接到的 Compute Engine 实例的项目添加到您的服务边界内的项目中。如果您在某个 Compute Engine 实例上运行使用 IAP 执行 TCP 转发的客户端,请将包含该实例的项目也添加到边界中。

    2. Identity-Aware Proxy TCP API 添加到受您的服务边界保护的服务列表中。

    如果您创建服务边界时未添加所需的项目和服务,请参阅管理服务边界,了解如何更新服务边界。

使用 Cloud DNS 配置 DNS 记录

如果使用 IAP 执行 TCP 转发的客户端(很可能是 Google Cloud CLI)未在任何边界内运行,则可以跳过此步骤。另一方面,如果您在边界内运行客户端,则必须配置 DNS 记录,以便使用 IAP 执行 TCP 转发。

使用 IAP 执行 TCP 转发时,所用的网域并非 googleapis.com 的子网域。使用 Cloud DNS 添加 DNS 记录,以确保您的 VPC 网络正确处理发送到这些网域的请求。如需详细了解 VPC 路由,请参阅路由概览

请按照以下步骤为网域创建托管区域、添加 DNS 记录以路由请求,并执行事务。您可以将 gcloud CLI 与您的首选终端搭配使用,也可以使用预安装了 gcloud CLI 的 Cloud Shell

  1. 为 VPC Service Controls 集成配置 *.googleapis.com DNS 是一种典型做法。

  2. 收集这些信息,以便在配置 DNS 记录时使用:

    • PROJECT_ID 是托管您的 VPC 网络的项目的 ID。

    • NETWORK_NAME 是您正在其中运行使用 IAP 执行 TCP 转发的客户端的 VPC 网络的名称。

    • ZONE_NAME 是您要创建的区域的名称。例如 iap-tcp-zone

  3. 为网域 tunnel.cloudproxy.app 创建专用托管区域,以便 VPC 网络可对其进行处理。

    gcloud dns managed-zones create ZONE_NAME \
     --visibility=private \
     --networks=https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME \
     --dns-name=tunnel.cloudproxy.app \
     --description="Description of your managed zone"
    
  4. 启动一项事务。

    gcloud dns record-sets transaction start --zone=ZONE_NAME
    
  5. 添加以下 DNS A 记录。此操作会将流量重新路由到 Google 的受限 VIP(虚拟 IP 地址)。

    gcloud dns record-sets transaction add \
     --name=tunnel.cloudproxy.app. \
     --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \
     --zone=ZONE_NAME \
     --ttl=300
    
  6. 添加以下 DNS CNAME 记录,以指向刚刚添加的 A 记录。此操作会将与相应网域匹配的所有流量重定向至上一步中列出的 IP 地址。

    gcloud dns record-sets transaction add \
     --name="*.tunnel.cloudproxy.app." \
     --type=CNAME tunnel.cloudproxy.app. \
     --zone=ZONE_NAME \
     --ttl=300
    
  7. 执行事务。

    gcloud dns record-sets transaction execute --zone=ZONE_NAME
    

使用 BIND 配置 DNS

您可以使用 BIND,而不使用 Cloud DNS。在这种情况下,请按照使用 BIND 配置 DNS 的说明执行操作,但改用使用 IAP 执行 TCP 转发的网域,而非常规 googleapis.com 网域。

使用专用 VIP

根据您配置边界和网络的方式,您可以使用专用 VIP,而不使用受限 VIP。如果您希望这样做,请在配置 DNS 记录的指令中使用

199.36.153.8 199.36.153.9 199.36.153.10 199.36.153.11

代替

199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7

使用共享 VPC

如果您使用的是共享 VPC,您必须将主机和服务项目添加到服务边界。请参阅管理服务边界

后续步骤