使用自定义 header 将 CloudFront 限制为特定 IP 范围的 S3 静态网站

S3 static website with CloudFront restricted to specific IP range using custom header

我想将网站部署到 S3 存储桶并使用静态网站托管。但是,我有一些严格的安全限制:

  1. 必须使用 HTTPS
  2. 对网站的访问必须限制在特定的 IP 范围内

这是我的计划:

这是一张图表:

不过我有一个大问题:在 CloudFront 之间转发自定义 header 真的 是最好的方法吗? AWS 文档说源访问身份不能用于充当网站的 S3 存储桶 (https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html)。自定义 header 似乎不如 Origin Access Identity 安全,而且更难维护。使用随机字符串作为防止某人绕过我的 CloudFront 分配并直接访问 S3 存储桶的唯一安全措施让我感到不舒服。如果恶意方猜测

我在这里的另一个选择是硬着头皮转移到服务器,在那里我可以更好地控制很多安全性,但我想利用 S3 网站的便利性。

您不能在 S3 上使用任何自定义 header,仅允许某些 header,例如:Referer、User-Agent 等。 最好的方法是将 OAI 与 S3 Rest API 端点而不是网站端点一起使用。

但是,您可以为网站端点选择替代方法: 1. 允许 CloudFront IP 范围访问 S3 存储桶。

http://d7uri8nf7uskq.cloudfront.net/tools/list-cloudfront-ips

和 2. 在 CloudFront 源配置中添加源客户 header 例如 "Referer: some random value" 并创建存储桶策略以允许 Referer header.

中的特定值

您应该从 S3 存储桶中删除网站配置并使用 Origin Access Identity。您的其余设置没问题。

您不需要将 S3 存储桶配置为网站端点,因为您不会直接通过 S3 提供您的内容。使用 Origin Access Identity,您的存储桶将只能从 CloudFront 获得(除非您在存储桶策略中添加其他内容),这就是您想要的。

另见 https://medium.com/@sanamsoodan/host-a-website-using-aws-cloudfront-origin-access-identity-s3-without-static-website-hosting-43995ae2a9bd