amazon-web-services - 通过 HTTP 从 Cloudfront 访问 Amazon S3

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

  • 我有一个 S3 存储桶,用作静态网站。
  • 我有一个 cloudfront 发行版,指向存储桶的 HTTP 端点。
  • 我希望仅限 Cloudfront 访问我的 S3 存储桶。

我想我可以通过添加主体来做到这一点:arn:iam:cloudfront ....

但这允许直接 S3 访问,而不是 HTTP 端点访问。

当我将 Cloudfront 配置为直接提供 S3 存储桶时,它不显示子目录index.htmls。为了访问 mysite.com/blog/,我必须输入 mysite.com/blog/index.html

因此,我必须使用 S3 的 HTTP 端点,就好像该站点不在 S3 上而是在 Apache 服务器上一样。

现在我无法通过 arn:iam:cloudfront 限制访问。由于 Cloudfront 成为另一个网络爬虫,S3 成为另一个网络服务器。

他们建议添加自定义 header ,以便服务器了解它是云端。但S3不支持自定义 header 。

将用户代理限制为 CloudFront,将主体限制为 AWS:* 可以起到短暂作用,但无法阻止 UserAgent 欺骗。

如何解决这个问题?

最佳答案

根本不要将源配置为 S3 - 将其配置为自定义源,然后使用存储桶的网站端点主机名作为源服务器主机名。

此时,您应该能够配置 Origin Custom Header CloudFront 将发送到源 - 这恰好是存储桶的网站端点。

User-Agent 不在 list of custom headers that CloudFront won't forward 上,因此您应该能够在从 CloudFront 到 S3 的请求中发送自定义用户代理字符串(其作用有点像静态密码),并将您的存储桶配置为仅允许该自定义用户代理。

理论上它仍然可以被欺骗,但由于它是您编写的随机字符串,因此除了您、S3 和 CloudFront 之外没有人知道该值,并且有人欺骗未知值将非常棘手,特别是自 S3 以来只是拒绝访问,没有任何解释。

关于amazon-web-services - 通过 HTTP 从 Cloudfront 访问 Amazon S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34681373/

相关文章:

typescript - 如何在 AWS CDK 中使用 API 网关部署中的现有阶段?

amazon-web-services - 我应该每次都运行 Glue 爬虫来获取最新数据吗?

amazon-web-services - 当资源已部分删除时,AWS 放大 : How to delete the environment,?

mysql - 在不同的 percona xtradb 集群节点上重用 EBS 快照

grails - 生产iOS推送通知在本地发送,但不是从AWS Elastic beantalk发送

mysql - 我将如何使用 DynamoDB 将此用法从我的 mysql 数据库移动到 nosql?

apache-spark - 使用 Spark 将 RDD 写入 S3 时设置 S3 对象元数据(标签)

amazon-web-services - 部署到 AWS S3 与 github 同步

python - Cloudfront URL 永不过期

amazon-web-services - CloudFront 如何从 S3 在现有分发服务网站上设置反向代理