通过 CloudFront 提供 S3 静态网站并将存储桶设为私有?

Serving an S3 static website via CloudFront and making the bucket private?

我看到了允许 aws 用户将存储桶设为私有但通过云端为其某些对象提供服务的指南。我一直在尝试对托管在 s3 存储桶中的整个静态站点执行相同的操作,但似乎没有任何效果。但我找不到任何明确告诉我这是不可能的东西。

是否可以在私有存储桶中使用 S3 静态网站托管功能?用户只能通过云端分发访问该站点,而不是通过转到 s3 存储桶 URL 的正确位置吗?

首先,当您使用S3静态网站功能时,OAI不起作用。

做你想做的最好的方法是 add a custom header in cloudfront。 生成一个复杂而长的字符串,就像它是密码一样,并将其传递给 referer header.

然后添加允许每个人(主体:“*”)执行 getobject 但 at the condition that a specific header is specified.

的存储桶策略

存储桶策略示例:

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"Allow get requests originating from your Cloudfront distribution.",
      "Effect":"Allow",
      "Principal":"*",
      "Action":["s3:GetObject","s3:GetObjectVersion"],
      "Resource":"arn:aws:s3:::YOUR_BUCKET_NAME/*",
      "Condition":{
        "StringLike":{"aws:Referer": "9vzeMAVjTKCWXjbBNFsCnNRsPKqMYk6achgLXu5S"}
      }
    }
  ]
}

不要忘记禁用存储桶上的 S3 public 访问阻止功能。

您可以在那里找到更完整的指南:https://aws.amazon.com/premiumsupport/knowledge-center/cloudfront-serve-static-website/?nc1=h_ls