You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何限制API Gateway仅接受来自自有S3静态网站的调用?

保护API Gateway仅允许自有S3静态网站调用的可行方案

针对你的场景,以下是几个可靠的解决方案,同时回应你提到的两个方案的疑问:

关于你考虑的方案的补充说明

  • 代理方案:确实如你所说,若代理无额外防护,任何人只要能访问代理地址就能调用API,无法实现仅允许S3网站调用的目标。
  • IP白名单:S3静态网站的访问IP属于AWS全局IP池,无固定范围,且用户访问S3的出口IP是动态的,该方案不可行。

可行方案

1. AWS WAF + 自定义请求标头验证

这是低成本的实现方案,核心是让S3网站的请求携带专属自定义标头,通过WAF拦截无效请求:

  • 步骤1:在S3静态网站的前端代码中,给所有API Gateway请求添加自定义标头,比如 X-Allowed-Source: your-unique-secret-value
  • 步骤2:在API Gateway关联的AWS WAF中创建规则,检查请求是否包含该标头且值完全匹配预设的your-unique-secret-value
  • 步骤3:将WAF规则设置为拦截不满足条件的请求,同时保留原有的API密钥验证,实现双重防护

2. IAM身份验证(SigV4签名)+ Lambda@Edge

通过给API请求添加AWS SigV4签名,确保只有授权请求能访问API Gateway:

  • 步骤1:将API Gateway的授权方式改为IAM授权,配置IAM策略允许特定角色调用该API
  • 步骤2:部署CloudFront作为S3静态网站的分发前端,启用Lambda@Edge(关联到CloudFront的Viewer Request事件)
  • 步骤3:编写Lambda@Edge函数,在用户发起API请求时自动为请求添加SigV4签名(使用预先创建的IAM角色权限)
  • 步骤4:配置CloudFront的Origin Access Control(OAC),确保只有CloudFront能访问你的S3存储桶,避免S3网站被直接访问

3. 私有API Gateway + VPC端点 + CloudFront

将API Gateway设为私有,仅允许通过VPC端点访问,结合CloudFront实现隔离:

  • 步骤1:创建私有API Gateway,禁用公网访问,配置VPC端点(Interface类型)关联到你的VPC
  • 步骤2:部署CloudFront,将S3作为默认源,同时添加API Gateway的VPC端点作为自定义源
  • 步骤3:配置CloudFront的行为规则,限制API路径的请求仅能从S3网站的路径发起,同时通过OAC确保只有CloudFront能访问S3
  • 步骤4:在VPC端点的安全组中,仅允许CloudFront的IP范围访问,进一步缩小访问范围

内容的提问来源于stack exchange,提问作者dooxe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 10:06:21