首页 > 解决方案 > 拒绝 App Engine 防火墙中的所有 IP,项目中内部服务之间的通信除外

问题描述

假设我们在一个 App Engine 项目中有四个服务。我们想阻止所有传入的流量,但我们希望这四个服务能够通信。要阻止流量,我们只需将默认防火墙规则设置为拒绝所有 IP。但是,此规则也会在我们的服务之间在内部阻止流量,因此服务被阻止。我们如何轻松地将我们的内部服务列入白名单(使用标准环境)?

标签: google-app-engine

解决方案


有两种情况:

  1. 如果 App Engine Project 中的四个服务在同一个 VPC 网络中(默认/自动模式网络)

    默认情况下,您具有以下隐含规则

  • Default-allow-internal- 这有助于同一项目中同一 VPC 中的服务之间的通信。允许网络中实例之间的所有协议和端口的入口连接。此规则的优先级倒数第二低,为 65534,它有效地允许来自同一网络中其他人的 VM 实例的传入连接。此规则允许 10.128.0.0/9(从 10.128.0.1 到 10.255.255.254)中的流量,该范围涵盖网络中的所有子网。

  • Implied ipv4/ipv6 deny ingress- 默认操作为拒绝、源为 ::/0 且优先级最低 (65535) 的入口规则通过阻止与它们的传入连接来保护所有实例。

  • Implied ipv4/ipv6 allow egress- 操作为允许、目的地为 ::/0 且优先级尽可能低的出口规则 (65535) 允许任何实例将流量发送到任何目的地,但被 Google Cloud 阻止的流量除外。

    因此,如果您使用的是默认 VPC 网络并且您的所有服务都在同一个网络中,那么您已经在服务之间进行了默认内部通信并拒绝了入口流量。

  1. 如果 App Engine Project 中的四个服务在不同的 VPC 网络中,那么您可以使用Ingress Controls

    默认情况下,您的 App Engine 应用会接收发送到其apppot URL或您为应用配置的自定义域的所有 HTTP 请求。您可以使用网络入口控制来限制流量,以便您的应用仅接收来自特定来源的 HTTP 请求:

  • All: 默认。您的应用将接收所有流量,包括从 Internet 发送的直接请求。
  • Internal and Cloud Load Balancing:您的应用将仅接收通过Cloud Load Balancing路由的请求,或从同一项目中的 VPC 网络发送的请求。所有其他请求都被拒绝并出现 403 错误。
  • Internal-only:您的应用将仅接收从同一项目中的 VPC 网络发送的请求。所有其他请求都被拒绝并出现 403 错误

您可以更改 App Engine 项目的默认入口控制并将其设置internal-only为允许您的应用接收来自不同 VPC 网络但在同一个 App Engine 项目内的服务的请求。这是您可以编辑App Engine 项目的入口设置的方法。


推荐阅读