本文档介绍如何设置从 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/18
和2001: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
- 对于 IPv4 流量:
- 将流量路由到允许直接
连接时,请使用以下范围:
<ph type="x-smartling-placeholder">
- </ph>
- 对于 IPv4 流量:
34.126.0.0/18
- 对于 IPv6 流量:
2001:4860:8040::/42
- 对于 IPv4 流量:
- 如需将流量路由到
向本地网络中的主机通告受限路由
如果您使用适用于本地主机的专用 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 路由器上的会话,请按照以下步骤进行操作:
控制台
在 Google Cloud 控制台中,前往 Cloud Router 路由器页面。
选择要更新的 Cloud Router 路由器。
在 Cloud Router 路由器的详情页面中,选择修改。
展开通告的路由部分。
对于路由,选择创建自定义路由。
如需���续通告 Cloud Router 路由器可用的子网,请选择通告向 Cloud Router 公开的所有子网。启用此选项可模拟 Cloud Router 路由器的默认行为。
如需添加通告的路由,请选择添加自定义路由。
配置路由通告。
- 来源:选择自定义 IP 范围。
- IP 地址范围:
- 对于 IPv4 连接:
199.36.153.4/30
- 对于 IPv6 连接:
2600:2d00:0002:1000::/64
- 对于 IPv4 连接:
- 说明:添加对
Restricted Google APIs IPs
的说明。
添加路由后,选择保存。
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
- 对于 IPv4 连接:
如需将自定义 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
- 对于 IPv4 连接:
为特定 BGP 上的受限范围创建自定义通告路由 现有 Cloud Router 路由器的会话,请按照以下步骤进行操作:
控制台
在 Google Cloud 控制台中,前往 Cloud Router 路由器页面。
选择待更新 BGP 会话所属的 Cloud Router 路由器。
在 Cloud Router 路由器的详情页面中,选择要更新的 BGP 会话。
在 BGP 会话详情页面中,选择修改。
对于路由,选择创建自定义路由。
选择通告向 Cloud Router 路由器公开的所有子网以继续通告 Cloud Router 路由器可用的子网。启用此选项可模拟 Cloud Router 路由器的默认行为。
选择添加自定义路由以添加通告的路由。
配置路由通告。
- 来源:选择自定义 IP 地址范围以指定自定义 IP 地址范围。
- IP 地址范围:
- 对于 IPv4 连接:
199.36.153.4/30
- 对于 IPv6 连接:
2600:2d00:0002:1000::/64
- 对于 IPv4 连接:
- 说明:添加对
Restricted Google APIs IPs
的说明。
添加完路由后,选择保存。
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
- 对于 IPv4 连接:
如需将自定义 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
如需详细了解自定义通告模式,请参阅自定义 通告路由。
- 对于 IPv4 连接:
配置防火墙规则
对于专用 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:
为您的 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
:(可选)代管区域的直观易懂的说明。
启动一项事务。
gcloud dns record-sets transaction start --zone=ZONE_NAME
将
ZONE_NAME
替换为您在第一步中创建的区域的名称。添加 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
执行事务。
gcloud dns record-sets transaction execute --zone=ZONE_NAME
将
ZONE_NAME
替换为您在第一步中创建的区域的名称。可选。如需使本地主机能够访问受限 VIP,请完成以下步骤:
创建 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
:(可选)代管区域的直观易懂的说明。
在本地部署网络中,将您的本地部署 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) 实现此行为:
将以下行添加到
/etc/bind/named.conf
:include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local";
将以下行添加到
/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;}; };
将以下代码行添加到
/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;}; };
将以下代码行添加到
/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。