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 错误