我已经开始使用S3来托管连接到Rails模型的图像。用户不上传图像,因此我只使用aws_sdk gem将图像存储到S3存储桶中。
到目前为止,我已经成功存储了图像,但我对这个权限感到困惑。也许我错了,但似乎大多数谈论S3许可的文件已经过时,我找不到他们所指的内容。
我想要做的是非常基本的。我只是想托管图像,图像本身是公开的,所以任何人都可以查看。但是我不希望任何人只是访问我的存储桶并查看其中包含的所有其他内容。所以基本上它只是一个在S3上托管图像的普通网络应用程序。如何以及在何处更改权限设置以使其以这种方式工作?目前,访问权限仅授予我自己,并且通过在浏览器中键入网址无法查看图像。
答案 0 :(得分:2)
查看文档,更具体地说是S3Objects写入方法:Class: AWS::S3::S3Object,它允许您为上传的文件设置一堆选项。
上传到S3存储桶时,您已设置了正确的:acl
权限,因为它的默认值为:private
,并且未授予任何公共访问权限。这是我从github抓取的修改后的代码段:
# get an instance of the S3 interface using the default configuration
s3 = AWS::S3.new
# create a bucket
b = s3.buckets.create('example')
# upload a file
basename = File.basename('image.png')
o = b.objects[basename]
o.write(:file => file_name, :acl => :public_read)
# grab public url
image_public_url = o.public_url
...
答案 1 :(得分:2)
回答我自己的问题: 它似乎并不像设置“公共”那样简单,并期望一切都能发挥作用。基本上,如果您希望公众可以查看您的存储桶,则需要编写策略并将其应用于存储桶。
以下是您可以制定政策的页面:http://awspolicygen.s3.amazonaws.com/policygen.html