设置通往 Google API 和服务的专用连接

本文档介绍如何设置从 VPC 网络或本地网络中的主机到 VPC Service Controls 支持的 Google API 和服务的专用连接。

在阅读本文档之前,我们建议您先熟悉专用 Google 访问通道概念、规范和网络配置。请查看关于将专用 Google 访问通道与 VPC Service Controls 配合使用的示例拓扑图。

准备工作

  • 启用 API 通过 API 和中的“服务”页面 Google Cloud 控制台
  • 确保您具有创建或更新子网所需的角色。拥有 Network Admin 角色的项目 Owner、Editor 和 IAM 主账号可以创建或更新子网并分配 IP 地址。 如需详细了解角色,请参阅 IAM 角色文档。
  • 验证是否已为专用 Google 访问通道和适用于本地宿主机的专用 Google 访问通道设置 VPC 网络。自动模式和自定义模式 VPC 网络均受支持。传统网络不受支持。
  • 确保 VPC 网络中的虚拟机实例具有专用 IP 地址(没有公共 IP 地址),且位于启用了专用 Google 访问通道的子网中。
  • 对于本地主机,请确保已与 VPC 网络建立 Cloud VPN 隧道或 Cloud Interconnect 连接。如需支持具有 IPv6 地址的本地主机,请参阅 IPv6 支持

过程概览

如需设置专用连接,请完成以下任务:

  • 配置 restricted.googleapis.com IP 地址范围的路由。如需了解详情,请参阅配置路由
  • 配置防火墙规则,以允许相应流量到达 restricted.googleapis.com IP 地址范围。如需了解详情,请参阅配置防火墙规则
  • 配置 DNS,以使到 Google API 的流量解析至 restricted.googleapis.com IP 地址范围。如需了解详情,请参阅配置 DNS

restricted.googleapis.com 的 IPv6 支持

您可以使用 restricted.googleapis.com 网域的 IPv6 地址范围访问 Google API:2600:2d00:0002:1000::/64

如果您要使用 restricted.googleapis.com 网域,并且具有使用 IPv6 地址的客户端,请考虑配置 IPv6 地址。同时配置了 IPv4 地址的 IPv6 客户端可以使用 IPv4 地址访问 Google API 和服务。并非所有服务都接受来自 IPv6 客户端的流量。

如需允许本地环境中的 IPv6 客户端使用 restricted.googleapis.com 访问 Google API,您必须配置与 VPC 网络的连接以支持 IPv6。如需了解详情,请参阅以下页面:

本地客户端可以从任何 IPv6 GUA 或 ULA 地址发送请求,但 ULA 范围 fda3:e722:ac3:cc00::/64 除外,该范围预留供内部使用。

如需详细了解 restricted.googleapis.com VIP,请参阅配置专用 Google 访问通道

直接连接到 API 和服务

某些 Google API 和服务提供来自 Compute Engine 的直接连接 虚拟机 (VM) 实例,绕过 Google Front Ends (GFE)。要允许 您必须确保路由和防火墙规则允许 34.126.0.0/182001:4860:8040::/42的流量。 您无需为这些地址创建 DNS 记录。一些 Google Cloud 服务支持直接连接,从而为 Google gRPC API要启用这种增强型效果,您必须提供对 指定 IP 地址范围

仅支持通过 Google Cloud 资源直接连接。 您无法使用来自本地主机的直接连接。

提供直接连接的服务支持 VPC Service Controls。

配置通向 restricted.googleapis.com 的路由

虽然 VPC Service Controls 是针对兼容和已配置的服务强制执行的,但无论您使用哪个网域,restricted.googleapis.com 都会针对数据渗漏提供额外的风险缓解措施。restricted.googleapis.com 会拒绝对 VPC Service Controls 不支持的 Google API 和服务的访问权限。

对于专用 Google 访问通道和适用于本地主机的专用 Google 访问通道,您的 VPC 网络必须包含目标为 restricted.googleapis.com IP 地址范围且下一个跃点是默认互联网网关的路由。即使下一个跃点是默认互联网网关,发送到 restricted.googleapis.com 的流量仍在 Google 的网络中。

如果您的 VPC 网络没有下一个跃点是默认互联网网关的默认路由,您可以创建目标为 restricted.googleapis.com IP 地址范围且下一个跃点是默认互联网网关的自定义静态路由。如需阻止访问互联网,您必须移除下一个跃点是默认互联网网关的其他路由。

如需详细了解如何使用 VPC 路由,请参阅 VPC 文档中的使用路由

在 VPC 网络中配置自定义静态路由

添加自定义静态路由,以便访问 VPC Service Controls

gcloud compute routes create ROUTE_NAME \
  --network=NETWORK_NAME \
  --destination-range=DESTINATION_RANGE \
  --next-hop-gateway=default-internet-gateway

替换以下内容:

  • ROUTE_NAME:自定义路由的名称
  • NETWORK_NAME:您的 VPC 网络的名称
  • DESTINATION_RANGE:路由的目标范围
    • 如需将流量路由到 restricted.googleapis.com VIP,请使用以下命令 范围:
      • 对于 IPv4 流量:199.36.153.4/30
      • 对于 IPv6 流量:2600:2d00:0002:1000::/64
    • 将流量路由到允许直接 连接时,请使用以下范围: <ph type="x-smartling-placeholder">
        </ph>
      • 对于 IPv4 流量:34.126.0.0/18
      • 对于 IPv6 流量:2001:4860:8040::/42

向本地网络中的主机通告受限路由

如果您使用适用于本地主机的专用 Google 访问通道,请配置路由,以便通过 Cloud VPN 或 Cloud Interconnect 连接转发 Google API 流量。公布受限 VIP 地址范围 您的本地网络,请使用 Cloud Router 路由器自定义通告 模式。通过 受限的 VIP 地址范围只能供符合以下条件的本地主机访问: 通过专用 IP 地址访问您的 VPC 网络。

您可以将此自定义通告路由添加到 Cloud Router 路由器(针对 路由器上的 BGP 会话)或选择 BGP 会话(针对单个 Cloud VPN) 隧道或 VLAN 连接)。

IPv6 路由仅在启用了 IPv6 的 BGP 会话中通告。

为所有 BGP 的受限范围创建自定义通告路由 现有 Cloud Router 路由器上的会话,请按照以下步骤进行操作:

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud Router 路由器页面。

    前往“Cloud Router 路由器”

  2. 选择要更新的 Cloud Router 路由器。

  3. 在 Cloud Router 路由器的详情页面中,选择修改

  4. 展开通告的路由部分。

  5. 对于路由,选择创建自定义路由

  6. 如需继续通告 Cloud Router 路由器可用的子网,请选择通告向 Cloud Router 公开的所有子网。启用此选项可模拟 Cloud Router 路由器的默认行为。

  7. 如需添加通告的路由,请选择添加自定义路由

  8. 配置路由通告。

    • 来源:选择自定义 IP 范围
    • IP 地址范围
      • 对于 IPv4 连接:199.36.153.4/30
      • 对于 IPv6 连接:2600:2d00:0002:1000::/64
    • 说明:添加对 Restricted Google APIs IPs 的说明。
  9. 添加路由后,选择保存

gcloud

运行 update 命令,并使用 --set-advertisement-ranges--add-advertisement-ranges 标志指定自定义 IP 范围:

  • 如需设置自定义 IP 范围,请使用 --set-advertisement-ranges 标志。不限 现有自定义通告路由将被替换。以下示例 更新 my-router Cloud Router 路由器,以通告所有子网 restricted.googleapis.com IP 地址范围

    gcloud compute routers update my-router \
        --advertisement-mode CUSTOM \
        --set-advertisement-groups ALL_SUBNETS \
        --set-advertisement-ranges RANGES
    

    RANGES 替换为您要使用的范围:

    • 对于 IPv4 连接:199.36.153.4/30
    • 对于 IPv6 连接:2600:2d00:0002:1000::/64
    • 对于 IPv4 和 IPv6 连接:199.36.153.4/30,2600:2d00:0002:1000::/64

  • 如需将自定义 IP 范围关联到现有通告,请使用 --add-advertisement-ranges 标志。请注意,您必须将 Cloud Router 路由器的通告模式设置为 custom 才能使用此标志。以下示例将 restricted.googleapis.com IP 地址范围添加到 Cloud Router 路由器的通告中:

    gcloud compute routers update my-router \
        --add-advertisement-ranges RANGES
    

    RANGES 替换为您要使用的范围:

    • 对于 IPv4 连接:199.36.153.4/30
    • 对于 IPv6 连接:2600:2d00:0002:1000::/64
    • 对于 IPv4 和 IPv6 连接:199.36.153.4/30,2600:2d00:0002:1000::/64

为特定 BGP 上的受限范围创建自定义通告路由 现有 Cloud Router 路由器的会话,请按照以下步骤进行操作:

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud Router 路由器页面。

    前往“Cloud Router 路由器”

  2. 选择待更新 BGP 会话所属的 Cloud Router 路由器。

  3. 在 Cloud Router 路由器的详情页面中,选择要更新的 BGP 会话。

  4. BGP 会话详情页面中,选择修改

  5. 对于路由,选择创建自定义路由

  6. 选择通告向 Cloud Router 路由器公开的所有子网以继续通告 Cloud Router 路由器可用的子网。启用此选项可模拟 Cloud Router 路由器的默认行为。

  7. 选择添加自定义路由以添加通告的路由。

  8. 配置路由通告。

    • 来源:选择自定义 IP 地址范围以指定自定义 IP 地址范围。
    • IP 地址范围
      • 对于 IPv4 连接:199.36.153.4/30
      • 对于 IPv6 连接:2600:2d00:0002:1000::/64
    • 说明:添加对 Restricted Google APIs IPs 的说明。
  9. 添加完路由后,选择保存

gcloud

运行 update-bgp-peer 命令,并使用 --set-advertisement-ranges--add-advertisement-ranges 标志指定自定义 IP 范围。

  • 如需设置自定义 IP 范围,请使用 --set-advertisement-ranges 标志。不限 现有自定义通告路由将被替换。

    如果您要添加 IPv6 自定义范围,并且为 BGP 会话停用了 IPv6 流量,则可以使用 --enable-ipv6 标志启用它。

    以下示例更新了 my-router Cloud Router 路由器上的 my-bgp-session BGP 会话,以通告所有子网及自定义 IP 范围:

    gcloud compute routers update-bgp-peer my-router \
        --peer-name my-bgp-session \
        --advertisement-mode CUSTOM \
        --set-advertisement-groups ALL_SUBNETS \
        --set-advertisement-ranges RANGES
    

    RANGES 替换为您要使用的范围:

    • 对于 IPv4 连接:199.36.153.4/30
    • 对于 IPv6 连接:2600:2d00:0002:1000::/64
    • 对于 IPv4 和 IPv6 连接:199.36.153.4/30,2600:2d00:0002:1000::/64

  • 如需将自定义 IP 范围关联到现有通告,请使用 --add-advertisement-ranges 标志。请注意,您必须将 Cloud Router 路由器的通告模式设置为 custom 才能使用此标志。

    如果您要添加 IPv6 自定义范围,并且为 BGP 会话停用了 IPv6 流量,则可以使用 --enable-ipv6 标志启用它。

    以下示例将受限 VIP 地址范围添加到 Cloud Router 路由器的通告中:

    gcloud compute routers update-bgp-peer my-router \
        --peer-name my-bgp-session \
        --add-advertisement-ranges RANGES
    

    RANGES 替换为您要使用的范围:

    • 对于 IPv4 连接:199.36.153.4/30
    • 对于 IPv6 连接:2600:2d00:0002:1000::/64
    • 对于 IPv4 和 IPv6 连接:199.36.153.4/30,2600:2d00:0002:1000::/64

    如需详细了解自定义通告模式,请参阅自定义 通告路由

配置防火墙规则

对于专用 Google 访问通道,虚拟机实例使用内部 IP 地址,无需外部 IP 地址即可访问受保护的 Google API 资源。不过, 虚拟机实例可能拥有外部 IP 地址 满足互联网访问要求。 除了自定义通告路由外,您还可以 创建来自 VPC 网络中虚拟机实例的出站流量 防火墙规则拒绝出站流量。

默认情况下,如果存在适用路由,隐式允许出站防火墙规则允许虚拟机实例将流量发送到任意目标。您可以先创建出站流量拒绝规则,以阻止所有出站流量。然后,您可以创建优先级更高的出站流量规则,用于允许流量进入您的 VPC 网络中的选定目标和 restricted.googleapis.com IP 地址范围。与 restricted.googleapis.com 的所有通信都在 TCP 端口 443 上。

让来自 Google Cloud 的流量到达 restricted.googleapis.com 对于 VIP 地址,请为以下目标添加防火墙规则:

  • 对于 IPv4 流量:199.36.153.4/30
  • 对于 IPv6 流量:2600:2d00:0002:1000::/64

允许来自 Google Cloud 的流量到达 直接连接,请为 以下目的地:

  • 对于 IPv4 流量:34.126.0.0/18
  • 对于 IPv6 流量:2001:4860:8040::/42

如需详细了解如何使用 VPC 防火墙规则,请参阅 在 Cloud Monitoring 中使用 VPC 防火墙规则, Cloud 下一代防火墙文档。

配置本地防火墙规则,以允许来自本地主机的流量到达 restricted.googleapis.com IP 地址范围。

  • 对于 IPv4 流量:199.36.153.4/30
  • 对于 IPv6 流量:2600:2d00:0002:1000::/64

与 Google API 和服务的直接连接不可访问 支持通过本地网络进行连接。

配置 DNS

您可以为 VPC 网络使用代管专用区域。借助 Cloud DNS 专用 DNS 区域,您可以托管可从授权 VPC 网络访问的 DNS 区域。如需配置来自某些本地域名服务器的转发,您可以使用 restricted.googleapis.com IP 地址范围。然后,您可以为 googleapis.com 创建一个专用区域,其中包含 DNS A 记录,该记录用于映射每个 *.googleapis.com 名称的 restricted.googleapis.com 和相应的 CNAME 记录。如需了解详情,请参阅管理区域

对于本地访问,您可以配置 Cloud DNS 入站转发政策以允许本地域名服务器查询 Cloud DNS 代管式专用可用区。您也可以配置本地域名服务器,例如使用 BIND 的域名服务器:

使用 Cloud DNS 配置 DNS

如需为 VPC 网络中的虚拟机实例和/或本地网络中的主机启用 DNS 解析,请使用 Cloud DNS。如果您使用共享 VPC,请参阅 Cloud DNS 文档中的专用区域和共享 VPC。此外,如果您使用的是共享 VPC 我们建议您将共享 VPC 网络宿主项目添加到 作为连接到网络的项目

使用专用区域配置 Cloud DNS

您可以使用专用区域配置 Cloud DNS:

  1. 为您的 VPC 网络创建一个托管专用区域。

    gcloud dns managed-zones create ZONE_NAME \
     --visibility=private \
     --networks=https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME \
     --description=DESCRIPTION \
     --dns-name=googleapis.com
    

    请替换以下内容:

    • ZONE_NAME:要创建的区域的名称。例如 vpc。下列各个步骤中都将使用此名称。
    • PROJECT_ID:托管您的 VPC 网络的项目的 ID。
    • NETWORK_NAME:您的 VPC 网络的名称。
    • DESCRIPTION:(可选)代管区域的直观易懂的说明。
  2. 启动一项事务。

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

    ZONE_NAME 替换为您在第一步中创建的区域的名称。

  3. 添加 DNS 记录。

    gcloud dns record-sets transaction add --name=*.googleapis.com. \
        --type=CNAME restricted.googleapis.com. \
        --zone=ZONE_NAME \
        --ttl=300
    

    ZONE_NAME 替换为您在第一步中创建的区域的名称。

    gcloud dns record-sets transaction add --name=restricted.googleapis.com. \
        --type=A 199.36.153.4, 199.36.153.5, 199.36.153.6, 199.36.153.7 \
        --zone=ZONE_NAME \
        --ttl=300
    

    ZONE_NAME 替换为您在第一步中创建的区域的名称。

    如果要为 restricted.googleapis.com 配置 IPv6 地址,还要创建以下记录集:

    gcloud dns record-sets transaction add --name=restricted.googleapis.com. \
        --type=AAAA 2600:2d00:0002:1000:: \
        --zone=ZONE_NAME \
        --ttl=300
    
  4. 执行事务。

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

    ZONE_NAME 替换为您在第一步中创建的区域的名称。

  5. 可选。如需使本地主机能够访问受限 VIP,请完成以下步骤:

    1. 创建 DNS 政策并启用入站 DNS 转发,使 VPC 网络的名称解析服务可供本地网络中的系统外部使用。

      gcloud dns policies create POLICY_NAME \
       --networks=https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME \
       --enable-inbound-forwarding \
       --description=DESCRIPTION
      

      请替换以下内容:

      • POLICY_NAME:要创建的政策的名称。例如 apipolicy
      • PROJECT_ID:托管您的 VPC 网络的项目的 ID。
      • NETWORK_NAME:您的 VPC 网络的名称。
      • DESCRIPTION:(可选)代管区域的直观易懂的说明。
    2. 在本地部署网络中,将您的本地部署 DNS 指向 Cloud DNS 转发器 IP 地址。如需查找转发器 IP 地址,请使用 compute addresses list 命令:

      gcloud compute addresses list --filter='name ~ ^dns-forwarding.*' \
       --format='csv[no-heading](address, subnetwork)'
      

使用 BIND 配置 DNS

如果您使用 BIND 进行 DNS 解析,则可以对其进行配置,以将 Google API 请求解析至受限 Google API。使用以下示例 BIND 配置, 使用响应政策 可用区 (RPZ) 实现此行为:

  1. 将以下行添加到 /etc/bind/named.conf

    include "/etc/bind/named.conf.options";
    include "/etc/bind/named.conf.local";
    
  2. 将以下行添加到 /etc/bind/named.conf.options

    options {
      directory "/var/cache/bind";
    
      dnssec-validation no;
    
      auth-nxdomain no;    # conform to RFC 1035
      listen-on-v6 { any; };
      listen-on { any; };
      response-policy { zone "googleapis.zone"; };
      allow-query { any;};
    };
    
  3. 将以下代码行添加到 /etc/bind/named.conf.local 中:

    include "/etc/bind/named.conf.default-zones";

    zone "googleapis.zone" { type master; file "/etc/bind/db.googleapis.zone"; allow-query {none;}; };

  4. 将以下代码行添加到 /etc/bind/db.googleapis.zone 中:

    $TTL 1H
    @                       SOA LOCALHOST. noreply.localhost(1 1h 15m 30d 2h)
                            NS  LOCALHOST.

    *.googleapis.com CNAME restricted.googleapis.com. restricted.googleapis.com CNAME rpz-passthru.

在特殊情况下配置 DNS

在特殊情况下配置 DNS 时,请注意以下几点:

  • 自定义 BIND 在使用 Dataflow 时不受支持。如需在将 Dataflow 与 VPC Service Controls 结合使用时自定义 DNS 解析,请使用 Cloud DNS 专用区域,而不是使用自定义 BIND 服务器。如需使用您自己的本地 DNS 解析,请考虑使用 Google Cloud DNS 转发方法
  • 例如,如果您使用 Google Kubernetes Engine (GKE),则可能还需要为 gcr.io 配置 DNS。如需了解详情,请参阅为 GKE 专用集群设置 Container Registry