CloudFront未转发请求至API Gateway(403 Forbidden)求助
根据你描述的情况,直接调用API Gateway正常,但通过CloudFront访问返回403,结合调整Host头后的错误变化,重点排查以下几个方向:
检查CloudFront源站的端点配置
确认CloudFront中配置的源域名是API Gateway的执行阶段域名(格式类似xxxx.execute-api.<region>.amazonaws.com),而非控制台的管理域名。同时源路径必须填写API的部署阶段(比如/prod),否则CloudFront转发的路径会与API Gateway的资源路径不匹配,触发403。修正Host头的转发规则
API Gateway依赖Host头识别对应的API部署,如果你让CloudFront转发请求的Host头(即CloudFront自身域名),API Gateway会无法定位到你的API。解决方法:- 在CloudFront中创建自定义的Origin Request Policy,设置Host头为源站域名(也就是API Gateway的执行域名);
- 将该策略关联到对应的缓存行为上。
之前移除Host头出现MissingAuthenticationToken,本质是API Gateway无法通过请求定位到你的API,这也验证了Host头是核心问题。
验证路径转发的一致性
检查CloudFront缓存行为的路径模式(比如/*)与API Gateway的资源路径是否匹配。可以开启CloudFront的访问日志,查看转发到API Gateway的实际请求路径、头信息,和Postman直接调用的请求做对比,找出路径或头的差异。检查Origin Access Control (OAC) 授权
如果你用了CloudFront的OAC来访问API Gateway,必须确保:- API Gateway的资源策略中,允许CloudFront的OAR(Origin Access Request)访问,策略里要包含CloudFront的ARN,以及对应的HTTP方法(POST、GET等);
- OAC的配置中,已正确关联API Gateway源,且启用了签名请求。
未配置正确的OAC/OAI授权时,API Gateway会拒绝来自CloudFront的请求,返回403。
确认CORS头的完整转发
虽然你已设置CORS,但要确保CloudFront缓存行为中转发了Origin头到API Gateway。如果Origin头未被转发,API Gateway无法正确处理跨域请求,可能间接导致403。同时检查Lambda返回的CORS头是否包含Access-Control-Allow-Methods、Access-Control-Allow-Headers这些必要字段,且Access-Control-Allow-Origin的值与请求的Origin匹配(调试阶段可以先设为*测试)。
内容的提问来源于stack exchange,提问作者Adrian Varysoo

