4

我已经开始使用 S3 来托管连接到 Rails 模型的图像。图像不是由用户上传的,所以我只是使用 aws_sdk gem 将图像存储到 S3 存储桶。

到目前为止,我已经成功存储了图像,但我对权限感到困惑。也许我错了,但似乎大多数关于 S3 权限的文档都已过时,我找不到它们所指的内容。

我想做的是非常基本的。我只想托管图像,图像本身是公开的,因此任何人都可以查看。但是,我不希望任何人只访问我的存储桶并查看那里托管的所有其他内容。所以基本上它只是一个在 S3 上托管图像的普通 Web 应用程序。我如何以及在哪里可以更改权限设置以使其以这种方式工作?目前,访问权限仅授予我自己,并且无法通过在浏览器中键入 url 来查看图像。

4

3 回答 3

3

回答我自己的问题:似乎这并不像将某些东西设置为“公共”并期望一切正常那么简单。基本上,如果您希望您的存储桶可供公众查看,您需要编写一个策略并将其应用于存储桶。

这是您可以构建策略的页面:http: //awspolicygen.s3.amazonaws.com/policygen.html

于 2012-06-19T16:50:05.557 回答
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

...
于 2012-06-19T07:20:39.523 回答
0

对于正在寻找有关如何编写允许任何人访问 s3 存储桶的策略的更具体信息的人,这可能会有所帮助。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicRead",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
            ]
        }
    ]
}

这个和其他例子,在下面的链接。

https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html#example-bucket-policies-use-case-2

如果您仍有问题,请检查您的阻止设置。

于 2022-02-21T23:37:31.930 回答