CloudFront访问API Gateway前返回401/403问题排查求助
一、先把CloudFront的请求头转发配置做对
- 登录CloudFront控制台,找到你的分发,进入「行为」标签,编辑对应动态接口路径的行为(比如
/api/*这类匹配动态请求的路径) - 缓存策略直接选CachingDisabled——动态API请求没必要缓存,避免后续出现缓存相关问题
- 重点配置「源请求策略」:不要用默认策略,创建自定义策略
- 要么直接勾选「转发所有Viewer请求头」,要么精确勾选
Authorization(更安全,减少不必要的头转发) - 注意:如果你的API是POST/PUT这类带请求体的请求,别忘了同时转发
Content-Type这类必要头
- 要么直接勾选「转发所有Viewer请求头」,要么精确勾选
二、排查403错误的核心原因
你提到API Gateway和Lambda都没生成日志,说明请求根本没到达后端,这个403是CloudFront自身返回的,大概率是以下问题:
- OAC配置冲突:如果给API Gateway源配置了Origin Access Control(OAC),默认OAC会限制请求头转发,需要在OAC设置中明确允许转发
Authorization头 - API Gateway资源策略限制:检查API Gateway的资源策略,必须允许CloudFront的身份访问你的API
- 给你一个可参考的模板,替换成自己的CloudFront ARN和API信息即可:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity 你的OAI ID" }, "Action": "execute-api:Invoke", "Resource": "arn:aws:execute-api:你的区域:账号ID:API ID/*/*/*" } ] }
- 给你一个可参考的模板,替换成自己的CloudFront ARN和API信息即可:
- WAF误拦截:检查是否给CloudFront配置了WAF规则,是否是规则误拦截了带Authorization头的请求,可临时关闭WAF测试验证
三、验证令牌传递状态
- 给CloudFront的目标行为开启实时日志,可以直接查看请求到达CloudFront时是否携带
Authorization头 - 如果确认CloudFront已转发,但API仍未收到请求,检查源域名是否配置正确;若API部署在私有VPC内,需确保CloudFront能正常连通VPC网络
四、权限配置核心注意事项
- 源请求策略必须明确包含
Authorization,默认策略大多会自动移除该头,不要依赖默认配置 - API Gateway的资源策略必须明确放行CloudFront的身份(OAI或OAC)
- 如果使用Lambda授权器,需确保授权器能正确解析令牌,且返回的权限允许访问对应API资源
内容的提问来源于stack exchange,提问作者Himawari.Ksm
相关产品推荐
相关产品推荐

