IMG 标签采购 AWS S3 失败 - CORB?

Posted

技术标签:

【中文标题】IMG 标签采购 AWS S3 失败 - CORB?【英文标题】:IMG tag sourcing AWS S3 fails - CORB? 【发布时间】:2020-06-10 11:03:33 【问题描述】:

我想在 AWS 存储桶上托管 Web 项目的图像,然后在呈现 html 时动态拉取它们。这给我带来的麻烦比我预期的要多。

这是有问题的标签:

<img src="https://s3.us-east-2.amazonaws.com/ibidnyc/Summer Smith/VERBAL/subsections/Summer-Smith-VERBAL-subtopic-POETRY-fig.jpg" alt="">

当我这样做时,我收到一个跨域读取阻止 (CORB) 错误(在检查器中;我正在运行 Chrome) - 显然,Chrome 在某些情况下会阻止链接到其他网站上的 img 源?粗略的搜索把我带到了这里 (zyst.io/how-to-fix-aws-s3-chrome-and-safari-cors-on-images),但我不知道如何应用它。此外,这篇文章针对的是 CORS,而不是 CORB(我认为它是更新的?)。

【问题讨论】:

对于初学者来说,这是您存储桶的错误 URL。接下来,它是无效的......你不能在里面有空格。请改用%20。最后,该资源要么不存在,要么公众无法访问。 我有类似的问题,但我使用 Storj 作为我的对象存储。我分享了我的 标签的链接,但它不起作用。我刚收到 CORB 问题。 【参考方案1】:

Here's a good *** post relating to CORB.

具体来说,这是我认为可能有帮助的部分:

在大多数情况下,被阻止的响应不应影响网页的行为,并且可以安全地忽略 CORB 错误消息。例如,当被阻止的响应的主体已经为空时,或者当响应将被传递到无法处理它的上下文(例如,HTML 文档,如 404 错误页面)时,可能会出现警告被传递到<img> 标签)。

https://www.chromium.org/Home/chromium-security/corb-for-developers

尝试清除缓存并确保从该 AWS 链接返回的数据确实是图像而不是其他类型的数据。当我在浏览器中打开该 AWS 链接时,我得到一个 XML 错误页面,而不是图像:

<Error>
    <Code>PermanentRedirect</Code>
    <Message>
       The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.
    </Message>
    <Endpoint>s3.amazonaws.com</Endpoint>
    <Bucket>ibidnyc</Bucket>
    <RequestId>FF65E772274735DF</RequestId>
    <HostId>
        VW+SBil/6NVWG5lx0F1XmWSDJLTjwaTHbBPoVQQlDNV+71NY4eDQLJraGtM+pBSyjas3ByFKIis=
    </HostId>
</Error>

在研究那个 XML 错误时,我发现这个存储桶很可能是在不同的区域创建的,即不是 us-east-2。这是我唯一一次看到这个端点错误。

美国标准是 us-east-1

将您的 URL 更改为 us-east-1 后,我现在收到 AccessDenied 错误,因此我假设已找到该图像并且您将能够访问它。

<Error>
    <Code>AccessDenied</Code>
    <Message>Access Denied</Message>
    <RequestId>19E4B33430F54214</RequestId>
    <HostId>
        MF/m6yUhslgB3aB3ddoqnKwRAeABQq17wkaIqX09hwrvaZ+jPm8oIEVAY9HQpG5MShOp1Jf/HIg=
    </HostId>
</Error>

【讨论】:

【参考方案2】:

事实证明@Brad 是对的。虽然我已将存储桶实例化为公开的,但上传到该存储桶的单个图像仍然是私有的。

将存储桶策略更改为这个就可以了(感谢h3xed.com!):


  "Version": "2012-10-17",
  "Statement": [
    
      "Sid": "PublicReadGetObject",
      "Action": "s3:GetObject",
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::[bucket_name_here]/*",
      "Principal": "*"
    
  ]

Bucket policy editing explained here.

感谢所有贡献者!

【讨论】:

以上是关于IMG 标签采购 AWS S3 失败 - CORB?的主要内容,如果未能解决你的问题,请参考以下文章

从 AWS Redshift 到 S3 的 AWS Glue ETL 作业失败

Aws S3按标签过滤。按标签搜索

AWS - Cloudfront、S3 和 W3TotalCache 的 CORS 标头失败

从 AWS S3 转移到 Google-Cloud-Storage “未知”失败

通过 Java 下载 AWS S3 文件。身份验证调用失败

(iOS) AWS S3 上传失败且没有错误(使用联合身份验证的用户 - Apple SSO)