用于托管 Web 应用程序公共图像的 S3 权限

Vla*_*lad 6 amazon-s3 amazon-web-services

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

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

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

小智 7

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

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

这个以及其他示例,请参见下面的链接。

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

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


Vla*_*lad 4

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

您可以在以下页面构建策略:http://awspolicygen.s3.amazonaws.com/policygen.html