Amazon S3 图像未显示 - 已禁用对该对象的所有访问

Amazon S3 Images not showing - All access to this object has been disabled

我是 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 的人查看图像?

提前感谢您的任何建议。

捂脸

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

你生活,你学习。