如何限制对 Amazon s3 静态网站中单个文件的访问

How to limit access to individual files in an Amazon s3 static website

最近创建了一个托管在 s3 上的静态网站,我注意到当用户检查网站的来源时,他们可以单击允许他们访问单独选项卡中的图像等项目的链接。有没有办法允许网站访问图像但限制用户尝试访问源图像。

遗憾的是,您无法在未经适当身份验证的情况下限制下载图像的能力。如果您的用户可以在他们的浏览器中看到图像,他们就可以下载它们,因为它们已经下载过了。

但是您可以限制您的用户直接访问您的 S3 存储桶。为此,您可以在 S3 存储桶前面加上 CloudFront (CF)。

具体来说,您可以在 CF 中设置 Origin Access Identity 并使您的网站和所有图像只能通过 CF 访问:

用户只需在选项卡中打开资产就可以了,如果您只是想阻止内容在您域以外的地方访问,您可以使用 Referer 头部将其锁定为仅通过您的网站。

这可以通过 bucket policy similar to the one below.

在 S3 中完成
{
  "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","s3:GetObjectVersion"],
      "Resource":"arn:aws:s3:::awsexamplebucket1/*",
      "Condition":{
        "StringLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*"]}
      }
    }
  ]
}

您始终可以通过使用 CloudFront distribution combined with a AWS WAF 来增强此功能,以包含按推荐人阻止的规则。

如果您想锁定此内容(无论有人需要登录才能看到它还是付费才能获得),您有几个选择。