我的S3存储桶中的项目可公开访问。如何限制访问权限,以便只能从我的应用程序中访问S3 Bucket链接?

时间:2018-05-21 15:12:45

标签: amazon-web-services amazon-s3 server bucket

我有一个包含项目的S3存储桶。任何人都可以通过链接访问这些内容。该链接包含一个UUID,因此实际访问它的可能性非常低。尽管如此,随着GDPR即将来临,我急于将其束缚住。

我不确定谷歌要找到什么答案,而且我一直在搜索我的答案。我想知道是否其他人有解决这个问题的方法?如果我点击应用内的链接,我只能访问资源。

2 个答案:

答案 0 :(得分:1)

According to the S3 documentation,您应该能够限制对某些HTTP引荐的S3对象的访问,并使用明确的deny来阻止对您应用以外的任何人的访问:

{
   "Version": "2012-10-17",
   "Id": "http referer policy example",
   "Statement": [
     {
       "Sid": "Allow get requests referred by 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/*"]}
       }
     },
      {
        "Sid": "Explicit deny to ensure requests are allowed only from specific referer.",
        "Effect": "Deny",
        "Principal": "*",
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::examplebucket/*",
        "Condition": {
          "StringNotLike": {"aws:Referer": ["http://www.example.com/*","http://example.com/*"]}
        }
      }
   ]
}

使用此设置的先决条件是构建一个S3链接包装服务并将其托管在您应用的某个站点。

答案 1 :(得分:1)

这是使用Pre-signed URL的标准用例。

基本上,当您的应用程序生成包含链接的HTML页面时,它会生成一个包含到期时间的特殊URL。然后它将该URL插入HTML链接代码中(例如,对于图像,您将使用:<img src='[PRE-SIGNED URL]'/>

生成预签名URL的代码非常简单(并且在大多数SDK中提供)。

将您的Amazon S3存储桶保密为私有,以便其他人无法访问该内容。然后,任何拥有有效预签名网址的人都会获得内容。