专用网络和 Cloud Run

本页面讨论用于在专用网络中加入 Cloud Run 服务的配置选项。

为了充分理解本页中的内容,您应该对以下概念有一定的了解:

为了保护服务和应用的网络流量,许多组织将 Google Cloud 上的专用网络与边界控制结合使用来防止数据渗漏。专用网络可能具有以下属性:

  • 您可能有一些位于一个或多个 VPC 网络上的资源(例如虚拟机)。
  • 这些虚拟机可能属于许多不同的项目,并且可能与共享 VPC 连接。
  • 您可能拥有使用 Cloud VPNCloud Interconnect 连接到此环境的本地工作负载或其他云上的工作负载。
  • 您可能已启用 VPC Service Controls 边界,以降低数据渗漏的风险。
  • 您可能有多个专用网络,分别用于多个不同的环境,例如一个用于生产、一个用于暂存,一个用于开发。

与虚拟机不同,默认情况下,Cloud Run 服务不与任何特定 VPC 网络关联。本页面介绍如何将 Cloud Run 服务加入到专用网络中。

无服务器网络指南

如需了解一系列用于公共和专用网络的常见企业配置,请阅读我们的无服务器网络指南

这份入门材料介绍了以下从基本到高级的 Cloud Run 场景:

  • 安全地部署使用自定义网域的“Hello, World!”应用
  • 开发企业应用和微服务
  • 通过公共或专用通道访问数据库和文件系统
  • 与 SaaS 提供商连接
  • 应用安全控制措施

查看相应的 Terraform 模块列表。

接收来自专用网络的请求

接收来自专用网络的请求需要根据以下条件进行配置:

  • 请求的来源。
  • Cloud Run 服务是否允许来自专用网络的请求。

例如,接收来自 VPC 网络的请求需要的配置可能与接收来自本地资源和其他云的请求需要的配置不同。

接收来自其他 Cloud Run 服务、App Engine 和 Cloud Functions 的请求

如果目标 Cloud Run 服务接收来自其他 Cloud Run 服务、App Engine 或 Cloud Functions 的流量,并使用“内部”或“内部和负载均衡”入站流量设置,则流量必须使用被视为内部的 VPC 网络。

如需接收来自其他 Cloud Run 服务、App Engine 或 Cloud Functions 的请求,请执行以下步骤:

  1. 来源服务配置为使用直接 VPC 出站流量或连接器。

  2. 使用以下方式之一确保流量通过 VPC 网络路由到 Cloud Run:

    • 将来源服务配置为通过 VPC 网络发送所有流量,并在与直接 VPC 出站流量或连接器关联的子网上启用专用 Google 访问通道
    • 设置 Private Service Connect 或内部应用负载均衡器以将目标 Cloud Run 服务作为前端。通过此配置,您可以使用内部 IP 地址访问 Cloud Run,因此请求会通过 VPC 网络进行路由。
    • 在与来源服务关联的子网上启用专用 Google 访问通道,并配置 DNS 以将 run.app 网址解析为 private.googleapis.com (199.36.153.8/30) 或 restricted.googleapis.com (199.36.153.4/30) 范围。发送到这些范围的请求会通过 VPC 网络进行路由。

接收来自 VPC 网络的请求

默认情况下,只有具有公共 IP 地址或使用 Cloud NAT 的 VPC 资源才能直接访问互联网和 Google Cloud 服务(例如 Pub/Sub 和 Cloud Run)。对于其他 VPC 资源,您可以通过多种方式启用到 Cloud Run 的流量路径:

  1. 最直接的路径是在托管您的 VPC 资源的子网上启用专用 Google 访问通道。启用后,子网上的资源可以通过默认的 run.app 网址访问您的 Cloud Run 服务。从 VPC 到 Cloud Run 的流量会保留在 Google 的网络中。 在这种情况下,发送到 Cloud Run 服务的请求的 IP 地址范围为 0.0.0.0/32。这意味着,在请求日志条目中,HttpRequestremoteIp 特性将为 0.0.0.0
  2. 如果您需要将 Cloud Run 服务(与其他 Google API 一起)公开为 VPC 网络中的内部 IP 地址,请考虑使用 Private Service Connect。启用后,VPC 资源可以使用内部 IP 地址通过默认的 run.app 网址访问 Cloud Run 服务。
  3. 如果您需要负载均衡功能和控制,请考虑使用内部应用负载均衡器。通过这种方法,VPC 资源可以使用与内部应用负载均衡器关联的网址访问您的 Cloud Run 服务。
  4. 如果要将服务作为代管式服务公开给内部客户端,并且能够控制哪些项目可以访问该服务,您可以使用内部应用负载均衡器托管该服务并使用 Private Service Connect 发布服务。需要使用该服务的项目还可以使用 Private Service Connect 访问该服务

返回的响应使用请求所用的相同路径。

共享 VPC 的特殊注意事项

如果您使用的是 Cloud Run 入站流量控制来强制所有流量必须来自您的专用网络(使用 internal 设置),请注意共享 VPC 流量在以下情况下仅识别为“内部”:

  • Cloud Run 服务在共享 VPC 宿主项目中运行。

  • 共享 VPC 入站流量:Cloud Run 服务已关联到共享 VPC 网络。在此场景中,请注意以下事项:

    • 只有配置了直接 VPC 出站流量或配置了无服务器 VPC 访问通道连接器以向共享 VPC 网络发送流量的服务修订版本才会接受来自同一共享 VPC 网络的流量。

    • 请求根据流量方向使用不同的路径。从 Cloud Run 发送到共享 VPC 网络的请求通过直接 VPC 出站流量或连接器进行路由。但是,从共享 VPC 网络发送到 Cloud Run 的请求使用标准入站流量路径。

    • 如需将 Cloud Run 服务与共享 VPC 网络分离,请在不使用 VPC 网络访问权限的情况下重新部署,或者将该服务配置为向其他 VPC 网络发送流量。

  • 使用内部应用负载均衡器来代理流量。

  • 您已将共享 VPC 宿主项目和所有服务项目放置在同一 VPC Service Controls 边界内。如需设置 VPC Service Controls,请参阅使用 VPC Service Controls (VPC SC)

项目外的其他 VPC 的特殊注意事项

如果您使用的是 Cloud Run 入站流量控制来强制所有流量必须来自您的专用网络(使用 internal 设置),请注意来自您的项目外其他 VPC 的流量不会被识别为“内部”,在以下情况下除外:

  • VPC Service Controls 已配置为允许将 run.googleapis.com 作为受限服务的流量,并且已针对来源子网启用专用 Google 访问通道。
  • 您的 Cloud Run 服务已使用 Private Service Connect 发布为托管式服务(需要内部应用负载均衡器),并且从其他 VPC 网络访问了它。

在项目外部对等互连 VPC 不允许将流量识别为“内部”。

接收来自其他 Google Cloud 服务的请求

从 Google Cloud 服务(如 Pub/Sub)发出的对 Cloud Run 的请求保留在 Google 的网络中。

如果您已将 Cloud Run 入站流量控制配置为仅允许“内部”流量,则需要注意一些特殊注意事项:

  • 来自同一项目或 VPC Service Controls 边界内的 Cloud Scheduler、Cloud Tasks、Eventarc、Pub/Sub 和 Workflows 的请求被识别为“内部”。
  • 从同一项目或 VPC Service Controls 边界内发送的 Cloud Run、App Engine 和 Cloud Functions 请求均需要进行额外配置,然后才能识别为“内部”。如需了解详情,请参阅接收来自其他 Cloud Run 服务、App Engine 和 Cloud Functions 的请求部分。
  • 如果您选择的 Google Cloud 服务无法访问入站流量设置为 internal,请注意,许多支持通过 Cloud Run 身份验证,例如 Pub/Sub(同时支持 internal 和身份验证)、API 网关Dialogflow CX。根据您的安全需求,目标 Cloud Run 服务进行身份验证可能已足够,而不需要“内部”入站流量。
  • 上面未提到的 Google Cloud 服务的请求不会识别为内部请求,并且入站流量设置为 internalinternal-and-cloud-load-balancing 的 Cloud Run 服务无法接收该请求。

接收来自本地或其他云的请求

您可以通过多种方法以非公开方式接收来自本地资源和其他云的请求。

  1. 基本配置:为了让来自本地资源和其他云的请求遍历您的专用网络,请配置适用于本地主机的专用 Google 访问通道
  2. 使用内部 IP 地址公开 Cloud Run 服务:如需使用内部 IP 地址调用 Cloud Run 服务,请配置适用于本地主机的 Private Service Connect。通过添加适用于本地主机的 Private Service Connect,您可以将 Cloud Run 服务作为内部 IP 地址公开给 VPC 网络。Private Service Connect 会产生费用
  3. 使用负载均衡功能:如果您需要负载均衡功能和控制,请使用内部应用负载均衡器。
  4. 跨管理边界:如果要将服务作为托管式服务公开给内部客户端,并且能够控制哪些项目可以访问该服务,您可以使用 Private Service Connect 发布服务。如需使用它,请参阅从本地主机使用 Private Service Connect(需要内部应用负载均衡器)。

要求来自您的专用网络的请求

为防止来自外部来源的传入流量(入站流量),您可以指定限制性入站流量设置。限制性最高的入站流量设置是 internal。将入站流量设置为 internal 时,您的服务仅允许来自您的项目、您的项目连接到的共享 VPC 网络以及 VPC Service Controls 边界的请求。此设置存在一些限制,具体取决于请求的来源。如需了解这些限制以及如何浏览这些限制,请参阅接收来自专用网络的请求部分。

您可以为每个 Cloud Run 服务指定入站流量设置,也可以对组织中的所有 Cloud Run 服务强制使用首选入站流量设置。

  • 如需指定每个服务的入站流量设置:请参阅设置入站流量
  • 如需为项目、文件夹或组织中的所有 Cloud Run 服务实施特定入站流量设置:配置 run.allowedIngress 组织政策限制条件。如需了解具体操作方法,请参阅为列表限制条件自定义政策

向您的专用网络发送请求

如果您的 Cloud Run 服务需要访问专用网络上的资源,您可为到网络的专用请求配置路径。配置取决于请求的最终目标。

向您的 VPC 网络发送请求

如需向 VPC 网络发送请求,您必须配置直接 VPC 出站流量或无服务器 VPC 访问通道连接器。比较直接 VPC 出站流量和 VPC 连接器。 查看价格以了解费用。

配置直接 VPC 出站流量或无服务器 VPC 访问通道连接器后,默认情况下需要考虑以下事项:

  • 所有 DNS 查询都会发送到为与 VPC 网络出站流量设置关联的 VPC 网络配置的 DNS 服务器。

  • 发送到内部 IP 地址的请求使用直接 VPC 出站流量或连接器路由到 VPC 网络。除非另行配置出站流量设置,否则发送到公共目的地的请求会继续直接路由到互联网。

使用直接 VPC 出站流量或无服务器 VPC 访问通道连接器路由请求时,系统会使用请求经过的路径返回响应。从 VPC 到 Cloud Run 的请求使用其他技术实现,不会通过无服务器 VPC 访问通道或直接 VPC 出站流量进行路由,并且系统会使用相同的路径返回对这些请求的响应。如需详细了解如何从 VPC 向 Cloud Run 发送请求,请参阅接收来自 VPC 网络的请求部分。

向项目外的 VPC 网络发送请求

如需向项目外的 VPC 网络发送请求,请执行以下操作:

  1. 对于共享 VPC 用户,请参阅连接到共享 VPC 网络
  2. 对于其他 VPC,请配置直接 VPC 出站流量或无服务器 VPC 访问通道连接器以连接到项目中的 VPC。
    • 对等互连的 VPC:如需发送到与使用 VPC 网络出站流量的 VPC 对等互连的 VPC,无需额外配置。但是,托管 VPC 网络出站流量的子网中的虚拟机必须能够访问目标 VPC 网络。
    • 其他 VPC:对于项目以外的 VPC 网络,如果这些网络不属于同一共享 VPC 环境,或者与项目 VPC 对等互连,请在设置 VPC 网络出站流量后配置 Private Service Connect

向其他 Cloud Run 服务和 Google Cloud 服务发送请求

从一个 Cloud Run 服务到另一个 Cloud Run 服务或其他 Google Cloud 服务的请求保留在 Google 内部网络中,并受 VPC Service Controls 的约束。

对于具有受限入站流量设置的 Cloud Run 服务请求,需要进行额外配置。请参阅接收来自其他 Cloud Run 服务、App Engine 和 Cloud Functions 的请求

向本地资源和其他云发送请求

如需通过专用网络向本地资源和其他云发送请求,您必须:

  1. 确保您的 VPC 网络配置为以私密方式将流量路由到目的地,例如通过 VPN 隧道。
  2. 配置服务以向您的 VPC 网络发送请求
  3. 然后要求所有请求均转到您的 VPC 网络。

要求所有请求均转到您的 VPC 网络

如需要求来自 Cloud Run 服务的所有请求都转到 VPC 网络,请指定“所有流量”VPC 网络出站流量设置。您可以为使用 VPC 网络出站流量的每个 Cloud Run 服务指定出站流量设置,也可以对项目、文件夹或组织中的所有 Cloud Run 服务强制使用首选出站流量设置。

这在以下情况下非常有用:

  1. 您希望为 Cloud Run 服务设置静态出站 IP 地址
  2. 您希望将防火墙规则应用于来自 Cloud Run 服务的所有出站流量。
  3. 您希望通过专用网络向本地资源和其他云发送请求。

如果 Cloud Run 服务向 VPC 网络以外的最终目的地发出请求,则要求所有请求都转到 VPC 网络会增加无服务器 VPC 访问通道连接器上的带宽使用量(如果已配置),并且可能会相应地增加费用。无服务器 VPC 访问通道连接器会在流量增加时自动扩容,但不会在流量减少时缩容。查看价格以了解费用。

  • 如需指定单个 Cloud Run 服务的出站流量设置,请参阅控制出站服务流量
  • 如需为项目、文件夹或组织中的所有 Cloud Run 服务实施特定出站流量设置:配置 run.allowedVPCEgress 组织政策限制条件。如需了解具体操作方法,请参阅为列表限制条件自定义政策

其他控制项

  • 边界控制:为降低一组资源发生数据渗漏的风险,请使用 VPC Service Controls 将这些资源放置在情境感知边界内。
  • 精细控制:如需控制来自专用网络内特定资源(例如特定 Cloud Run 服务或 Compute Engine 虚拟机)的流量,请使用服务账号控制权限和身份验证。

后续步骤

如果您使用 Terraform,则可以使用 Terraform 示例代码在专用网络中设置 Cloud Run 服务。