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

标签 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 的人查看图像图片?

提前感谢您的任何建议。

最佳答案

面掌

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

你生活和学习。

关于image - 未显示 Amazon S3 图像 - 已禁用对此对象的所有访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39521458/

相关文章:

ruby-on-rails - Ruby on Rails,如何制作图像标签

html - 我可以包装 img alt 文本吗?

amazon-web-services - 通过 Spark DataFrame 读取 S3 文件时,Glue 书签不起作用

php - aws s3 sdk php 在 getObjects 时遇到永久重定向

ruby-on-rails - 带有复选框数组的 Rails 5 form_for

ruby-on-rails - Rails 验证错误消息 : Add response code to default validators

image - 使用 express.js 和 node 上传文件,限制扩展名

android - 获取从android中的图库中选择的图像的图像名称

ios - NSURLSession backgroundSession 完成时额外的 API 调用

ruby-on-rails - 如何在 Ruby on Rails 中查找时区中两个日期之间的剩余时间?