如何使你的S3存储桶公开

611 阅读1分钟

我写过一篇关于我如何为我创建的开发者招聘网站DEVJOBS设置S3上传的文章。

当我准备好S3桶,图片被上传,然后URL被存储在我的数据库中后,我意识到图片在读取模式下不能公开访问。

图片就在那里,但任何人都无法看到。

如果我试图访问它,我所得到的是这样的结果

<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>E5FBYNEYEFNZH</RequestId>
<HostId>
iImqC8XkvmPP4/BJxNGDZrPrDr7us1u3UeZqH8prlv3dk69R9m7uOaaaZDvTLAtne2rLkRWZ4=
</HostId>
</Error>

好吧,我想,这是个权限问题。

因此,我首先尝试编辑 "阻止公众访问 "的设置,禁用我的那个块。

但这并不奏效。图像仍然无法访问。

所以我去把Everyone (public access) 设置为Read 在一个单一的文件权限。

而这对单个文件来说是有效的。

于是,我又去了一般的Bucket权限,它有一个类似ACL权限的面板,来设置同样的东西。

我把Everyone (public access) 设置为Read ,但没有达到预期效果。

人们不能公开看到这些文件,尽管我明确地设置了它。

结果发现没有办法通过点击来实现这一点。

我不得不设置一个Bucket Policy,这可以从Bucket权限页面完成,我添加了这个。

{
  "Version": "2008-10-17",
  "Statement": [
    {
      "Sid": "AllowPublicRead",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::YOURBUCKETNAME/*"
    }
  ]
}

将YOURBUCKETNAME改为你的水桶名称

这样就成功了。一旦你添加了这个,你就可以设置Block public access ,如下所示。

就这样了。现在,我的文件(在我的例子中是图像)可以从公众那里访问。