许多组织都有合规性要求,根据内部要求或采用 Assured Workloads 来限制对明确批准的 API 列表的网络访问。在本地,通常通过代理控制来满足此要求,但在 Google Virtual Private Cloud (VPC) 中,您可以改为使用限制资源服务使用组织政策来满足此要求。此政策允许管理员定义可以在其资源层次结构中创建哪些 Google Cloud 资源,但为了有效地使用此组织政策,您必须在您的环境中调试各种网络控制机制。
本文档介绍如何使用组织政策服务和其他网络控制机制来限制对各个已获批准的 Google API 的访问,以及将本地代理方法应用于 Google Cloud 服务所面临的问题。本文档适用于希望限制可从 VPC 网络端点访问哪些 Google Cloud API 的网络管理员或安全团队。
用于对 Google API 进行访问权限控制的代理存在的挑战
在本地网络中,您的企业可能有合规性要求,以只允许流向已批准服务和网域的出站流量。可以通过网络代理或安全访问网关过滤出站流量来强制执行此要求。此代理会拦截所有传出流量,并且仅允许流向明确批准的 API 的出站流量。
在某些企业中,您同样可能需要满足合规性要求,才能限制从 VPC 网络对已获批准的 Google Cloud API 的访问。在以下场景中通常会进行这种合规性控制:
- 企业将 Assured Workloads 用于敏感工作负载和合规性控制。
- 企业具有内部合规性要求,即 Google Cloud 上的网络端点仅允许访问通过内部流程批准的 Google Cloud API。
- 企业希望以最低限度的重构将基础架构即服务 (IaaS) 工作负载迁移到 Google Cloud。
- 企业尚未开发针对云的控制,并希望从本地环境扩展现有控制。
虽然您的企业可能使用 Web 代理来控制从本地网络到 Web 服务的出站流量,但我们不建议使用此方法控制从 VPC 网络对 Google Cloud API 的访问。使用此代理方法会产生可伸缩性问题、造成单点故障,并且不会使用 Google Cloud API 解决数据渗漏风险。
我们建议使用限制资源服务使用组织政策而不是使用代理来选择性地允许访问各个 Google Cloud API。以下部分讨论了与构建和维护用于对个别 Google API 进行访问权限控制的 Web 代理相关的挑战。
多个 Google API 使用的共享 IP 地址范围
您无法通过过滤单个 IP 地址的代理或防火墙规则来控制对单个 Google API 的访问权限。Google 为使用默认网域使用动态 IP 地址范围。在这些 IP 地址中,专用 IP 地址和特定 API 之间没有一对一的关系。
Google API 使用的共享网域
对于某些 Google API,您无法通过过滤网域上的流量来控制网络访问权限。大多数 Google API 都可以通过端点访问,这些端点按路径区分特定 API,并会从以 www.googleapis.com
开头的 URI 开始进行过滤。某些 Google API 还会使用具有专用子网域的端点。例如,Cloud Storage API 参考文档记录了与 storage.googleapis.com/storage/v1
端点相关的 URI,但您也可以使用以 www.googleapis.com/storage/v1
开头的 URI 来调用相同的 API 方法。
如果您使用多个仅在网域 www.googleapis.com
上具有端点的 API,出站流量代理无法仅基于该网域来区分 API。例如,某些 Google Cloud API(如 Deployment Manager)和其他 Google API(如跟踪代码管理器或 Google Play 游戏)只能在 www.googleapis.com
网域中访问。此外,所有 Google Cloud API 默认使用 TLS 加密。如果您希望允许这些 API 之一,但阻止其他 API,则代理必须解密请求以过滤 URI 路径,从而增加复杂性。
代理导致的瓶颈
如果从 VPC 网络到 Google API 的所有流量必须通过出站流量代理,则代理可能会成为瓶颈。如果您确实使用出站流量代理来处理从 VPC 网络到 Google API 的流量,我们建议您构建代理以实现高可用性,从而避免服务中断。维护和扩缩代理可能会变得很复杂,因为随着组织的发展,代理可能会造成单点故障、延迟和吞吐量降低。可能会对转移大量数据的操作产生特定影响。
服务到服务渗漏风险
Web 代理可以限制是否可从 VPC 网络访问 Google API,但不能应对使用该 Google API 的其他渗漏路径。例如,企业中的员工可能拥有合法的 IAM 权限来读取内部 Cloud Storage 存储桶。通过此权限,他们可以读取内部数据,然后将该数据复制到公开存储桶中。出站代理无法限制不在您的 VPC 中发起的 API 到 API 的流量,也无法控制互联网流量到达 Google Cloud API 的公共端点的方式。
对于敏感数据,VPC Service Controls 边界有助于缓解此类渗漏。实施 VPC Service Controls 边界有助于保护边界内的资源免受错误配置的 IAM 政策、渗漏和凭据被破解的影响。
配置网络控制以限制未经批准的服务
使用“限制资源服务使用组织政策”时,要有效限制对服务的访问,您必须考虑 VPC 网络限制出站流量和渗漏路径的方式。以下部分介绍网络设计的最佳做法,以便有效地使用“限制资源服务使用组织政策”。
配置 VPC Service Controls
使用“限制资源服务使用组织政策”时,我们还建议您配置 VPC Service Controls。通过在项目中应用该组织政策,您可以限制可在该项目中使用的服务,但该组织政策不会阻止此项目中的服务与其他项目中的服务进行通信。相比之下,VPC Service Controls 则允许您定义边界来防止与边界外的服务发生通信。
例如,如果您定义了一个组织政策以在项目中允许 Compute Engine 并拒绝 Cloud Storage,则该项目中的虚拟机无法创建 Cloud Storage 存储桶,也无法与该项目中的 Cloud Storage 存储桶进行通信。但是,虚拟机可以向其他项目中的 Cloud Storage 存储桶发出请求,因此 Cloud Storage 服务仍然可能发生数据渗漏。如需阻止与边界外的 Cloud Storage 或其他 Google 服务通信,您必须配置 VPC Service Controls 边界。
您可以将这些控件结合使用来有选择地允许访问环境中获得批准的服务,并屏蔽指向未获批准的服务的一系列渗漏路径。
移除通向互联网的路径
如果 VPC 网络中的资源可以直接与互联网通信,则可能有一个备用路径指向未获批准的 Google API 及其他您想要阻止的服务。因此,我们建议您仅在虚拟机上使用内部 IP 地址,并且不允许通过 NAT 或代理解决方案实现的出站路由。“限制资源服务使用组织政策”不会解决公共互联网渗漏路径的问题,因此仍然可以从环境外部的服务器间接访问未获批准的服务。
为 API 访问配置专用端点
如需控制网络中的 API 端点,我们建议您使用 Private Service Connect 访问 Google API。当您配置专用 Google 访问通道来仅允许具有内部 IP 地址的虚拟机访问 Google API 时,这会授权对所有 Google API 的访问,包括对 VPC Service Controls 或“限制资源服务使用组织政策”不支持的 Google API 的访问。您可以通过使用 vpc-sc
软件包额外配置 Private Service Connect,将专用 Google 访问通道限制为仅可访问受支持的 API。
例如,启用专用 Google 访问通道允许通向所有 Google API(例如 Google 云端硬盘或 Google Maps Platform)的专用网络路径。员工可能会使用 Google Drive API 将数据从 Compute Engine 实例复制到个人 Google 云端硬盘。要避免此渗漏路径,您可以使用 vpc-sc
软件包配置 Private Service Connect,以提供对受限虚拟 IP (VIP) 支持的同一组服务的访问权限(通过 restricted.googleapis.com endpoint 实现)。相比之下,如果您使用 Google 默认网域且通过 all-apis
软件包配置了 Private Service Connect 端点或者配置了专用 VIP (private.googleapis.com),那么使用专用 Google 访问通道可访问的 Google API 将更为广泛。
或者,您也可以配置通向 restricted.googleapis.com 的路由。如果您不想为环境中的每个区域和每个 VPC 网络创建 Private Service Connect 端点,那么您还可以使用受限 VIP。但是,我们建议您使用 Private Service Connect 方法,因为您可以在 VPC 网络内部创建端点,而受限 VIP 方法需要路由到公开通告的端点。
后续步骤
- 详细了解限制资源服务使用组织政策。
- 了解限制资源服务使用组织政策支持的 API。
- 了解 VPC Service Controls 支持哪些 API。
- 如需查看更多参考架构、图表和最佳实践,请浏览云架构中心。