为 AWS S3 设置 CORS 配置

Setting CORS config for AWS S3

为了优化我的服务器使用,我移动了图像 (~500) 并为 SEO (~1000) 渲染了 HTML 文件到 S3 存储并且它工作得很好,但是,我担心 DDoS 攻击最终会花费我很多钱,因为亚马逊对每个 GET 请求收费。

我做了一些关于如何防止这种情况的研究,发现 S3 有一个 CORS 配置选项。

我试过了,但不幸的是,它似乎没有用。仍然可以从任何 URL

访问文件

我做错了什么?

更新:

还尝试设置存储桶策略:

CORS 配置允许跨域请求。它不是一种限制访问文件的方法。

默认情况下,浏览器不允许跨域请求。例如,浏览器将不允许 example1.com 提供的页面访问 example2.com 的内容。这样做是为了保护您的个人信息,例如人们试图向 Facebook 打开 iframe 以访问您的个人 Facebook 内容。

但是,如果 example2.com 愿意允许此跨域请求,则它可以添加一个跨原始资源共享 (CORS) 策略,表明允许 example1.com 访问内容以跨域的方式。 Web 浏览器 将允许访问。

总结: 控制 CORS 的是您的 Web 浏览器。 CORS 策略只是告诉网络浏览器允许它。

参见:Cross-Origin Resource Sharing (CORS)

受推荐人限制

但是,您的特殊要求似乎是您愿意提供来自 Amazon S3 的内容,但前提是它出现在特定网页上。例如,如果 example.com 服务的页面请求它,则只显示来自 images.example.com 的图像。您可以通过在 Amazon S3 存储桶策略中指定引荐来源网址来实现此目的。

来自Restricting Access to a Specific HTTP Referrer

{
  "Version":"2012-10-17",
  "Id":"http referer policy example",
  "Statement":[
    {
      "Sid":"Allow get requests originating from www.example.com and example.com.",
      "Effect":"Allow",
      "Principal":"*",
      "Action":"s3:GetObject",
      "Resource":"arn:aws:s3:::examplebucket/*",
      "Condition":{
        "StringLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*"]}
      }
    }
  ]
}

伪造引荐来源网址相对容易,但这通常可以满足您的需求。