未显示Amazon S3图片 - 已禁用对此对象的所有访问权限

时间:2016-09-15 22:49:04

标签: image amazon-s3 ruby-on-rails-5

我是AWS新手,所以我确定我只是错过了某个地方的设置。目前我已经直接上传到我的Rails应用程序上的S3设置,这是有效的。当我将图像上传到我的应用程序时JS触发,我已经克服了CORS问题,图像出现在我的S3控制台中。耶。

问题是当我尝试查看图像时。当我转到生成的图像url(由S3返回,并由控制台中的树结构确认)时,我收到403 HTTP响应和有趣的XML错误(我查找并且只发现与InvalidPayer关联,除了here)之外,我找不到任何引用:

<Error>
    <Code>AllAccessDisabled</Code>
    <Message>All access to this object has been disabled</Message>
    <RequestId>DF2E5FCE3EF9A8A9</RequestId>
    <HostId>
BRqoJ5qxtYfe4ykFCxJftgghNbHvmp/hZQggrLszOwxz2oCje8gCLmZFex0Zebu8k/O+1cSJyic=
    </HostId>
</Error>

为所有人带来乐趣!我一直在环顾四周,我发现我可能需要为我的IAM用户设置权限,以及设置存储桶权限以便其他人可以访问图像。所以我已经使用了我的用户的IAM权限并添加了AmazonS3FullAccess,这似乎是最明显和最全面的选择。此外,我去我的桶为其他人设置权限并指定以下内容:

{
    "Id": "PolicyIdHere",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "StmtIdHere",
            "Action": [
                "s3:GetObject"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::my-bucket-name/*",
            "Principal": "*"
        }
    ]
}

PS,该桶设置是由AWS使用他们的policy generator生成的,所以我怀疑它没有错,或者我错过了一个微妙的。

我想如果我考虑一下,似乎我已经设置了我可能需要的所有权限来获取视图图像我自己,但也许还有其他设置需要配置为允许任何拥有正确S3 URL的人查看图片吗?

提前感谢任何建议。

1 个答案:

答案 0 :(得分:7)

捂脸

我今天早上看到这个新鲜事后,我刚才注意到的另一个经典应该是明显的答案。 A)你确实需要做我提到的事情...... CORS设置(如果你使用JS直接上传到S3而不是使用你的应用程序来做),IAM用户设置和存储桶权限都需要正确配置。但是:B)你必须正确构建URL,呃。 S3正在返回存储桶和路径,但不是基本URL。所以我要s3.amazonaws.com/path-to-asset,而不是s3.amazonaws.com/bucket-name/path-to-asset,这显然是关键。

雅&#39;住和你&#39;学习。