配置专用 Google 访问通道
本页介绍如何启用和配置专用 Google 访问通道。默认情况下,当 Compute Engine 虚拟机缺少分配给其网络接口的外部 IP 地址时,它只能将数据包发送到其他内部 IP 地址目的地。您只需在虚拟机网络接口使用的子网上启用专用 Google 访问通道,就可以允许这些虚拟机连接到 Google API 和服务使用的外部 IP 地址集。
专用 Google 访问通道还允许访问 App Engine 使用的外部 IP 地址,包括基于第三方 App Engine 的服务。
如需查看可与专用 Google 访问通道搭配使用且符合条件的 API 和服务,请参阅专用 Google 访问通道概览中支持的服务。
如需了解关于专用 Google 访问通道和 Google Cloud 所提供的其他专用连接选项的背景信息,请参阅服务的专用访问选项。
规格
如果满足以下所有条件,则虚拟机接口可以使用专用 Google 访问通道将数据包发送到 Google API 和服务的外部 IP 地址:
虚拟机接口连接到启用了专用 Google 访问通道的子网。
包含该子网的 VPC 网络符合 Google API 和服务的网络要求。
没有为虚拟机接口分配外部 IP 地址。
从虚拟机发送的数据包的来源 IP 地址与以下 IP 地址之一匹配。
- 虚拟机接口的主要内部 IPv4 地址
- 虚拟机接口的内部 IPv6 地址
- 来自别名 IP 地址范围的内部 IPv4 地址
为其网络接口分配了外部 IPv4 或 IPv6 地址的虚拟机不需要专用 Google 访问通道即可连接到 Google API 和服务。但是,VPC 网络必须满足访问 Google API 和服务的要求。
网络要求
专用 Google 访问通道有以下要求:
- 您必须在 Google Cloud 控制台的 API 和服务页面上启用您需要使用的 Google API。
如果要使用 IPv6 连接到 Google API 和服务,必须同时满足以下两个要求:
您的虚拟机必须配置了
/96
IPv6 地址范围。虚拟机上运行的软件必须发送来源与该范围的其中一个 IPv6 地址匹配的数据包。
- 根据您选择的配置,您可能需要更新 DNS 条目、路由和防火墙规则。如需了解详情,请参阅配置选项摘要。
权限
拥有 Network Admin 角色的项目 Owner、Editor 和 IAM 主账号可以创建或更新子网并分配 IP 地址。
如需详细了解角色,请参阅 IAM 角色文档。
日志记录
Cloud Logging 会捕获子网中已启用专用 Google 访问通道的虚拟机实例发出的所有 API 请求。日志条目将 API 请求的来源标识为调用实例的内部 IP 地址。
您可以将每日使用情况报告和每月汇总报告配置为传送到 Cloud Storage 存储桶。如需了解详情,请参阅查看使用情况报告。
配置选项摘要
下表汇总了配置专用 Google 访问通道的不同方式。如需了解更详细的配置信息,请参阅网络配置。
网域选项 | DNS 配置 | 路由配置 | 防火墙配置 |
---|---|---|---|
默认网域 | 无需特殊的 DNS 配置。 | 确保您的 VPC 网络可以将流量路由到 Google API 和服务所使用的 IP 地址范围。 |
确保您的防火墙规则允许流向 Google API 和服务所使用的 IP 地址范围的出站流量。 如果没有加以阻止的优先级更高的规则,则默认的允许出站流量防火墙规则允许此流量。 |
private.googleapis.com
|
在专用 DNS 区域中配置 DNS 记录,以向以下 IP 地址发送请求: 对于 IPv4 流量:
对于 IPv6 流量:
|
确保您的 VPC 网络具有到以下 IP 范围的路由: 对于 IPv4 流量:
对于 IPv6 流量:
|
确保您的防火墙规则允许流向以下 IP 范围的出站流量: 对于 IPv4 流量:
对于 IPv6 流量:
|
restricted.googleapis.com
|
配置 DNS 记录以向以下 IP 地址发送请求: 对于 IPv4 流量:
对于 IPv6 流量:
|
确保您的 VPC 网络具有到以下 IP 范围的路由: 对于 IPv4 流量:
对于 IPv6 流量:
|
确保您的防火墙规则允许流向以下 IP 范围的出站流量: 对于 IPv4 流量:
对于 IPv6 流量:
|
网络配置
本部分介绍 VPC 网络中的虚拟机必须满足 Google API 和服务的基本网络要求。
网域选项
选择您要用于访问 Google API 和服务的网域。
private.googleapis.com
和 restricted.googleapis.com
虚拟 IP 地址 (VIP) 仅支持 TCP 上基于 HTTP 的协议(HTTP、HTTPS 和 HTTP/2)。不支持所有其他协议,包括 MQTT 和 ICMP。
网域和 IP 地址范围 | 支持的服务 | 用法示例 |
---|---|---|
默认网域。 Google API 和服务的所有域名, 各种 IP 地址范围,您可以通过引用默认网域的 IP 地址来确定一组默认 IP 地址使用的可能 IP 地址范围。 |
启用对大多数 Google API 和服务的 API 访问权限,无论这些 Google API 和服务是否受 VPC Service Controls 支持。包括对 Google 地图、Google Ads 和 Google Cloud 的 API 访问权限。包括 Google Workspace Web 应用(例如 Gmail 和 Google 文档)以及其他 Web 应用。 |
如果您没有为 |
|
启用对大多数 Google API 和服务的 API 访问权限,无论这些 Google API 和服务是否受 VPC Service Controls 支持。包括对 Google 地图、Google Ads、Google Cloud 以及大多数其他 Google API(包括以下列表)的 API 访问权限。不支持 Gmail 和 Google 文档等 Google Workspace Web 应用。不支持任何交互式网站。 与以下域名匹配的域名:
|
使用 在以下情况下选择
|
|
启用对 VPC Service Controls 所支持的 Google API 和服务的 API 访问权限。 阻止对不支持 VPC Service Controls 的 Google API 和服务进行访问。不支持 Google Workspace API 或 Google Workspace Web 应用(例如 Gmail 和 Google 文档)。 |
使用 如果您只需要访问 VPC Service Controls 支持的 Google API 和服务,请选择
|
restricted.googleapis.com
,因为它会针对数据渗漏提供额外的风险缓释措施。使用 restricted.googleapis.com
可拒绝对 VPC Service Controls 不支持的 Google API 和服务的访问权限。如需了解详情,请参阅 VPC Service Controls 文档中的设置专用连接。
private.googleapis.com
和 restricted.googleapis.com
的 IPv6 支持
以下 IPv6 地址范围可用于将来自 IPv6 客户端的流量定向到 Google API 和服务:
private.googleapis.com
:2600:2d00:0002:2000::/64
restricted.googleapis.com
:2600:2d00:0002:1000::/64
如果您要使用 private.googleapis.com
或 restricted.googleapis.com
网域,并且具有使用 IPv6 地址的客户端,请考虑配置 IPv6 地址。同时配置了 IPv4 地址的 IPv6 客户端可以使用 IPv4 地址访问 Google API 和服务。并非所有服务都接受来自 IPv6 客户端的流量。
DNS 配置
对于与 Google API 和服务的连接,您可以选择将数据包发送到与 private.googleapis.com
或 restricted.googleapis.com
VIP 地址关联的 IP 地址。如需使用 VIP,您必须配置 DNS,以便 VPC 网络中的虚拟机使用 VIP 地址而不是公共 IP 地址访问服务。
以下部分介绍如何使用 DNS 区域将数据包发送到与所选 VIP 地址关联的 IP 地址。请按照适用于您的所有场景的相关说明操作:
- 如果您使用的服务具有
*.googleapis.com
域名,请参阅为googleapis.com
配置 DNS。 如果您使用的服务具有其他域名,请参阅为其他网域配置 DNS。
例如,如果您使用 Google Kubernetes Engine (GKE),则还需要配置
*.gcr.io
和*.pkg.dev
;如果您使用 Cloud Run,则需要配置*.run.app
。如果您使用 Cloud Storage 存储桶,并且向 Cloud Storage 自定义域名发送请求,请参阅为 Cloud Storage 自定义域名配置 DNS。
为 VIP 配置 DNS 记录时,请仅使用以下步骤中说明的 IP 地址。请勿混用 private.googleapis.com
和 restricted.googleapis.com
VIP 中的地址;这样做可能会导致间歇性故障,因为系统提供的服务会因数据包的目的地而异。
为 googleapis.com
配置 DNS
为 googleapis.com
创建 DNS 区域和记录:
- 为
googleapis.com
创建专用 DNS 区域。为此,请考虑创建 Cloud DNS 专用区域。 在
googleapis.com
区域中,根据您选择使用的网域,为private.googleapis.com
或restricted.googleapis.com
创建以下专用 DNS 记录。对于
private.googleapis.com
:为
private.googleapis.com
创建A
记录,指向以下 IP 地址:199.36.153.8
、199.36.153.9
、199.36.153.10
、199.36.153.11
。如需使用 IPv6 地址连接到 API,还要为
private.googleapis.com
配置AAAA
记录,指向2600:2d00:0002:2000::
。
对于
restricted.googleapis.com
:为
restricted.googleapis.com
创建A
记录,指向以下 IP 地址:199.36.153.4
、199.36.153.5
、199.36.153.6
、199.36.153.7
。如需使用 IPv6 地址连接到 API,还要为
restricted.googleapis.com
创建AAAA
记录,指向2600:2d00:0002:1000::
。
如需在 Cloud DNS 中创建专用 DNS 记录,请参阅添加记录。
在
googleapis.com
区域中,为*.googleapis.com
创建CNAME
记录,指向您已配置的网域:private.googleapis.com
或restricted.googleapis.com
。
为其他网域配置 DNS
某些 Google API 和服务是使用其他域名提供,其中包括 *.gcr.io
、*.gstatic.com
、*.pkg.dev
、pki.goog
和 *.run.app
。请参阅网域选项中的“网域和 IP 地址范围表”,以确定是否可以使用 private.googleapis.com
或 restricted.googleapis.com
访问其他网域的服务。接下来,对于每个其他网域,请执行以下操作:
为
DOMAIN
创建 DNS 区域(例如gcr.io
)。如果您使用的是 Cloud DNS,请确保此区域与您的googleapis.com
专用区域位于同一项目中。在此专用 DNS 区域中,根据您选择使用的网域,为
private.googleapis.com
或restricted.googleapis.com
创建以下 DNS 记录。对于
private.googleapis.com
:为
DOMAIN
创建A
记录,指向以下 IP 地址:199.36.153.8
、199.36.153.9
、199.36.153.10
、199.36.153.11
。如需使用 IPv6 地址连接到 API,还要为
DOMAIN
创建AAAA
记录,指向2600:2d00:0002:2000::
。
对于
restricted.googleapis.com
:为
DOMAIN
创建A
记录,指向以下 IP 地址:199.36.153.4
、199.36.153.5
、199.36.153.6
、199.36.153.7
。如需使用 IPv6 地址连接到 API,还要为
restricted.googleapis.com
创建AAAA
记录,指向2600:2d00:0002:1000::
。
在
DOMAIN
区域中,为*.DOMAIN
创建一个CNAME
记录,指向DOMAIN
。例如,为*.gcr.io
创建一个CNAME
记录,指向gcr.io
。
为 Cloud Storage 自定义域名配置 DNS
如果您使用的是 Cloud Storage 存储桶,并向 Cloud Storage 自定义域名发送请求,则将自定义 Cloud Storage 域名的 DNS 记录配置为指向 private.googleapis.com
或 restricted.googleapis.com
的 IP 地址不足以允许访问 Cloud Storage 存储桶。
如果要向 Cloud Storage 自定义域名发送请求,您还必须将 HTTP 请求的主机标头和 TLS SNI 明确设置为 storage.googleapis.com
。private.googleapis.com
和 restricted.googleapis.com
的 IP 地址不支持 HTTP 请求主机标头和 TLS SNI 中的自定义 Cloud Storage 主机名。
路由选项
您的 VPC 网络必须具有适当的路由,其下一个跃点是默认互联网网关。Google Cloud 不支持通过其他虚拟机实例或自定义下一个跃点,将流量路由到 Google API 和服务。尽管称之为默认互联网网关,但从 VPC 网络中的虚拟机发送到 Google API 和服务的数据包仍保留在 Google 网络中。
如果您选择默认网域,则您的虚拟机实例将使用 Google 外部 IP 地址的子集连接到 Google API 和服务。这些 IP 地址可公开路由,但从 VPC 网络中的虚拟机到这些地址的路径仍保留在 Google 网络中。
Google 不会在互联网上向
private.googleapis.com
或restricted.googleapis.com
网域使用的任何 IP 地址发布路由。因此,这些网域只能通过 VPC 网络中的虚拟机或连接到 VPC 网络的本地系统访问。
如果您的 VPC 网络包含其下一个跃点是默认互联网网关的默认路由,则您可以使用该路由访问 Google API 和服务,而无需创建自定义路由。如需了解详情,请参阅使用默认路由进行路由。
如果您已将默认路由(目标 0.0.0.0/0
或 ::0/0
)替换为下一个跃点不是默认互联网网关的自定义路由,则可以满足使用自定义路由的 Google API 和服务的路由要求。
如果您的 VPC 网络没有 IPv6 默认路由,则不会与 Google API 和服务建立 IPv6 连接。请添加 IPv6 默认路由以允许 IPv6 连接。
使用默认路由进行路由
每个 VPC 网络在创建时都会包含 IPv4 默认路由 (0.0.0.0/0
)。如果您在子网上启用外部 IPv6 地址,则系统生成的 IPv6 默认路由 (::/0
) 会添加到该 VPC 网络。
默认路由提供了以下目标的 IP 地址的路径:
默认网域。
private.googleapis.com
:199.36.153.8/30
和2600:2d00:0002:2000::/64
。restricted.googleapis.com
:199.36.153.4/30
和2600:2d00:0002:1000::/64
。
如需检查给定网络中默认路由的配置,请按照以下说明操作。
控制台
在 Google Cloud 控制台中,转到路由页面。
过滤路由列表,以仅显示您需要检查的网络的路由。
查找目标为
0.0.0.0/0
(对于 IPv4 流量)或::/0
(对于 IPv6 流量)且下一个跃点为默认互联网网关的路由。
gcloud
使用以下 gcloud
命令,并将 NETWORK_NAME
替换为要检查的网络名称:
gcloud compute routes list \ --filter="default-internet-gateway NETWORK_NAME"
如果需要创建替换默认 IPv4 路由,请参阅添加静态路由。
如果您需要创建替换默认 IPv6 路由,请参阅添加 IPv6 默认路由。
自定义路由
作为默认路由的替代方案,您可以使用自定义静态路由,每个路由都有更具体的目的地,并且每个路由都使用默认互联网网关下一个跃点。您需要的路由数量及其目标 IP 地址取决于您选择的网域。
- 默认网域:您必须拥有用于 Google API 和服务的 IP 地址范围的路由。
private.googleapis.com
:199.36.153.8/30
和2600:2d00:0002:2000::/64
restricted.googleapis.com
:199.36.153.4/30
和2600:2d00:0002:1000::/64
此外,我们建议您为 34.126.0.0/18
和 2001:4860:8040::/42
添加路由。如需了解详情,请参阅配置选项摘要。
如需检查给定网络中 Google API 和服务的自定义路由配置,请按照以下说明操作。
控制台
在 Google Cloud 控制台中,转到路由页面。
使用过滤表文本字段根据以下条件过滤路由列表,需将
NETWORK_NAME
替换为您的 VPC 网络名称。- 网络:
NETWORK_NAME
- 下一个跃点类型:
default internet gateway
- 网络:
查看每个路由的“目的地 IP 范围”列。如果您选择了默认网域,请检查多条自定义静态路由,分别针对默认网域使用的每个 IP 地址范围。如果您选择
private.googleapis.com
或restricted.googleapis.com
,请查找该网域的 IP 范围。
gcloud
使用以下 gcloud
命令,并将 NETWORK_NAME
替换为要检查的网络的名称:
gcloud compute routes list \ --filter="default-internet-gateway NETWORK_NAME"
除非您自定义带 --format
标志的命令,否则路由以表格式列出。在 DEST_RANGE
列中查找每条路由的目的地。如果您选择了默认网域,请检查多条自定义静态路由,分别针对默认网域使用的每个 IP 地址范围。如果您选择 private.googleapis.com
或 restricted.googleapis.com
,请查找该网域的 IP 范围。
如果需要创建路由,请参阅添加静态路由。
防火墙配置
您的 VPC 网络的防火墙配置必须允许通过虚拟机访问 Google API 和服务使用的 IP 地址。隐式 allow egress
规则满足此要求。
在某些防火墙配置中,您需要创建特定的出站允许规则。例如,假设您已创建了一条出站流量拒绝规则,用于阻止流向所有目标(IPv4 为 0.0.0.0
,IPv6 为 ::/0
)的流量。在这种情况下,您必须创建一条出站流量允许防火墙规则,其优先级高于 Google API 和服务的所选网域使用的每个 IP 地址范围的出站流量拒绝规则。
- 默认网域:Google API 和服务的所有 IP 地址范围。
private.googleapis.com
:199.36.153.8/30
和2600:2d00:0002:2000::/64
restricted.googleapis.com
:199.36.153.4/30
和2600:2d00:0002:1000::/64
此外,我们建议您在出站流量允许防火墙规则中包含 34.126.0.0/18
和 2001:4860:8040::/42
。如需了解详情,请参阅配置选项摘要。
如需创建防火墙规则,请参阅创建防火墙规则。在定义每个出站允许规则的目标时,您可以限制防火墙规则应用的虚拟机。
默认网域的 IP 地址
本部分介绍如何创建 Google API 和服务使用的默认网域 IP 地址范围列表。这些范围是动态分配的,并且经常更改,因此无法为个别服务或 API 定义特定 IP 地址范围。如需维护准确的列表,请设置自动化以每天运行脚本。作为维护 IP 地址范围列表的替代方案,请考虑使用 private.googleapis.com VIP 或 Private Service Connect。
请按照以下步骤确定默认网域(例如 *.googleapis.com
和 *.gcr.io
)使用的 IP 地址范围。
Google 在 goog.json 中发布了其向互联网用户提供的完整 IP 范围列表。
Google 还在 cloud.json 中发布了可用于客户的 Google Cloud 资源的全球和区域外部 IP 地址范围列表。
Google API 和服务的默认网域使用的 IP 地址位于通过从 goog.json
的范围中删除 cloud.json
的所有范围之后计算得出的范围列表中。这些列表会经常更新。
您可以使用以下 Python 脚本创建 IP 地址范围列表,其中包含 Google API 和服务的默认网域使用的 IP 地址范围。
如需了解如何运行此脚本,请参阅运行方式。
专用 Google 访问通道配置
满足 VPC 网络中的网络要求后,您可以启用专用 Google 访问通道。
启用专用 Google 访问通道
请按照以下步骤启用专用 Google 访问通道:
控制台
在 Google Cloud 控制台中,进入 VPC 网络页面。
点击您需要为其启用专用 Google 访问通道的子网所属网络的名称。
对于现有子网:
- 点击子网的名称。系统会显示子网详情页面。
- 点击修改。
- 在专用 Google 访问通道部分,选择开启。
- 点击保存。
对于新子网:
- 点击添加子网。
- 输入名称。
- 选择区域。
- 对于 IP 堆栈类型,请选择仅 IPv4(单栈)或 IPv4 和 IPv6(双栈)。
输入 IPv4 范围。这是子网的主要 IPv4 范围。
如果您选择的范围不是 RFC 1918 地址,请确认该范围与现有配置不冲突。如需了解详情,请参阅 IPv4 子网范围。
如果您要创建双栈子网,请选择 IPv6 访问权限类型:内部或外部。
如果您要将访问权限类型设置为内部,但内部选项不可用,请检查是否为网络分配了内部 IPv6 范围。
对新子网进行其他选择以满足需求。例如,您可能需要创建次要子网 IP 范围或启用 VPC 流日志。
在专用 Google 访问通道部分,选择开启。
点击添加。
gcloud
对于现有子网:
确定该子网的名称和地区。如需列出特定网络的子网,请使用以下命令:
gcloud compute networks subnets list --filter=NETWORK_NAME
运行以下命令以启用专用 Google 访问通道:
gcloud compute networks subnets update SUBNET_NAME \ --region=REGION \ --enable-private-ip-google-access
运行以下命令以验证专用 Google 访问通道是否已启用:
gcloud compute networks subnets describe SUBNET_NAME \ --region=REGION \ --format="get(privateIpGoogleAccess)"
在以上所有命令中,将以下内容替换为有效值:
SUBNET_NAME
:子网的名称REGION
:子网的地区NETWORK_NAME
:包含子网的 VPC 网络的名称
创建新子网时,请使用 --enable-private-ip-google-access
标志启用专用 Google 访问通道:
gcloud compute networks subnets create SUBNET_NAME \ --region=REGION \ --network=NETWORK_NAME \ --range=PRIMARY_IP_RANGE \ [ --stack-type=STACK_TYPE ] \ [ --ipv6-access-type=IPv6_ACCESS_TYPE ] \ --enable-private-ip-google-access
将以下内容替换为有效值:
SUBNET_NAME
:子网的名称REGION
:子网的地区NETWORK_NAME
:包含子网的 VPC 网络的名称PRIMARY_IP_RANGE
:子网的主要 IP 地址范围STACK_TYPE
是子网的堆栈类型:IPV4_ONLY
或IPV4_IPV6
。IPv6_ACCESS_TYPE
是 IPv6 访问权限类型:EXTERNAL
或INTERNAL
。只有在您指定了--stack-type=IPV4_IPV6
时,才需要指定 IPv6 访问权限类型。
停用专用 Google 访问通道
请按照以下步骤为现有子网停用专用 Google 访问通道:
控制台
在 Google Cloud 控制台中,进入 VPC 网络页面。
点击您需要为其停用专用 Google 访问通道的子网所属网络的名称。
点击现有子网的名称。系统会显示子网详情页面。
点击修改。
在专用 Google 访问通道部分,选择关闭。
点击保存。
gcloud
确定该子网的名称和地区。如需列出特定网络的子网,请使用以下命令:
gcloud compute networks subnets list \ --filter=NETWORK_NAME
运行以下命令以停用专用 Google 访问通道:
gcloud compute networks subnets update SUBNET_NAME \ --region=REGION \ --no-enable-private-ip-google-access
运行以下命令以验证专用 Google 访问通道是否已停用:
gcloud compute networks subnets describe SUBNET_NAME \ --region=REGION \ --format="get(privateIpGoogleAccess)"
在以上所有命令中,将以下内容替换为有效值:
SUBNET_NAME
:子网的名称REGION
:子网的地区NETWORK_NAME
:包含子网的 VPC 网络的名称