我写过一篇关于我如何为我创建的开发者招聘网站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 ,如下所示。

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