防火墙用于确定允许哪些网络流量通过以及拒绝哪些流量。防火墙可应用于传入流量(入站流量)和/或传出流量(出站流量)。对于 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 柔性环境可以在 Virtual Private Cloud (VPC) 级层自动配置防火墙规则,但请注意,VPC 防火墙不会与 App Engine 防火墙交互。
允许来自您的服务的传入请求
下表列出了常用服务的 IP 范围和 App Engine 防火墙行为。您使用的 IP 地址范围取决于传入请求是传递给在 App Engine 标准环境还是柔性环境中运行的版本。
服务 | 发送到 App Engine 标准环境的请求的 IP 范围 | 发送到 App Engine 柔性环境的请求的 IP 范围 |
---|---|---|
App Engine Cron | 0.1.0.1/32 或 0.1.0.2/32 如果设置为拒绝,则绕过默认防火墙规则 | 0.1.0.1/32 或 0.1.0.2/32 |
使用 Cloud NAT 进行出站连接的 Compute Engine 实例 | 配置的 Cloud NAT IP 地址 | 配置的 Cloud NAT IP 地址 |
具有外部 IP 地址的 Compute Engine 实例 | 实例的外部 IP 地址 | 实例的外部 IP 地址 |
没有外部 IP 地址的 Compute Engine 实例 | 0.0.0.0/32 | 0.0.0.0/32 |
在 Cloud Tasks(包括 App Engine 任务队列)中使用 App Engine HTTP 和 App Engine 任务的 Cloud Scheduler 作业 | 0.1.0.2/32,如果设置为拒绝,则绕过默认防火墙规则 | 0.1.0.2/32 |
Cloud Storage 或 Blobstore | 0.1.0.30/32 | 不适用 |
URL Fetch | 0.1.0.40/32 | 0.1.0.40/32 |
预热请求 | 0.1.0.3/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_service
和 backend_service
。frontend_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_service
和 backend_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) 规则。
VPC 防火墙
App Engine 防火墙的配置和执行独立于基于 VPC 的防火墙。VPC 防火墙规则应用于在 VPC 网络中运行的资源(例如 Compute Engine 虚拟机),而 App Engine 防火墙规则应用于指向应用或服务的传入请求。
如果您的网络环境中配置了基于 VPC 的防火墙规则(例如 VPC 防火墙规则或分层防火墙政策),要使 App Engine 应用可以接收某个传入请求,VPC 级防火墙和 App Engine 防火墙都需要允许该传入请求的 IP 范围。
对于 VPC 级防火墙,分层防火墙政策会在 VPC 防火墙规则之前评估,并在 VPC 防火墙评估期间遵循某个顺序。VPC 级防火墙和 App Engine 防火墙都允许的请求可被您的 App Engine 应用或服务接收。如果某个 IP 范围内的请求被 VPC 防火墙拒绝,同时被 App Engine 防火墙允许,则不允许访问 App Engine 应用。
共享 VPC
App Engine 柔性环境可以创建防火墙,具体取决于您的应用是否配置为通过共享 VPC 使用 VPC 网络。
如果 App Engine 柔性环境应用使用共享 VPC,App Engine 柔性环境不会自动创建防火墙规则。如果您需要控制访问权限并允许 VPC 网络上的流量,则可以在共享 VPC 网络上创建防火墙规则。
此外,要允许来自某个流量来源的请求,您需要在 VPC 防火墙和 App Engine 防火墙中允许同一 IP 范围。如果不同时在这两个位置(VPC 防火墙和 App Engine 防火墙)中指定这一 IP 范围,系统将不允许该 IP 范围访问您的 App Engine 应用或服务。
如果 App Engine 柔性环境应用未配置为使用共享 VPC,App Engine 柔性环境最多可创建两条隐藏的 VPC 防火墙规则,具体取决于应用使用分组健康检查(默认)还是旧版健康检查。这些隐藏的防火墙规则允许流向柔性环境的服务流量和健康检查流量:
- 网络名称:
app.yaml
中指定的网络,如果未配置网络,则为默认网络。 - 目标标记:
app.yaml
文件中指定的instance_tags
。默认情况下,如果未提供目标标记,则 App Engine 柔性环境会生成遵循aef-INSTANCE_ID
格式的唯一标记。此标记仅会影响此特定柔性环境版本中的实例,并且防火墙规则将定位此标记。 - 流量方向:入站
- 匹配时执行的操作:允许
- 来源 IP 地址范围:
35.191.0.0/16
和130.211.0.0/22
- 协议和端口:
- tcp:
8443
(旧版健康检查)或10402
(分组健康检查)
- tcp:
- 优先级:
1000
阻止访问缓存的内容
App Engine 防火墙位于缓存内容的机制(例如 Web 代理和浏览器)之后。内容缓存之后,系统会通过该特定网址公开提供该内容,直到其过期为止。即使在创建新的防火墙规则之后,这些内容也仍然可以访问。
如需防止内容被缓存,请使用 Cache-Control
和 Expires
HTTP 响应标头。如需详细了解这些 HTTP 标头(包括如何控制缓存),请参阅避免缓存。
后续步骤
按照创建防火墙中的说明操作,了解如何配置 App Engine 防火墙规则。