CloudFront搭配Lambda Function URL遇POST请求403错误求助
- 检查Lambda Function URL的资源策略:Lambda Function URL默认拒绝未授权请求,得在资源策略里明确允许CloudFront访问。可以添加允许
cloudfront.amazonaws.com服务主体的语句,或者指定具体CloudFront分发的ARN,确保CloudFront有权限把请求转发到Lambda。 - 配置CloudFront的源请求策略:只开缓存策略允许Authorization头没用,源请求策略才决定哪些头会发送到源端。要创建包含Authorization头的源请求策略,关联到对应的CloudFront行为上,确保这个头能被转发到Lambda。
- 排查CloudFront的WAF规则:如果CloudFront绑了WAF,可能是WAF拦截了带Authorization头的请求。去WAF控制台看拦截日志,检查有没有匹配的规则,比如检测Bearer令牌格式的规则或者直接拦截特定头的规则,必要时调整规则。
- 确认CloudFront的源协议策略:Lambda Function URL只支持HTTPS,要确保CloudFront到Lambda的源协议策略设为
HTTPS only,用HTTP转发可能触发403错误。 - 查看访问日志定位问题:
- 看CloudFront日志的
sc-status和x-edge-detailed-result-type字段,判断是CloudFront自身拦截还是源端返回的403。 - 去CloudWatch看Lambda Function URL的日志,如果没有请求记录,说明请求没到Lambda,问题在CloudFront侧;如果有记录,查Lambda执行日志里的授权相关错误。
- 看CloudFront日志的
- 检查Lambda Function URL的认证类型:如果设了
AWS_IAM认证,CloudFront得用IAM角色签署请求,不能直接转发Authorization头。这种情况要么把认证类型改成NONE(业务允许的话),要么配置CloudFront用IAM角色向Lambda认证,原来的Bearer令牌换自定义头传递。
内容的提问来源于stack exchange,提问作者Bhargav Reddy
相关产品推荐
相关产品推荐

