我目前有一个CloudFront发行版,它使用Origin access Control限制对S3 bucket的静态内容访问。
我想用API网关做同样的事情。我们的目标是使体系结构看起来像这样:
┌───────────────────────────────────────────────────────────────────────────┐
│AWS Account │
│ ┌──────────────────────┐ │
│ * │ S3 Bucket │ │
│ ┌──────►│ (static content) │ │
│ │ └──────────────────────┘ │
┌─────────────┐ │ ┌────────────────────────────┐ │ │
│ │ │ │ │ │ │
│ Client ├──────┼─►│ CloudFront Distribution ├───────┤ │
│ │ │ │ │ │ ┌──────────────────────┐ │
└─────────────┘ │ └────────────────────────────┘ │ │ API Gateway │ │
│ └──────►│ (dynamic content) │ │
│ /api/* └──────────────────────┘ │
│ │
│ │
└───────────────────────────────────────────────────────────────────────────┘
不是来自CloudFront发行版的流量不应该到达API网关——理想情况下,不给它一个公共URL,但通过策略限制它也是可以接受的。
我已经看到了这个基于分发的秘密头值授权请求的答案,与OAC等方法相比,这并不理想。
你可以通过一个私有API网关来实现这一点。
- 为API网关创建VPC端点
- 创建私有API网关
- 配置CloudFront使用私有API网关端点
您的端点在此设置中将不是公共的。您可以通过添加资源策略和安全组/网络acl来进一步改进设计。
参考:https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-private-apis.html