amazon-web-services - 关于通过 CloudFront 作为网站提供非网站 S3 存储桶的说明

标签 amazon-web-services amazon-s3 amazon-cloudfront

使用 AWS 我对以下场景非常满意:

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

  • 但是,如您所知,仍然可以使用 HTTP 直接从 S3 存储桶直接访问其备用 URL 下的网站。我想阻止用户直接访问 S3 存储桶 URL。

    网络上的几个教程,包括 CloudFront documentation ,假设我需要创建一个源访问身份 (OAI) 并将对 S3 存储桶的访问限制为使用该 OAI 的 CloudFront 分配。但是,此文档还说我不能将 OAI 与设置为静态网站端点的 S3 存储桶一起使用。

    所以这给我留下了一些文档中不清楚的问题:
  • 如果我关闭对 S3 存储桶的静态网站访问 example.com ,一旦我使用 OAI 将其连接到 CloudFront,我是否仍然能够通过 CloudFront 通过 HTTPS 访问 S3 存储桶内容?也就是说,即使我关闭了存储桶的静态网站托管,CloudFront 是否会为我的 S3 存储桶提供“静态网站访问”?
  • 为静态网站托管配置 S3 存储桶时,S3 允许我设置“路由规则”以重定向 foo.htmlbar.html例如。如果我关闭了 S3 存储桶的静态网站托管,我该如何设置重定向? CloudFront 是否提供了我可以配置的类似路由规则,或者是否有其他方法可以实现这一点?
  • 最佳答案

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

  • S3 存储桶策略仅允许来自 CloudFront IP 地址的访问。
    CloudFront IP 地址:CloudFront IP range
  • 根据 CloudFront 上的 Referer 和 Whitelist Referer header 等条件创建 S3 策略,这仅适用于您从 CloudFront 提供 Assets 的情况,而不是主索引页面,因为主索引页面不会在请求中包含 Referer header 。

  • 如果您使用 S3 rest api 端点而不是 s3 网站端点作为源,您的网站仍将在 HTTPS 上运行(SSL 在 CloudFront 上终止),但存在几个问题:
  • 重定向/路由规则不适用于 REST API 端点。
  • REST API 端点不会自动服务器索引页面
    例子:
    如果您访问 abc.com/path --> S3 静态端点会将其重定向到 abc.com/path/index.html
    (abc.com 的异常(exception) --> abc.com/index.html 可以通过定义根文档在 CloudFront 上完成)

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

    Lambda@edge examples

    关于amazon-web-services - 关于通过 CloudFront 作为网站提供非网站 S3 存储桶的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58575810/

    相关文章:

    java - 在多个EC2实例中远程执行程序并等待结果

    amazon-s3 - 如何使用云形成为S3存储桶设置半随机名称

    ruby - 检查 s3 存储桶中是否存在文件夹

    amazon-web-services - CloudFront + S3 网站的请求 header 包含 'Accept-Encoding' 时缺少 CORS header

    ruby-on-rails - Rails 3.2 + Heroku + S3 + CloudFront : Not serving gzip css js

    amazon-web-services - AWS CDK : run external build command in CDK sequence?

    javascript - 如何在dynamodb中更新 map 属性

    amazon-web-services - 云形成漂移和变更集有什么区别?

    image - 我应该将 Amazon S3 用于我的图像还是只将它们保留在我的服务器上?

    amazon-cloudfront - 无法使用 AWS CloudFront 签名的 Cookie 播放 HLS m3u8 文件