AWS中API Gateway与Cloudfront后S3静态桶同域名路径配置问题
Cloudfront+S3+API Gateway同域名配置问题解决方案
核心问题定位
当前问题集中在:
feedback.domain.com/api路径无法正确路由到API Gateway,返回403且无CloudWatch日志- S3源路径配置错误导致全域AccessDenied
- 原子域名API场景下前端请求触发CORS错误
一、Cloudfront行为路由配置(关键)
要实现同域名不同路径分发,必须配置多行为规则,按路径优先级匹配:
- 规则1(优先级更高):
- 路径模式:
/api/* - 源:绑定API Gateway的自定义域名(需先完成API Gateway自定义域名配置)
- 缓存策略:禁用缓存或设置短TTL(API请求不适合缓存)
- 查看器协议:强制HTTPS(同时满足TLS 1.2要求)
- 路径模式:
- 规则2:
- 路径模式:
/* - 源:指向S3静态存储桶
- 缓存策略:使用静态资源默认缓存策略
- 注意:不要修改S3源路径为
/web/*,除非静态文件确实存放在S3的web前缀下,否则会导致所有请求查找web/开头的文件,引发AccessDenied
- 路径模式:
二、API Gateway自定义域名与路径映射
- 绑定
feedback.domain.com到API Gateway:- 进入API Gateway控制台「自定义域名」页面,创建自定义域名,关联ACM证书(需与Cloudfront同区域)
- 配置基础路径映射:将
/api映射到目标API的对应阶段(如prod)
- 独立验证API路径:直接访问API Gateway自定义域名的
/api/xxx,确认能返回Lambda响应,且CloudWatch有日志(若仍无日志,检查API Gateway日志开关及IAM权限)
三、S3存储桶权限与路径修复
- 恢复S3源路径为默认(无需添加
/web/*),若静态文件在S3根目录,直接用存储桶作为源 - 配置S3存储桶策略,允许Cloudfront OAI访问:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity YOUR_OAI_ID" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME/*" } ] } - 确保S3静态网站托管的索引、错误文档配置正确,避免路径访问异常
四、TLS 1.2启用配置
- Cloudfront端:在分发设置的「查看器」中,选择ACM证书,设置「支持的SSL/TLS协议」为
TLSv1.2 only - API Gateway端:自定义域名配置中使用支持TLS 1.2的ACM证书,确保端点仅接受TLS 1.2请求
五、CORS问题解决
同域名路由下,/api请求属于同域请求,不会触发CORS,但仍需确保API Gateway CORS配置正确:
- 在API Gateway各资源上开启CORS,允许来源为
feedback.domain.com(或*),配置允许的HTTP方法和请求头 - 前端请求路径改为
/api/xxx,避免子域名跨域
六、403错误排查
/api路径403且无CloudWatch日志:- 检查Cloudfront的
/api/*行为是否优先级高于/*(/api/*更具体,应优先匹配) - 验证Cloudfront源是否正确指向API Gateway自定义域名,协议配置为HTTPS
- 确认API Gateway基础路径映射中
/api已关联到正确的API阶段
- 检查Cloudfront的
- 无效路径返回403:
- 检查S3错误文档配置,或在Cloudfront中设置自定义错误页指向S3错误页面
- 确认S3存储桶中存在对应路径的文件,或静态网站托管已开启
内容的提问来源于stack exchange,提问作者Nathan
相关产品推荐
相关产品推荐

