只允许 CloudFront 访问 API 网关。

huangapple go评论69阅读模式
英文:

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 网关来实现这个功能。

  1. 为你的 API 网关创建一个 VPC 端点
  2. 创建一个私有 API 网关
  3. 配置 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.

  1. Create a VPC endpoint for your API Gateway
  2. Create a private API Gateway
  3. 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

huangapple
  • 本文由 发表于 2023年4月7日 01:02:28
  • 转载请务必保留本文链接:https://go.coder-hub.com/75952028.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定