💡
原文中文,约7300字,阅读约需18分钟。
📝
内容提要
中国企业通过2B电商平台进行商品销售和采购,但Web应用防火墙(WAF)可能导致误杀问题。为了解决误杀问题,可以利用Amazon Lambda@Edge和Amazon CloudFront自定义错误页面展示WAF返回的403 Forbidden错误的Request ID。通过这个唯一的WAF Request ID,网站运维工程师可以快速查询相应的WAF日志,找到误杀的原因。配置步骤包括创建CloudFront自定义错误页面、为自定义错误页面的URI path创建一个Cache Behavior、创建Lambda@Edge函数并添加CloudFront viewer request trigger,以及创建WAF WebACL并关联CloudFront distribution。通过这种方法,可以快速排查和解决误杀问题,改善用户体验。
🎯
关键要点
- 中国企业通过2B电商平台进行商品销售和采购,Web应用防火墙(WAF)可能导致误杀问题。
- 利用Amazon Lambda@Edge和Amazon CloudFront自定义错误页面展示WAF返回的403 Forbidden错误的Request ID,可以快速查询WAF日志。
- 配置步骤包括创建CloudFront自定义错误页面、为自定义错误页面的URI path创建Cache Behavior、创建Lambda@Edge函数并添加CloudFront viewer request trigger,以及创建WAF WebACL并关联CloudFront distribution。
- CloudFront的请求事件包含requestId字段,每个请求都有唯一的Request ID作为标识。
- 为HTTP状态码403创建CloudFront自定义错误页面时,需设置错误页面的缓存时间为0,避免缓存。
- 为CloudFront自定义错误页面的URI path单独创建Cache Behavior,确保只允许CloudFront向自定义错误页面发起的请求触发Lambda@Edge。
- 创建Lambda@Edge函数并添加CloudFront viewer request trigger,以便在403错误页面中插入Request ID。
- 创建WAF WebACL并配置WAF规则,匹配URI path以产生Block动作。
- 自定义错误页面可以显示CloudFront request ID,并且与X-Amz-Cf-Id response header的值相同。
- 企业客户可以通过一键复制Request ID的按钮,方便地将Request ID发送给网站运维工程师。
- 使用Centralized Logging with OpenSearch、CloudWatch Log Insight和Amazon Athena等工具查询WAF日志中的Request ID。
- 假设每月10亿WAF请求,其中0.1%为Blocked请求,Lambda@Edge和CloudFront的成本相对较低。
- 使用UUID作为CloudFront自定义错误页面的URI path,避免DDoS攻击产生不必要的Lambda@Edge费用。
- WAF自定义响应的优先级高于CloudFront自定义错误页面,避免不必要的Lambda@Edge函数执行。
- 通过唯一的WAF request ID,网站管理员可以快速排查和解决误杀问题,改善用户体验。
➡️