面对机器人流量,安全团队长期受困于一种不对称结构:应用层最能看清恶意行为,但真正高效的拦截必须发生在边缘。现在,借助AWS WAF的动态标签插值和CloudFront的键值存储(KVS),一条从检测到阻断的自动反馈环路已经可以落地。用开发者熟悉的类比来说,就像在边缘部署了一个“fail2ban”。
整个架构的起点是,应用拥有最丰富的上下文。它可以识别“同一账号五分钟内30次登录失败”,也能判别“正常人类不会按这种顺序调用API”。但以往这些发现很难实时反哺给前置防护,攻击仍会消耗源站资源。为此,这套方案将三个组件的职责清晰切分:WAF负责向前传递JA4指纹和标签,CloudFront Functions在边缘查询KVS并决定放行、挑战或拦截,应用则专注做上下文相关的恶意判定,并把判定结果写回KVS。
流程开始于客户端请求进入WAF,一条计数规则会将`x-amzn-waf-ja4`头以及WAF标签注入请求。接着CloudFront Functions比对KVS中已注册的指纹,若命中就直接在边缘挑战或阻断,不再打扰源站。如果请求到达了源站,应用会基于认证失败、异常导航、速率模式等做二次判决,一旦确认恶意,就通过`PutKey`操作将指纹写入KVS。后续请求等KVS更新传播到位后,就会被CloudFront Functions在下一跳拦下。
这个闭环把前几篇文章埋下的伏笔悉数收拢:指纹采集靠WAF,边缘决策靠CloudFront Functions,而精细的检测逻辑保留在应用里,每一层只做自己最擅长的事。
在生产环境中,作者特别指出更稳健的做法是解耦——让应用只输出日志,由独立的批处理进程或Lambda函数来更新KVS,这样能进一步降低偶发写入对应用的影响。不过为了清晰演示核心思路,直连KVS的方式足够说明问题。
实现层面,应用侧通过AWS SDK v3调用`PutKeyCommand`,即可把分类为恶意的指纹登记到KVS。由于KVS API要求SigV4A签名,客户端需要引入`@aws-sdk/signature-v4-crt`。这几乎就是全部代码工作量,剩下的只是让CloudFront Functions持续读取最新的禁止列表。就这样,一个从前很难实现的应用感知、边缘阻断的联动回路,被压缩成了几个API调用。
热门跟贴