如何撤销Amazon S3存储桶中的公共权限

如何撤销Amazon S3存储桶中的公共权限

问题描述:

我创建了Amazon S3存储桶以仅存储来自我的网站的图像。我有超过100万的图片全部都有公共阅读权限。每次我做一个登录,亚马逊给了我这样的警告:如何撤销Amazon S3存储桶中的公共权限

这桶有你提供了这个水桶公共接入公共接入 我们强烈建议您从来没有授予任何形式的公共访问您的S3桶。

我用下面的水桶政策只允许显示只是在我的网站上的图片:

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

如何撤销对存储桶和我的文件的公共访问权限并将其仅授予我的网站?

谢谢!

这是一个可怕的警告,旨在防止人们无意中泄露数据。最近有很多案例关于公司意外设置允许公开阅读的权限。

在你的情况下,你真的希望这些公开可读,所以你可以忽略这个警告。您的安全政策看起来很好,并仍与公共托管的文档相匹配。

理论上你就可以把这些图片背后的他们流给用户,如果你真的不希望有人能够将其直接下载另一台服务器。尽管如此,这确实不是更安全。

如果你不想让这些公开可用,只要从你的桶中删除这个策略。在这种情况下,您的网站将无法提供图片。

+1

谢谢您的解释!我删除了该策略,并且这些图片仍然有效,因为我使用公开阅读功能上传了这些策略。但考虑到我有超过100万的图片,不可能更改所有权限......谢谢! – Andre

+1

@Andre这就是为什么它不仅是你的水桶政策是否允许你期待什么,也无论它拒绝你不要指望有什么测试是非常重要的。通过对对象进行“公开阅读”,上述政策实际上并没有做任何事情。如果你仍然希望被引用者拒绝,你可以创建'拒绝'策略测试'StringNotLikeIfExists'这个'aws:referer'条件键,但要小心,因为如果你不这样做,控制台和其他内部机制的访问可能会被拒绝提供必要的匹配条件以防止此政策拒绝他们。 –

你的政策看起来不错。您正在提供更高级别的安全性,然后只是通过referer头部公开并且不允许列出对象。

使用S3来提供常见的文件,如CSS,JS和Images,非常简单。但是,对于所有意外的安全问题,我通常会推荐以下方法之一:

  1. 打开存储桶的静态网站托管。这使得未来的管理员非常清楚这个存储桶是用于公共文件的。我也没有看到这些桶的大警告信息。启用重定向请求。
  2. 更好的是,关闭所有公共访问权限并使用CloudFront。启用原始访问身份。您会收到CloudFront的的所有优点,更严格的安全等

Using an Origin Access Identity to Restrict Access to Your Amazon S3 Content

+0

好的建议。请注意对另一个答案的评论,这些对象也是'public-read',因此所显示的存储桶策略目前没有任何操作。此外,要使用CloudFront干净地使用引用过滤器有点麻烦,需要Lambda @ Edge Viewer请求触发器检查和拒绝或将引用者转发到存储区,该存储区仅适用于静态网站端点,而不适用于REST(因此不适用OAI),如果您的资产被多个引用页面引用,则后一解决方案会对缓存命中产生负面影响。 –