多区域Active-Active架构下CloudFront访问API Gateway被WAF拦截的优雅方案咨询
解决方案
1. 使用CloudFront Origin Access Control (OAC) + API Gateway资源策略
这是AWS原生推荐的无密钥认证方案,比自定义标头/API密钥更安全且易维护:
- 给CloudFront分发配置Origin Access Control (OAC),选择适配API Gateway的类型
- 在API Gateway的资源策略中添加允许规则,仅接受来自该OAC的请求
- 配合WAF规则,只放行OAC签名验证通过的请求(或直接依赖API Gateway资源策略拦截非法请求,WAF专注前端防护)
优势:无需手动管理密钥/标头,AWS自动处理请求签名,避免密钥泄露风险,配置后长期稳定。
2. 将WAF迁移至CloudFront层
既然已用CloudFront作为统一入口,把WAF从API Gateway转移到CloudFront是更合理的架构:
- 在CloudFront分发上关联Web ACL,所有外部请求先经过CloudFront WAF校验
- API Gateway的WAF可保留或禁用,若保留则仅配置内部防护规则(比如只允许CloudFront的IP段请求)
- 配合CloudFront地理路由功能,直接将请求路由到对应区域的API Gateway,实现Active-Active模式
优势:统一防护入口,减少API Gateway层的WAF重复配置,降低跨区域请求的WAF校验开销,架构更简洁。
3. 基于IAM角色的请求认证
利用AWS IAM身份验证机制,让CloudFront以IAM角色身份调用API Gateway:
- 创建IAM角色,赋予
execute-api:Invoke权限,信任实体设置为CloudFront服务 - 在CloudFront分发的源配置中,启用Origin Custom Headers,并配置使用该IAM角色进行请求签名
- API Gateway启用IAM认证,仅允许该IAM角色的请求通过;WAF可添加规则检查请求中的IAM签名有效性
优势:完全基于AWS IAM生态,无需额外管理认证凭证,权限可通过IAM策略精细控制,适合复杂权限场景。
内容的提问来源于stack exchange,提问作者user14065019
相关产品推荐
相关产品推荐

