关于通过CloudFront作为网站服务非网站S3存储桶的说明

Gar*_*son 3 amazon-s3 amazon-web-services amazon-cloudfront

使用AWS我对以下情况非常满意:

  • 将S3存储桶设置example.com为静态网站。
  • example.com在CloudFront上创建一个发行版。
  • 使用Route 53和证书管理器允许通过CloudFront使用HTTPS浏览S3存储桶内容。

但是,您知道,仍然可以直接使用HTTP从S3存储桶直接在其备用URL下访问该网站。我想防止用户直接访问S3存储桶URL。

网络上的一些教程(包括CloudFront文档)说,我需要创建一个原始访问身份(OAI),并将对S3存储桶的访问限制为仅使用该OAI的CloudFront发行版。但是,本文档还说,我不能将OAI与设置为静态网站端点的S3存储桶一起使用。

因此,这给我留下了一些文档无法解决的问题:

  • 如果我关闭对S3存储桶的静态网站访问example.com,一旦使用OAI将其连接到CloudFront,我是否仍然能够通过HTTPS通过CloudFront访问S3存储桶内容?也就是说,即使我已为存储桶关闭了静态网站托管,CloudFront是否也可以为我的S3存储桶提供“静态网站访问”?
  • 当为静态网站托管配置S3存储桶时,S3允许我设置“路由规则”以重定向foo.htmlbar.html例如。如果我关闭了S3存储桶的静态网站托管,该如何设置重定向?CloudFront是否提供可以配置的相似路由规则,或者还有另一种方法可以实现此目的?

Jam*_*ean 5

限制从CloudFront访问S3网站终结点的其他方法是:

  1. S3存储桶策略,仅允许从CloudFront IP地址访问。CloudFront IP地址:CloudFront IP范围

  2. 根据条件(例如CloudFront上的Referer和Whitelist Referer标头)创建S3策略,仅当您从CloudFront服务资产时才起作用,而不是主索引页面,因为主索引页在请求中将没有Referer标头。

如果您使用S3 rest api终结点而不是s3网站终结点作为源,则您的网站仍可以在HTTPS上运行(SSL在CloudFront上终止),但是存在几个问题:

  1. 重定向/路由规则不适用于REST API端点。
  2. REST API端点不会自动服务器索引页面示例:如果访问abc.com/path-> S3静态端点将其重定向到abc.com/path/index.html(abc.com-> abc的异常。 com / index.html(可通过定义Root文档在CloudFront上完成)

对于foo.html和bar.html的问题,您需要使用Lambda @ edge函数通过原始请求函数来更改URI。

Lambda @ edge示例


Dan*_*ell 2

我仍然可以通过 CloudFront 通过 HTTPS 访问 S3 存储桶内容吗?

是的,但 cloudfront 将通过经过身份验证的 S3 API 请求而不是通用 http 请求来访问原始存储桶。

例如,在为静态网站托管配置 S3 存储桶时,S3 允许我设置“路由规则”以将 foo.html 重定向到 bar.html。如果我关闭 S3 存储桶的静态网站托管,如何设置重定向?

我不知道有什么方法可以在 CloudFront 中做到这一点。因此,我继续将我的资产托管在 s3 网站上。

我想阻止用户直接访问 S3 存储桶 URL。

我愿意放弃这一点,以保留我想要从 s3 存储桶托管获得的一些功能。这是一个权衡,你必须自己决定哪个更重要。