当 PUT 请求 body 大于 8kb 时,AWS Cloudfront returns 403

AWS Cloudfront returns 403 when PUT request body is greater than 8kb

我在 AWS Cloudfront 后面有一个 API,多年来它在我们的前端应用程序中运行良好。最近,在功能发布后,我注意到一些用户报告数据未保存并且应用程序只是挂起。经过长时间的调查,我发现当 PUT 请求的 JSON body 大于 8kb 时,我们的 Cloudfront 分布将 return 403 Forbidden 错误。少一点工作正常,多一点 returns 403。我通过发送减少 body 数据大小的 PUT 请求来验证这一点,直到我得到预期的 201 Created 响应,并检查 body 已发送。 JSON 格式正确。

错误 return 大约 170 毫秒,包含来自 Cloudfront X-Cache: Error from cloudfront

的 header

我已经查找了有关大小限制的设置,我已经尝试禁用 WAF 规则,我已经尝试对两者“压缩 objects”on/off。启用 Real-time 日志会对以某种方式接受的最大数据产生影响吗?看起来很疯狂,但我对这个问题有点困惑。

我很乐意向大家展示一些来自 Cloudwatch 的日志以提供帮助,但是没有通过 Cloudfront 的请求不会记录在 Cloudwatch 中,而且我无法设置任何类型的日志记录到更好地了解它呕吐的原因。

正如最初的预感,结果证明这是 WAF ACL 规则问题。

阻止 ACL 已应用于应用程序负载均衡器,因此在 Web ACL 列表中找到它需要检查负载均衡器所在的区域(例如 us-west-2),或者通过检查负载balancer 的集成服务,您可以在其中查看任何 AWS WAF 规则:

  • AWS > EC2 > 负载均衡器 > {实例} > 集成服务(选项卡)> AWS WAF

特定规则位于名为 AWS-AWSManagedRulesCommonRuleSet 的 AWS 托管规则集中。只需将 SizeRestrictions_BODY 规则改为计数而不是“使用规则中定义的操作”

这显然会影响到您的应用程序的请求,因此请按照您的意愿进行处理。