英文:
Restrict API Gateway so only CloudFront can hit it
问题
我目前有一个CloudFront分发,使用Origin Access Control来限制对S3桶的静态内容的访问。
我想要在API Gateway上实现相同的功能。目标是使架构看起来像这样:
┌───────────────────────────────────────────────────────────────────────────┐
│AWS账户 │
│ ┌──────────────────────┐ │
│ * │ S3桶 │ │
│ ┌──────►│ (静态内容) │ │
│ │ └──────────────────────┘ │
┌─────────────┐ │ ┌────────────────────────────┐ │ │
│ │ │ │ │ │ │
│ 客户端 ├──────┼─►│ CloudFront分发 ├───────┤ │
│ │ │ │ │ │ ┌──────────────────────┐ │
└─────────────┘ │ └────────────────────────────┘ │ │ API Gateway │ │
│ └──────►│ (动态内容) │ │
│ /api/* └──────────────────────┘ │
│ │
│ │
└───────────────────────────────────────────────────────────────────────────┘
不来自CloudFront分发的流量不应能够到达API Gateway,最好的方式是不向其提供公共URL,但也可以通过策略来限制它,这与从分发授权请求的答案不太一样。
英文:
I currently have a CloudFront distribution which restricts access to an S3 bucket for static content using Origin Access Control.
I want to do the same with an API Gateway. The goal is for the architecture to look like this:
┌───────────────────────────────────────────────────────────────────────────┐
│AWS Account │
│ ┌──────────────────────┐ │
│ * │ S3 Bucket │ │
│ ┌──────►│ (static content) │ │
│ │ └──────────────────────┘ │
┌─────────────┐ │ ┌────────────────────────────┐ │ │
│ │ │ │ │ │ │
│ Client ├──────┼─►│ CloudFront Distribution ├───────┤ │
│ │ │ │ │ │ ┌──────────────────────┐ │
└─────────────┘ │ └────────────────────────────┘ │ │ API Gateway │ │
│ └──────►│ (dynamic content) │ │
│ /api/* └──────────────────────┘ │
│ │
│ │
└───────────────────────────────────────────────────────────────────────────┘
Traffic not from the CloudFront distribution should not be able to reach the API Gateway - ideally by not giving it a public URL, but it would also be acceptable to restrict it via a policy.
I have seen this answer which authorises the request based on a secret header value from the distribution, which is not ideal when compared to a method like OAC.
答案1
得分: 2
你可以通过使用私有 API 网关来实现这个功能。
- 为你的 API 网关创建一个 VPC 端点
- 创建一个私有 API 网关
- 配置 CloudFront 来使用私有 API 网关端点
在这个设置中,你的端点不会是公开的。你还可以通过添加资源策略和安全组/网络 ACL 进一步改善设计。
参考链接:https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-private-apis.html
英文:
You can make this work by having a Private API Gateway.
- Create a VPC endpoint for your API Gateway
- Create a private API Gateway
- Configure CloudFront to use the private API Gateway endpoint
Your endpoint won't be public in this setup. You can further improve the design by adding resource policies and security groups/network ACLs.
Reference: https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-private-apis.html
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论