Amazon S3 中的 403 禁止问题

Posted

技术标签:

【中文标题】Amazon S3 中的 403 禁止问题【英文标题】:403 Forbidden Issue in Amazon S3 【发布时间】:2012-02-28 20:39:19 【问题描述】:

我正在使用 Amazon S3 来托管用户的图像。尽管我将它们全部设置为公开可用(这意味着我可以通过它们在 Chrome/Firefox/IE 中的 URL 访问图像),但我的代码中出现了 403 Forbidden 异常。它是一个缩略图处理程序(C#、ASP.NET)

string file = context.Request.QueryString[IMG_PARAM].Trim().ToLower().Replace("\\", "/");

      if (file.StartsWith("http") || file.StartsWith("https"))
      
          using (System.Drawing.Image im = System.Drawing.Image.FromStream(WebRequest.Create(file).GetResponse().GetResponseStream()))
          using (System.Drawing.Image tn = this.CreateThumbnail(im))
          
              tn.Save(context.Response.OutputStream, this._formatType);
          
      

异常来自这部分:

WebRequest.Create(file).GetResponse().GetResponseStream()

我真的很奇怪,如果ACL或权限有问题,为什么我可以用浏览器看到图像?任何帮助,将不胜感激。

【问题讨论】:

【参考方案1】:

找到了!经过长时间的研究,我发现这是因为 URL 字符串区分大小写。原来我在某处有一个 .toLower():

string file = context.Request.QueryString[IMG_PARAM].Trim().ToLower().Replace("\\", "/");

删除 .toLower() 后问题就解决了。

【讨论】:

【参考方案2】:

我发现如果您使用 CNAME 访问您的 Cloudfront CDN 资源,但不要将这些 CNAMES 添加到 AWS 管理控制台中的分发设置,您也会收到此错误。

EG:

cdn.yourdomain.com/js/your_script.js
rather than:
abc12345.cloudfront.net/js/your_script.js

【讨论】:

【参考方案3】:

我也有同样的问题。如果您在配置 Cloudfront 分发时未指定 root file 选项,也会发生这种情况。

当我将根文件设置为 index.html 时,一切正常。

【讨论】:

以上是关于Amazon S3 中的 403 禁止问题的主要内容,如果未能解决你的问题,请参考以下文章

Amazon S3 crossdomain.xml 始终显示 403 Forbidden

运行 Amazon S3 示例时出现 Amazon AWS 403 InvalidAccesskey 错误

S3ResponseError: 403 禁止

Amazon S3 - 如何自动公开文件夹的新内容

Amazon S3 - 尽管有 GetObject 限制,但返回 403 错误而不是 404

AWS S3 Java:d​​oesObjectExist 导致 403:禁止