了解 App Engine 防火墙

防火墙用于确定允许哪些网络流量通过以及拒绝哪些流量。防火墙可应用于传入流量(入站流量)和/或传出流量(出站流量)。对于 App Engine,App Engine 防火墙仅应用于路由到应用或服务的传入流量。

概览

系统会针对发送到应用的所有类型的请求检查 App Engine 防火墙,包括:

  • 路由到应用的 appspot.com 地址或自定义网域的常规网络流量。
  • 来自 Cloud Load Balancing 的请求。
  • 来自内部来源(例如 Compute Engine 虚拟机和 Cloud Tasks)的流量。

如果您的应用配置为使用其他网络服务或产品,您可能需要在 App Engine 防火墙和其他产品的防火墙或安全设置中创建用于控制传入流量的规则。本指南介绍了 App Engine 防火墙的一般行为以及关于特殊使用场景的详细信息。

App Engine 防火墙规则

您可以使用 Google Cloud 控制台、Google Cloud CLI 或 Admin API 来配置 App Engine 防火墙规则,只需指定允许或阻止指定的 IP 地址范围的规则即可。

默认情况下,任何与规则不匹配的请求都可以访问您的应用。如果您需要阻止与特定规则不匹配的所有请求(不包括来自默认允许的内部服务的请求),请将 default 规则的操作更改为 deny

防火墙特性

在 App Engine 标准环境中,App Engine 防火墙可以允许某些内部流量绕过防火墙。这意味着,如果您将 default 规则设置为 deny,从特定服务发往 App Engine 标准环境的请求不会被阻止。这些是应用自身的配置中请求或从同一应用发送的所有类型的流量。以这种方式绕过防火墙规则的请求包括:

  • 预热请求
  • 使用 App Engine HTTP 的 Cloud Scheduler 作业(包括 App Engine Cron

    对于使用 App Engine 标准环境和与第一代运行时捆绑的服务的应用,来自旧版 Mail API 的通知也会绕过防火墙。

    允许来自您的服务的传入请求

    下表列出了常用服务的 IP 范围和 App Engine 防火墙行为。您使用的 IP 地址范围取决于传入请求是传递给在 App Engine 标准环境还是柔性环境中运行的版本。

    服务 发送到 App Engine 标准环境的请求的 IP 范围 发送到 App Engine 柔性环境的请求的 IP 范围
    Cloud Storage 或 Blobstore 0.1.0.30/32 不适用
    在 Cloud Tasks(包括 App Engine 任务队列)中使用 App Engine HTTP 和 App Engine 任务的 Cloud Scheduler 作业 0.1.0.2/32,如果设置为拒绝,则绕过默认防火墙规则 0.1.0.2/32
    App Engine Cron 0.1.0.1/32 或 0.1.0.2/32 如果设置为拒绝,则绕过默认防火墙规则 0.1.0.1/32 或 0.1.0.2/32
    URL Fetch 0.1.0.40/32 0.1.0.40/32
    启用了专用 Google 访问通道的 Compute Engine 实例 0.0.0.0/32 0.0.0.0/32

    配置 App Engine 防火墙规则时,根据您的使用场景,以下这些额外的说明可能适用:

    • 新建或更新后的 App Engine Cron 作业发送到 App Engine 标准环境或柔性环境的请求来自 0.1.0.2。对于使用旧版 gcloud(版本低于 326.0.0)创建的 Cron 作业,Cron 请求将来自 0.1.0.1。如需详细了解如何识别来自 App Engine Cron 服务的请求,请参阅验证 Cron 请求
    • 如果您的应用与 Cloud Load Balancing 交互或连接到 VPC 网络,请参阅下文的与其他产品或服务的交互部分。

    App Engine 标准环境示例

    在标准环境中运行的应用有两个服务:frontend_servicebackend_servicefrontend_service 使用 Cloud Tasks 和 App Engine HTTP 向 backend_service 发送消息。由于 default 防火墙规则允许 Cloud Tasks 请求(即使配置为 deny),您无需为 Cloud Tasks 创建防火墙规则。

    但是,如果您要限制对应用的访问并明确阻止 Cloud Tasks 请求,则应为 IP 范围 0.1.0.2/32 创建 deny 防火墙规则。

    App Engine 柔性环境示例

    在柔性环境中运行的应用有两个服务:frontend_servicebackend_service,并且防火墙配置为默认拒绝流量。frontend_service 使用 Cloud Tasks 和 App Engine HTTP 向 backend_service 发送消息。由于 default 防火墙规则拒绝 Cloud Tasks 请求,因此您需要为 0.1.0.2/32 创建一个 allow 防火墙规则。

    与其他产品或服务的交互

    Cloud Load Balancing

    如果您使用 Cloud Load Balancing 和无服务器 NEG,请注意以下事项:

    • 负载均衡器不会干扰 App Engine 防火墙规则或与之交互。在无服务器 NEG 将流量定向到 App Engine 之前,不会评估 App Engine 防火墙规则。
    • 我们建议您使用入站流量控制,以使应用仅接收从负载均衡器和 VPC(如果使用 VPC)发送的请求。否则,用户可以使用应用的 App Engine 网址来绕过负载均衡器、Google Cloud Armor 安全政策、SSL 证书和通过负载均衡器传递的私钥。

    • 如果入站流量控制设置为接收 internal-and-cloud-load-balancing 流量,请将默认 App Engine 防火墙规则保持原样 (allow),并使用 Google Cloud Armor Web 应用防火墙 (WAF) 规则

    阻止访问缓存的内容

    App Engine 防火墙位于缓存内容的机制(例如 Web 代理和浏览器)之后。内容缓存之后,系统会通过该特定网址公开提供该内容,直到其过期为止。即使在创建新的防火墙规则之后,这些内容也仍然可以访问。

    如需了解如何更改静态内容的默认到期时间或防止静态内容被缓存,请参阅缓存到期时间

    如需防止应用代码输出的动态内容被缓存,请使用 Cache-ControlExpires HTTP 响应标头。如需详细了解这些 HTTP 标头(包括如何控制缓存),请参阅避免缓存

    后续步骤

    按照创建防火墙中的说明操作,了解如何配置 App Engine 防火墙规则。