专用 Google 访问通道(Private Google Access)允许从没有外部 IP 的虚拟机访问 Google Cloud 服务的 API。本文将详细介绍此功能。
什么是专用 Google 访问通道
专用 Google 访问通道(Private Google Access)是指在 Google Cloud(原称 GCP)中,允许没有外部 IP(公网 IP)的虚拟机或本地客户端仅通过私有网络访问 Google Cloud 的 API。
谷歌云的API通常设计为通过互联网进行访问。然而,此功能使得无需通过互联网,而是可以通过私有网络进行访问成为可能。
Private Service Connect 也具备类似的功能。关于应该使用哪种功能,建议您先阅读一下介绍 Private Service Connect 的文章,其中会有详细的解释。
仕様
我将列举专用 Google 访问通道的规格和特点。
-
按子网启用
-
启用后,没有外部 IP 的虚拟机和本地部署节点可以访问 Google 的 API。
- 当然,这包括谷歌云服务,如云存储和 BigQuery,还有谷歌地图、谷歌工作空间和谷歌广告
-
作为要使用的域名选项,有以下三种,它们在“可访问的 API”、“防火墙设置钻孔”、“所需的 DNS 设置”等方面有所不同。
-
- 使用默认域名
-
- 使用 private.googleapis.com
-
- 使用 restricted.googleapis.com。
-
其中最后一项,要使用的域名,特别难以理解,因此在此解释一下。
使用的域名
“使用的域名"的含义
在前面提到,有三种域名可供选择。
-
- 使用默认域名
-
- 使用 private.googleapis.com
-
- 使用 restricted.googleapis.com
首先这意味着什么?该如何选择?
首先,需要明确的是 Google Cloud 服务几乎全部可以通过 Web API 来操作 (其他公有云服务如 AWS 也是如此)。
VM的启动和停止、对BigQuery表的查询、Cloud Storage对象的上传和下载,都可以通过Web API进行操作。无论是通过网络浏览器从控制台进行操作,还是通过gcloud命令行工具进行操作,实际上都是通过HTTPS调用Web API。
例如,Cloud Storage Web API 端点为 https://storage.googleapis.com/
,BigQuery API 端点为 https://bigquery.googleapis.com/
。这些 API 端点都暴露在互联网上。因此,如果您想从计算引擎虚拟机使用 Cloud Storage 或 BigQuery,最初需要使用外部 IP 访问它们。
专用 Google 访问通道中的“使用的域名”设置与此有关。
使用默认域名
选项 1. 使用默认的域名
是直接使用原来的 Web API 端点的选项。
在子网中启用专用 Google 访问通道后,就可以立即使用。
虽然与直觉相反,但这种方法要求 VPC 路由将 0.0.0.0/0
指向默认互联网网关。
此外,需要在防火墙的出站(Egress)规则中允许对所有地址(0.0.0.0/0)进行HTTPS(443/TCP)访问。
这种方法看起来会让流量流到互联网外部,但实际上通过这个设置,即使没有外部IP的虚拟机也可以访问Google API,并且通信将在Google的网络内部进行。
尽管如此,默认路由必须以每个 VPC 为单位指向 0.0.0.0/0,防火墙设置必须保持开放,如果虚拟机由于配置错误而拥有外部 IP,虚拟机可以随意访问互联网。
如果要防止这种情况发生,可以考虑以下方案
使用 private.googleapis.com / restricted.googleapis.com
选择项 2. 使用 private.googleapis.com
和 3. 使用 restricted.googleapis.com
是指通过将 private.googleapis.com
或 restricted.googleapis.com
注册为默认域名的CNAME记录,从而将其用作Web API端点,并通过这种方式改变访问的目标IP地址。
该选项意味着您只需要设置允许与 IP 地址 199.36.153.8/30
或 199.36.153.4/30
通信的防火墙路由。
为了便于理解,我们将以 restricted.googleapis.com
为例介绍整个配置过程。
-
启用目标子网的专用 Google 访问通道
-
请确认
199.36.153.4/30
是否指向默认互联网网关(0.0.0.0/0) -
请确认在VPC防火墙中,
199.36.153.4/30
这个地址的443端口(TCP协议)的出站(Egress)通信没有被拒绝(默认状态下是允许的)。 -
在 Cloud DNS 中创建一个专用 DNS区域,名称为
googleapis.com
。 -
在同一区域添加以下内容
-
DNS名: restricted.googleapis.com
-
类型:A
-
IPv4 地址:.
- 199.36.153.4
- 199.36.153.5
- 199.36.153.6
- 199.36.153.7
-
-
在同一区域添加以下内容
- DNS名:*.googleapis.com
- 类型:CNAME
- 规范名称:restricted.googleapis.com
上述设置会如何改变行为?例如,我们可以以从 Compute Engine 虚拟机内部执行 gsutil 命令来访问 Cloud Storage 的情况为例进行说明。
gsutil
命令尝试通过 HTTPS 访问 storage.googleapis.com
来发起Web API调用。这时,虚拟机(VM)会参考 Cloud DNS 进行名称解析,优先使用专用区域中的记录来进行解析。其过程如下:
- 虚拟机向 Cloud DNS 查询
storage.googleapis.com
的 DNS 名称解析。 - 这与 CNAME 中的
*.googleapis.com
匹配,后者解析为restricted.googleapis.com
restricted.googleapis.com
这个域名会通过A记录解析为199.36.153.4
,199.36.153.5
,199.36.153.6
, 或199.36.153.7
中的某一个IP地址,并将结果返回给虚拟机(VM)。- gsutil 命令需要访问其中的一个地址:
199.36.153.4
、199.36.153.5
、199.36.153.6
或199.36.153.7
。
如果这些 IP 的路由是导向默认的互联网网关,并且防火墙允许 443/TCP 端口的话,那么就可以通过 Google 的内部网络进行 API 调用。
对于 private.googleapis.com
必须使用 199.36.153.8/30
;而对于 restricted.googleapis.com
,必须使用 199.36.153.4/30
。
这些 IP 地址不会在互联网上公布,仅供专用 Google 访问通道使用的专用IP地址。
下图为 dig storage.googleapis.com
执行结果:
private.googleapis.com / restricted.googleapis.com 的不同点
有什么区别?
private.googleapis.com
和 restricted.googleapis.com
具有相同的基本机制。不同之处在于可访问的 API 类型和使用的 IP 地址。
另外,Google 云认证中的专业云网络工程师考试经常会问到这个问题,因此如果您打算参加考试,应确保您知道 restricted.googleapis.com
和private.googleapis.com
之间的区别。
private.googleapis.com
可以访问大多数 Google API。
接下来要说明的是,在 restricted.googleapis.com
上,只能访问 VPC Service Controls 所支持的API,但这与是否支持 VPC Service Controls 无关。
虽然可以访问许多API,但如果希望通过 VPC Service Controls 来管理从虚拟机发起的API访问,则这种方法不合适,因为这会导致VM的API访问无法被有效管控。
虽然许多 API 都可以访问,但如果想用 VPC Service Controls 来控制虚拟机的 API 访问,它们就不合适了,因为它们不受控制。
如果不使用或不打算使用 “VPC Service Controls” 功能,或者虽然使用“VPC Service Controls”,但还需要访问不受其管控的服务时,可以选择这里。
如果您不使用或计划使用 VPC 服务控制,或者如果您使用 VPC 服务控制,但也需要访问不受 VPC 服务控制的服务,则可以选择此选项。如果您使用 VPC 服务控制,但也需要访问不受 VPC 服务控制的服务。
用于DNS注册的专用IP地址是 199.36.153.8/30
。
restricted.googleapis.com
这里只能访问受 VPC 服务控制支持的 Google API,对其它所有访问请求会进行拦截。
如果您正在/将要使用 VPC Service Controls,并且不希望虚拟机访问边界以外的内容,请选择此选项。
用于DNS注册的专用IP地址是199.36.153.4/30
。
选择流程图
我们来看一个简单的流程图,选择一下应该选用哪个域名吧。
左边的第一个默认域名应如图所示,在选择时要充分了解诸如 VM 拥有外部 IP 可能导致可以访问互联网等风险。
激活步骤
本文仅作简要概述。如需了解更多详情,请参阅官方文档。
默认域
- 启用目标子网的专用 Google 访问通道。
- 请确认
0.0.0.0/0
已经指向默认的互联网网关(默认情况下已经存在路由)。 - 请确认在VPC防火墙中,
0.0.0.0/0
的443端口(TCP协议)的出站(Egress)通信没有被拒绝。(默认状态下是允许的)
private.googleapis.com
-
启用目标子网的专用 Google 访问通道。
-
请确认
199.36.153.8/30
是否指向默认互联网网关(0.0.0.0/0) -
请确认在VPC防火墙中,
199.36.153.8/30
这个地址的443端口(TCP协议)的出站(Egress)通信没有被拒绝(默认状态下是允许的)。 -
在 Cloud DNS 中创建一个专用 DNS区域,名称为
googleapis.com
。 -
在同一区域添加以下内容
-
DNS名: private.googleapis.com
-
类型:A
-
IPv4 地址:
- 199.36.153.8
- 199.36.153.9
- 199.36.153.10
- 199.36.153.11
-
-
在同一区域添加以下内容
- DNS名:*.googleapis.com
- 类型:CNAME
- 规范名称:private.googleapis.com
restricted.googleapis.com
-
启用目标子网的专用 Google 访问通道
-
请确认
199.36.153.4/30
是否指向默认互联网网关(0.0.0.0/0) -
请确认在VPC防火墙中,
199.36.153.4/30
这个地址的443端口(TCP协议)的出站(Egress)通信没有被拒绝(默认状态下是允许的)。 -
在 Cloud DNS 中创建一个专用 DNS区域,名称为
googleapis.com
。 -
在同一区域添加以下内容
-
DNS名: restricted.googleapis.com
-
类型:A
-
IPv4 地址:.
- 199.36.153.4
- 199.36.153.5
- 199.36.153.6
- 199.36.153.7
-
-
在同一区域添加以下内容
- DNS名:*.googleapis.com
- 类型:CNAME
- 规范名称:restricted.googleapis.com
从本地部署使用
要从通过 Cloud Interconnect 或 Cloud DNS 连接的的本地环境访问受限公开的Google服务,需要进行以下设置。
- 将限定公开的 Google 访问的 IP 地址通知给本地部署
- 为本地部署节点所引用的 DNS 添加转发器设置,以便将 Google API 的名称解析转送到 Cloud DNS
第一种方法可以通过使用 Cloud Router 的自定义路由广播功能来实现这一点。
第二种方法可以通过 Cloud DNS 入站服务器策略来实现。
对于第二种情况,只要内部部署客户端面向有限的公共 Google Access IP 地址(199.36.153.8/30
或 199.36.153.4/30
),您可以在内部部署 DNS 和 Cloud DNS 中添加相同的记录(但会导致双重管理)。
更详细的设置步骤请参阅 官方文档。
专用 Google 访问通道 vs Private Service Connect
类似的功能还有 Private Service Connect 。
以下文章将解释应如何使用这些功能,请参考:
标签:API,Google,googleapis,访问,详解,199.36,com,Cloud From: https://blog.csdn.net/weixin_52179956/article/details/143472741