为了充分理解本页中的内容,您应该对以下概念有一定的了解:
- 基本网络
- Google Cloud Virtual Private Cloud (VPC) 网络
为了保护服务和应用的网络流量,许多组织将 Google Cloud 上的专用网络与边界控制结合使用来防止数据渗漏。专用网络可能具有以下属性:
- 您可能有一些位于一个或多个 VPC 网络上的资源(例如虚拟机)。
- 这些虚拟机可能属于许多不同的项目,并且可能与共享 VPC 连接在一起。
- 您可能拥有使用 Cloud VPN 或 Cloud Interconnect 连接到此环境的本地工作负载或其他云上的工作负载。
- 您可能已启用 VPC Service Controls 边界,以降低数据渗漏的风险。
- 您可能有多个专用网络,分别用于多个不同的环境,例如一个用于生产、一个用于暂存,一个用于开发。
与虚拟机不同,默认情况下,Cloud Run 资源不与任何特定 VPC 网络关联。本页面介绍如何将 Cloud Run 资源加入到专用网络中。
无服务器网络指南
如需了解一系列用于公共和专用网络的常见企业配置,请阅读我们的无服务器网络指南。
这份入门材料介绍了以下从基本到高级的 Cloud Run 场景:
- 安全地部署使用自定义网域的“Hello, World!”应用
- 开发企业应用和微服务
- 通过公共或专用通道访问数据库和文件系统
- 与 SaaS 提供商连接
- 应用安全控制措施
查看相应的 Terraform 模块列表。
接收来自专用网络的请求
接收来自专用网络的请求需要根据以下条件进行配置:
- 请求的来源。
- Cloud Run 资源是否仅允许来自专用网络的请求。
例如,接收来自 VPC 网络的请求需要的配置可能与接收来自本地资源和其他云的请求需要的配置不同。
接收来自其他 Cloud Run 资源或 App Engine 的请求
如果目标 Cloud Run 资源接收来自其他 Cloud Run 资源或 App Engine 的流量,并使用“内部”或“内部和负载均衡”入站流量设置,则流量必须使用被视为内部的 VPC 网络。
如需接收来自其他 Cloud Run 资源或 App Engine 的请求,请执行以下步骤:
将来源资源配置为使用直接 VPC 出站流量或连接器。
使用以下方式之一确保流量通过 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 的资源才能直接访问互联网和Google Cloud 服务(例如 Pub/Sub 和 Cloud Run)。对于其他资源,您可以通过多种方式启用到 Cloud Run 的流量路径:
- 最直接的路径是在托管资源的子网上启用专用 Google 访问通道。启用专用 Google 访问通道后,子网上的资源可以通过默认的
run.app
网址访问您的 Cloud Run 资源。从 VPC 网络到 Cloud Run 的流量会保留在 Google 的网络中。在这种情况下,发送到 Cloud Run 资源的请求的 IP 地址范围为0.0.0.0/32
。这意味着,在请求日志条目中,HttpRequest 的remoteIp
属性将为0.0.0.0
。 - 如果您需要可以通过 VPC 网络中的内部 IP 地址访问 Cloud Run 资源(以及其他 Google API),请考虑创建 Private Service Connect 端点并为
run.app
配置专用 DNS 区域。使用此配置时,VPC 网络中的资源可以通过 Private Service Connect 端点 IP 地址,使用默认run.app
网址访问 Cloud Run 资源。 - 如果您需要负载均衡功能和控制,请考虑使用内部应用负载均衡器。通过这种方法,VPC 网络中的资源可以使用与内部应用负载均衡器关联的网址访问您的 Cloud Run 资源。
- 如果您要将服务作为托管式服务公开给内部客户端,并且能够控制哪些项目可以访问该服务,您可以使用内部应用负载均衡器托管服务并使用 Private Service Connect 发布服务。需要使用服务的项目可以使用 Private Service Connect 端点或 Private Service Connect 后端来访问服务。
返回的响应使用请求所用的相同路径。
共享 VPC 的特殊注意事项
将 internal
设置与 Cloud Run 入站流量控制搭配使用,以强制所有流量必须来自您的专用网络时,共享 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 网络的特殊注意事项
将 internal
设置与 Cloud Run 入站流量控制搭配使用,以强制所有流量必须来自您的专用网络时,来自项目外部的其他 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 边界内的 BigQuery、Cloud Scheduler、Cloud Tasks、Dialogflow CX、Eventarc、Pub/Sub、合成监控工具(包括拨测)和 Workflows 的请求会被识别为“内部”。
- 从同一项目或 VPC Service Controls 边界内发送的来自 Cloud Run 或 App Engine 的请求全都需要进行额外配置,然后才会被识别为“内部”。如需了解详情,请参阅接收来自其他 Cloud Run 服务或 App Engine 的请求部分。
- 如果您选择的 Google Cloud 服务无法访问将入站流量设置为
internal
的 Cloud Run 资源,请注意,许多服务支持向 Cloud Run 进行身份验证,例如 Pub/Sub(同时支持internal
和身份验证)、API Gateway 和 Dialogflow CX(同时支持internal
和身份验证)。根据您的安全需求,目标 Cloud Run 资源要求进行身份验证可能已足够,而不需要“内部”入站流量。 - 前面未提到的来自 Google Cloud 服务的请求不会被识别为内部请求,并且入站流量设置为
internal
或internal-and-cloud-load-balancing
的 Cloud Run 资源无法接收这类请求。
接收来自本地资源或其他云的请求
您可以通过多种方法以非公开方式接收来自本地资源和其他云的请求。
- 基本配置:为了让来自本地资源和其他云的请求遍历您的专用网络,请配置适用于本地主机的专用 Google 访问通道。
- 使 Cloud Run 资源可通过内部 IP 地址进行访问:如需使用内部 IP 地址调用 Cloud Run 资源,请创建 Private Service Connect 端点以访问 Google API,为
run.app
配置专用 DNS 区域,并配置本地网络以访问该端点。使用此配置时,本地主机可以通过 Private Service Connect 端点 IP 地址,使用默认run.app
网址访问 Cloud Run 资源。 - 使用负载均衡功能:如果您需要负载均衡功能和控制,请使用内部应用负载均衡器。如需了解如何从本地网络访问内部应用负载均衡器,请参阅使用 Cloud VPN 和 Cloud Interconnect。
- 跨管理边界:如果您要将服务作为托管式服务公开给内部客户端,并且能够控制哪些项目可以访问该服务,您可以使用 Private Service Connect 发布服务(需要内部应用负载均衡器)。如需从本地主机访问服务,请创建 Private Service Connect 端点,并配置本地网络以访问该端点。如需了解详情,请参阅从混合网络访问端点。或者,您也可以将 Private Service Connect 后端与负载均衡器搭配使用。如需了解如何从本地网络访问负载均衡器,请参阅您所使用的负载均衡器的文档(例如对于内部应用负载均衡器,请参阅使用 Cloud VPN 和 Cloud Interconnect)。
要求来自您的专用网络的请求
如需阻止来自外部来源的传入流量(入站流量),您可以指定限制性入站流量设置。限制性最高的入站流量设置是 internal
。将入站流量设置为 internal
时,您的服务仅允许来自您的项目、您的项目连接到的共享 VPC 网络以及 VPC Service Controls 边界的请求。此设置存在一些限制,具体取决于请求的来源。如需了解这些限制以及如何浏览这些限制,请参阅接收来自专用网络的请求部分。
您可以为各个 Cloud Run 资源指定入站流量设置,也可以对组织中的所有 Cloud Run 资源强制使用首选入站流量设置。
- 如需为各个 Cloud Run 资源指定入站流量设置:参阅设置入站流量。
- 如需为项目、文件夹或组织中的所有 Cloud Run 资源实施特定入站流量设置:配置
run.allowedIngress
组织政策限制条件。如需了解具体操作方法,请参阅为列表限制条件自定义政策。
向您的专用网络发送请求
如果您的 Cloud Run 资源需要访问专用网络上的资源,您可为向该网络发出的专用请求配置路径。配置取决于请求的最终目标。
向您的 VPC 网络发送请求
如需向 VPC 网络发送请求,您必须配置直接 VPC 出站流量或无服务器 VPC 访问通道连接器。比较直接 VPC 出站流量和 VPC 连接器。 查看价格以了解费用。
配置直接 VPC 出站流量或连接器后,默认情况下需要考虑以下注意事项:
所有 DNS 查询都会发送到为与 VPC 网络出站流量设置关联的 VPC 网络配置的 DNS 服务器。
发送到内部 IP 地址的请求使用直接 VPC 出站流量或连接器路由到 VPC 网络。除非另行配置出站流量设置,否则发送到公共目的地的请求会继续直接路由到互联网。
使用直接 VPC 出站流量或连接器路由请求时,系统会使用请求经过的路径返回响应。从 VPC 网络到 Cloud Run 的请求使用其他技术实现,不会通过直接 VPC 出站流量或连接器进行路由,并且系统会使用相同的路径返回对这些请求的响应。如需详细了解如何从 VPC 网络向 Cloud Run 发送请求,请参阅接收来自 VPC 网络的请求。
向项目外的 VPC 网络发送请求
如需向项目外的 VPC 网络发送请求,请执行以下操作:
- 对于共享 VPC 用户,请参阅连接到共享 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 的请求。
向本地资源和其他云发送请求
如需通过专用网络向本地资源和其他云发送请求,您必须执行以下操作:
- 确保您的 VPC 网络配置为以私密方式将流量路由到目的地,例如通过 VPN 隧道。
- 配置服务以向您的 VPC 网络发送请求。
- 要求所有请求均转到您的 VPC 网络。
要求所有请求均转到您的 VPC 网络
如需要求来自 Cloud Run 资源的所有请求均转到您的 VPC 网络,请指定 all-traffic
VPC 网络出站流量设置。您可以为使用 VPC 网络出站流量的每个 Cloud Run 资源指定出站流量设置,也可以对项目、文件夹或组织中的所有 Cloud Run 资源强制使用首选出站流量设置。
这在以下情况下非常有用:
- 您希望为 Cloud Run 资源设置静态出站 IP 地址。
- 您希望将防火墙规则应用于来自 Cloud Run 资源的所有出站流量。
- 您希望通过专用网络向本地资源和其他云发送请求。
如果 Cloud Run 资源向 VPC 网络外部的最终目标发出请求,则要求所有请求均转到您的 VPC 网络会增加已配置的无服务器 VPC 访问通道连接器上的带宽使用量,并且可能会相应地增加费用。连接器会在流量增加时自动扩容,但不会在流量减少时缩容。请查看价格以了解费用。
- 如需为单个 Cloud Run 资源指定出站流量设置:参阅控制出站服务流量。
- 如需为项目、文件夹或组织中的所有 Cloud Run 服务实施特定出站流量设置:配置
run.allowedVPCEgress
组织政策限制条件。如需了解具体操作方法,请参阅为列表限制条件自定义政策。
其他控制项
- 边界控制:为降低一组资源发生数据渗漏的风险,请使用 VPC Service Controls 将这些资源放置在情境感知边界内。
- 如需了解 VPC Service Controls,请参阅 VPC Service Controls 概览。
- 如需开始使用此工具,请参阅 Cloud Run 指南使用 VPC Service Controls (VPC SC)。
- 如需了解费用,请查看价格。
- 精细控制:如需为来自专用网络内特定资源(例如特定 Cloud Run 资源或 Compute Engine 虚拟机)的流量控制访问权限,请使用服务账号控制权限和身份验证。
后续步骤
如果您使用 Terraform,则可以使用 Terraform 示例代码在专用网络中设置 Cloud Run 资源。