配置网络设置

通过 Cloud Functions 网络设置,您可以控制各个函数之间的网络入站流量和出站流量。例如,您可以在以下使用场景中使用网络设置:

  • 通过实现基于网络的访问权限控制来保护函数。
  • 使函数的出站流量遵循与您的 VPC 网络关联的防火墙、DNS 和路由规则。
  • 将函数的出站流量与静态 IP 地址关联。

如需详细了解使用场景,请参阅使用场景示例部分。

入站流量设置

入站流量设置限制是否可以通过您的 Google Cloud 项目或 VPC Service Controls 服务边界之外的资源调用函数。您可以指定以下入站流量设置值之一:

  • 允许所有流量:默认设置。允许同一项目中通过互联网和资源向函数发送的所有入站请求。
  • 仅允许内部流量:仅允许同一项目中通过 VPC 网络或 VPC Service Controls 边界发送的请求。所有其他请求会被拒绝并显示 403 错误。
  • 允许内部流量以及来自 Cloud Load Balancing 的流量:允许来自同一项目、同一 VPC Service Controls 边界或 Cloud Load Balancing 的 VPC 网络的流量。

仅供内部使用的 HTTP 函数只能由在 VPC 网络中创建的 HTTP 请求调用,例如来自 Kubernetes EngineCompute EngineApp Engine 柔性环境的请求。这意味着,通过 Pub/Sub、Eventarc、Cloud Scheduler、Cloud Tasks 创建和工作流创建或者路由的事件无法触发这些函数。

您可以在部署或更新函数时使用 Google Cloud Console 或 gcloud 命令行工具指定入站流量设置:

控制台

  1. 在 Cloud Console 中打开 Cloud Functions 概览页面:

    转到 Cloud Functions 概览页面

  2. 点击创建函数。或者,点击现有函数以转至其详情页面,然后点击修改

  3. 点击环境变量、网络、超时等,以展开高级设置。

  4. 连接部分中,为入站流量设置选择一个值。

gcloud

使用 gcloud functions deploy 命令部署或更新函数,并指定 --ingress-settings 标志:

gcloud functions deploy FUNCTION_NAME \
--trigger-http \
--ingress-settings INGRESS_SETTINGS \
FLAGS...

其中:

  • FUNCTION_NAME 是函数的名称。
  • INGRESS_SETTINGS入站流量设置支持的值之一。可能的值包括:

    • all
    • internal-only
    • internal-and-gclb:允许内部流量以及发往 Cloud Load Balancing 公开的公共 IP 的流量。阻止发送到 cloudfunctions.net 或通过 Cloud Functions 设置的任何自定义网域的流量。防止用户规避通过 Cloud Load Balancing 设置的任何访问权限控制机制(Cloud Armor、IAP)。
  • FLAGS... 是指您传递给 deploy 命令的其他标志。

如果您将 Google Cloud Armor 与 Cloud Load Balancing 搭配使用,则可以创建安全政策,用于过滤基于流量的条件(例如传入请求的 IP 地址、IP 地址范围、区域代码或请求标头)。如需了解详情,请参阅 Google Cloud Armor 安全政策概览

出站流量设置

出站流量设置控制来自函数的出站 HTTP 请求的路由。如需指定出站流量设置,您必须使用无服务器 VPC 访问通道连接器将函数连接到 VPC 网络。出站流量设置控制哪些类型的流量可以通过连接器路由到您的 VPC 网络。

对于出站流量设置,您可以指定以下项:

  • 仅路由通过 VPC 连接器向专用 IP 发送的请求:默认设置。 只有发送到 RFC 1918RFC 6598 IP 地址范围或内部 DNS 名称的请求才会路由到您的 VPC 网络。其他的所有请求都会直接路由到互联网。
  • 通过 VPC 连接器路由所有流量:来自函数的所有出站请求均通过您的 VPC 网络路由。

您可以在部署或更新函数时使用 Cloud Console 或 gcloud 命令行工具指定出站流量设置:

控制台

  1. 在 Cloud Console 中打开 Cloud Functions 概览页面:

    转到 Cloud Functions 概览页面

  2. 点击创建函数。或者,点击现有函数以转至其详情页面,然后点击修改

  3. 点击环境变量、网络、超时等,以展开高级设置。

  4. 连接部分的出站流量设置下,选择无服务器 VPC 访问通道连接器。

  5. 根据您希望通过连接器路由出站流量的方式,选择适当的出站流量设置。

gcloud

使用 gcloud functions deploy 命令部署或更新函数,并指定 --egress-settings 标志:

gcloud functions deploy FUNCTION_NAME \
--vpc-connector CONNECTOR_NAME \
--egress-settings EGRESS_SETTINGS \
FLAGS...

其中:

  • FUNCTION_NAME 是函数的名称。
  • CONNECTOR_NAME 是要使用的无服务器 VPC 访问通道连接器的名称。如需了解详情,请参阅 gcloud 文档

  • EGRESS_SETTINGS 为出站流量设置支持的值之一:请参阅 gcloud 文档。

  • FLAGS... 是指您传递给 deploy 命令的其他标志。

使用场景示例

创建无法由外部客户端调用的函数

您可以保护 HTTP 函数,方法是仅允许处于同一 Cloud 项目或 VPC Service Controls 服务边界内的资源调用这些函数。

  1. 部署您的函数,仅允许内部流量。使用 Cloud Console 或 gcloud 命令行工具:

    控制台

    1. 在 Cloud Console 中打开 Cloud Functions 概览页面:

      转到 Cloud Functions 概览页面

    2. 点击创建函数。或者,点击现有函数以转至其详情页面,然后点击修改

    3. 点击环境变量、网络、超时等,以展开高级设置。

    4. 连接部分的入站流量设置下,选择仅允许内部流量

    gcloud

    使用 gcloud functions deploy 命令:

    gcloud functions deploy FUNCTION_NAME \
    --ingress-settings internal-only \
    FLAGS...
    

部署函数后,来自您的 Cloud 项目之外的请求将无法访问函数。如果您使用的是 VPC Service Controls,系统会阻止来自服务边界外的请求。您的项目或服务边界内的虚拟机实例仍可通过向函数的 HTTPS 端点发送请求来访问函数。

如果您希望从其他函数调用此受限函数,则调用函数必须通过您的 VPC 网络路由其出站流量

通过您的 VPC 网络路由函数出站流量

Google Cloud 中的 VPC 网络支持丰富的配置和网络功能。您可以将来自函数的出站流量路由到 VPC 网络,从而确保 Cloud Functions 函数出站流量遵循 VPC 网络的防火墙、DNS、路由和其他规则,并且您可以使用 Cloud NAT 等产品。

  1. 设置 VPC 网络。请按照使用 VPC 网络中的指南,配置现有 VPC 网络或创建新网络。

  2. 设置无服务器 VPC 访问通道连接器。 Cloud Functions 函数需要使用无服务器 VPC 访问通道连接器才能将流量路由到您的 VPC 网络。请按照连接到 VPC 网络中的说明,创建连接器并设置适当的权限。

  3. 部署使用连接器的函数并通过该连接器路由所有出站流量。使用 Cloud Console 或 gcloud 命令行工具:

    控制台

    1. 在 Cloud Console 中打开 Cloud Functions 概览页面:

      转到 Cloud Functions 概览页面

    2. 点击创建函数。或者,点击现有函数以转至其详情页面,然后点击修改

    3. 点击环境变量、网络、超时等,以展开高级设置。

    4. 连接部分的出站流量设置下,选择您的无服务器 VPC 访问通道连接器,然后选择通过 VPC 连接器路由所有流量

    gcloud

    使用 gcloud functions deploy 命令:

    gcloud functions deploy FUNCTION_NAME \
    --vpc-connector CONNECTOR_NAME \
    --egress-settings all \
    FLAGS...
    

部署函数后,源自您的函数的所有流量都会通过您的 VPC 网络路由,并且会遵循 VPC 网络中设置的规则。请注意,除非您配置 Cloud NAT,否则您的函数将无法访问公共互联网。另请注意,您需要使用 Cloud NAT 将所有子网的所有主要和次要 IP 范围映射到 NAT 网关,才能将该连接器的子网添加到映射中。

将函数出站流量与静态 IP 地址相关联

在某些情况下,您可能需要将源自您的函数的流量与静态 IP 地址相关联。例如,如果您调用的外部服务仅允许来自显式指定的 IP 地址的请求,这将非常有用。

  1. 通过您的 VPC 网络路由函数的出站流量。 请参阅上一节:通过 VPC 网络路由函数出站流量

  2. 设置 Cloud NAT 并指定静态 IP 地址。 按照指定 NAT 子网范围指定 NAT 的 IP 地址中的指南,为与您的函数的无服务器 VPC 访问通道连接器关联的子网设置 Cloud NAT。 如上所述,您需要使用 Cloud NAT 将所有子网的所有主要和次要 IP 地址范围映射到 NAT 网关,以便在映射中包含连接器的子网。

多区域负载平衡

您可以将某个函数部署到不同的区域,并允许将请求发送到运行状况良好的最近区域。为此,您需要为函数设置无服务器网络端点组 (NEG),并将其连接到负载平衡器(如使用无服务器 NEG 设置 HTTP(S) 负载平衡器中所述)。