You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止GCP应用因恶意访问legacy URL触发不必要实例启动

解决方案

优先选择:从流量入口层拦截,避免触发实例调度

  • 配置Cloud Armor WAF规则:在GCP Cloud Armor中添加自定义规则,直接拦截所有访问/badroute及其他已知恶意路径的请求,规则命中后直接返回403/404响应,流量不会进入App Engine的实例调度逻辑,完全不会触发实例启动。
  • 调整App Engine的app.yaml handler配置:在应用的app.yaml文件中优先添加恶意路径的handler规则,配置为返回静态错误响应,不需要调用应用代码,示例配置如下:
handlers:
- url: /badroute.*
  static_files: error/404.html
  upload: error/404.html
  secure: always
  http_headers:
    Status: 410 Gone
- url: /
  script: auto

这类静态响应的请求不需要启动动态实例处理,不会触发实例冷启动。

  • 如果你使用的是App Engine灵活环境,可以搭配负载均衡的URL映射规则,直接把恶意路径的流量引导到静态错误响应后端,完全绕开动态实例集群。

次选:缩短实例空闲超时,减少无效运行时间

如果确实无法完全在入口层拦截所有恶意请求,可以调整实例的空闲超时阈值,大幅缩短空闲后关停的等待时间:

  • App Engine标准环境:在app.yaml中添加idle_timeout配置,最短可设置为1m(1分钟),实例处理完请求后如果1分钟内没有新的合法请求,就会自动关停,远短于默认的15分钟:
runtime: python27 # 对应你当前使用的webapp2运行时版本
api_version: 1
idle_timeout: 1m
  • 优化恶意路径的处理逻辑:你当前的代码是返回重定向,会额外产生一次跳转请求,建议直接返回状态码410或者403,不要做重定向,降低单请求的处理耗时,让实例更快进入空闲状态,示例代码修改如下:
class Dummy(webapp2.RequestHandler): 
  def get(self):
    self.error(410)
    self.response.headers['Content-Type'] = 'text/plain'
    self.response.out.write('Gone')

app = webapp2.WSGIApplication(
  [('/', MainPage),
  ('/badroute.*', Dummy)], # 增加通配符匹配所有子路径的恶意请求
debug=True)

补充优化

  • 如果恶意请求来自固定的IP段,可以直接在VPC防火墙或者Cloud Armor中添加IP封禁规则,从源头拦截所有流量。
  • 可以配置App Engine的流量规则,把所有未知路径的流量默认返回404,只放行你需要提供服务的合法路径。

内容的提问来源于stack exchange,提问作者zerowords

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:54:01