禁止使用 s3 通过 Cloudfront 提供的字体

Posted

技术标签:

【中文标题】禁止使用 s3 通过 Cloudfront 提供的字体【英文标题】:Fonts served over Cloudfront from s3 are forbidden 【发布时间】:2013-05-09 10:46:47 【问题描述】:

我正在使用 Cloudfront 来提供存储在 s3 中的资产。大多数文件都可以正常工作,但有些文件不能,特别是我的字体。

我完全不知道为什么:

https://xxxxxx.cloudfront.net/assets/application-xxxxxxx.js

返回很好,但是

https://xxxxxx.cloudfront.net/assets/fontawesome-webfont.woff?v=3.1.0

返回:

<Error>
  <Code>AccessDenied</Code>
  <Message>Access Denied</Message>
  <RequestId>xxxxxx</RequestId>
  <HostId>xxxxxx</HostId>
</Error>

有人知道这是为什么吗?我怀疑它与 CORS 有关,但我使用的是指定的 CORS in this answer。并且该请求在所有浏览器上都被禁止返回,而不仅仅是 Firefox。

任何帮助将不胜感激。

【问题讨论】:

听起来有些文件不公开。 我也是这么想的,但是所有其他文件都有类似的权限,包括这个。每个人的权限包括打开/下载。不过感谢您的回复。 @rurabe 你让它工作了吗?我在使用 Firefox 时遇到了这个问题,字体无法与 S3 或 cloudfront 一起使用 【参考方案1】:

修复您的 S3 权限后,您需要使 CloudFront 的来自该 URL 的错误消息缓存无效。

或等待 24 小时。随便哪一个。

【讨论】:

我也希望是这样,但 24 小时后仍然无法正常工作。不过还是谢谢...【参考方案2】:

当您使缓存失效时,您不能只更新资产。我必须创建一个全新的云端分发包。

我建议这样做。创建一个新的云端资产包,将您的服务器指向它并删除旧的。

【讨论】:

以上是关于禁止使用 s3 通过 Cloudfront 提供的字体的主要内容,如果未能解决你的问题,请参考以下文章

Cloudfront 提供通过 AWS CDK Python 为 S3 存储桶来源创建的访问被拒绝响应,无需公共访问

如何将 CloudFront 和 S3 与备用域一起使用?

向客户端提供带有 Cloudfront 内容的 S3

AWS Cloudfront 备用域名 403 被禁止

在 S3 和 cloudfront 上使用 rails carrierwave 私有文件

S3/CloudFront,使用标题“Cache-Control: max-age=365000000, immutable”提供所有文件