AWS架构中如何防止绕开CloudFront直接访问API Gateway?
CloudFront + API Gateway 防绕开访问的解决方案
先直接回答你的核心问题:只给API Gateway和CloudFront配置相同的自定义域名,无法阻止他人直接访问API Gateway的默认端点。因为默认的xxx.execute-api.region.amazonaws.com端点依然存在并可被访问,自定义域名只是提供了一个替代访问路径,并没有限制默认端点的可用性。
下面是几个切实可行的措施,确保只有CloudFront能向API Gateway转发请求:
1. 配置API Gateway资源策略,限制仅CloudFront来源的请求
这是最可靠的方式,通过API Gateway的资源策略直接过滤请求来源:
- 拿到你的CloudFront分发的ARN(格式:
arn:aws:cloudfront::你的AWS账号ID:distribution/分发ID) - 在API Gateway控制台的资源策略中添加规则,只允许来自该CloudFront分发的请求
- 示例策略代码:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "arn:aws:execute-api:你的区域:你的账号ID:你的API ID/*", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:cloudfront::你的账号ID:distribution/你的分发ID" } } } ] }
这个策略会拒绝所有不是从指定CloudFront分发过来的请求,包括直接访问默认端点的请求。
2. 禁用API Gateway的默认执行端点
如果你的API完全不需要通过默认端点访问,可以直接禁用它:
- 进入API Gateway控制台,选中你的API
- 切换到Settings页面,找到Default endpoint选项,设置为Disable
- 操作完成后,默认的
execute-api端点会直接返回403,任何人都无法通过它访问你的API
3. 搭配WAF双重防护(可选但推荐)
在CloudFront层面配置WAF的同时,也给API Gateway配置一套相同的WAF规则。这样即使有人绕过CloudFront(比如如果资源策略配置有误),API Gateway层面的WAF依然能提供防护,作为安全兜底。
4. 启用CloudFront Origin Shield
Origin Shield是CloudFront在边缘节点和源站之间的一层缓存节点,启用后所有请求必须经过Origin Shield才能到达API Gateway。这不仅能优化缓存效率,还能进一步确保请求来自CloudFront生态,减少直接访问源的可能性。
内容的提问来源于stack exchange,提问作者dingo
相关产品推荐
相关产品推荐

