仅由 API Gateway 访问的私有 S3 静态网站

Posted

技术标签:

【中文标题】仅由 API Gateway 访问的私有 S3 静态网站【英文标题】:Private S3 static website accessed only by API Gateway 【发布时间】:2021-04-15 17:57:53 【问题描述】:

我想建立一个只能通过 API Gateway 访问的静态 S3 网站,所以我所做的是。

S3 端 1. 在 S3 存储桶上启用静态网站托管。 2. 阻止所有公共访问。 3. 放入只允许我的 VPC Endpoint 访问它的存储桶策略。

"Version": "2012-10-17", "Id": "VPCe", "Statement": [ "Sid": "VPCe", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::my-bucket.com/*", "Condition": "StringNotEquals": "aws:SourceVpce": "vpce-my-vpce" ]

API 网关端 1. 将相同的 VPCE 映射到 API 2.创建代理资源 3. 在集成请求中,我将其设为 HTTP,并将我的 S3 网站 URL 作为端点 URL,内容处理作为 passththrough。 4. 但是当我通过 APIGW 进行测试时,访问被拒绝。

我是否缺少某些东西,或者我期望它起作用是错的?


我收到 403,访问被拒绝。

【问题讨论】:

“将同一个 VPCE 映射到 API”是什么意思? 私有 API,我将它放在端点配置下的设置中 -> 私有并使用该 VPCE Id 好的,我认为您在这种情况下误解了 VPCE。存储桶策略中的条件键aws:SourceVpce 的值是S3 VPC 终端节点资源的ID。但是,在 API 网关的端点配置下配置的是 execute-api API 网关的接口 VPC 端点。这两个 ID 指的是不同的东西。 【参考方案1】:

我想建立一个只能通过 API Gateway 访问的静态 S3 网站,

不能这样做,因为这是不可能的。 S3 静态网站只能通过 public URL 访问,因此您需要从 Internet 访问它。

它们不打算使用私有 IP 地址或任何 VPC 端点从 VPC 访问。

如果您想拥有私有静态网站,您必须自己托管在私有 EC2 实例或 ECS 容器上。

【讨论】:

以上是关于仅由 API Gateway 访问的私有 S3 静态网站的主要内容,如果未能解决你的问题,请参考以下文章

在 AWS Lambda 函数中从 S3 获取对象并发送到 Api Gateway

允许从 API Gateway 到私有 ALB 的请求

通过 ElasticBeansStalk 上托管的 API Gateway 在 AWS S3 上上传图像

使用 Learner Lab - 使用 S3 静态网页上传图片,搭配 API Gateway 与 Lambda

使用 Learner Lab - 使用 API Gateway 与 Lambda 上传图片到 S3

如何使用 Lambda /API Gateway 在 S3 上上传大于 10MB 的 csv 文件