google-app-engine - 拒绝 App Engine 防火墙中的所有 IP,项目中内部服务之间的通信除外
问题描述
假设我们在一个 App Engine 项目中有四个服务。我们想阻止所有传入的流量,但我们希望这四个服务能够通信。要阻止流量,我们只需将默认防火墙规则设置为拒绝所有 IP。但是,此规则也会在我们的服务之间在内部阻止流量,因此服务被阻止。我们如何轻松地将我们的内部服务列入白名单(使用标准环境)?
解决方案
有两种情况:
如果 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 网络并且您的所有服务都在同一个网络中,那么您已经在服务之间进行了默认内部通信并拒绝了入口流量。
如果 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 项目的入口设置的方法。
推荐阅读
- node.js - 如何使用ajax(Get Method)在html页面(客户端)中显示来自node.js服务器的json数据?
- join - KSQL join 乱序记录和 1:1 关系多次更新
- dart - Flutter - 如何将focusNode从父小部件设置为子小部件?
- git - GitHub 是否支持某种别名功能?
- c++ - 如何使用移动语义重载一元算术
- javascript - 跨平台 AES 256 GCM Javascript 和 Elixir
- php - 如何从 mysql 数据库中获取字符串以与 PasswordVerify() 一起使用?
- r - 如何在 R 中修复“找不到函数 mvOutlier”
- spring - 通过构建脚本更改 mongo dbname
- webpack - wasm-bindgen、asm.js 和 Emcripten 有什么区别?