我最近继承了一个使用S3存储资产的Rails应用程序。我已将所有资产转移到我的S3存储桶,没有任何问题。但是,当我将应用程序更改为指向新存储桶时,我获得403 Forbidden Status。
我的S3存储桶设置了以下设置:
权限
每个人都可以列出
广告管理政策
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::bucketname/*"
}
]
}
CORS配置
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
</CORSRule>
<CORSRule>
<AllowedOrigin>https://www.appdomain.com</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
静态虚拟主机
开。
我还能做些什么才能让公众获得这些资产?
答案 0 :(得分:26)
问题在于转移是根据this thread完成的,这本身不是问题。问题来自之前的开发人员在转移之前没有更改文件的权限。这意味着我无法管理任何文件,即使它们在我的文件夹中。
通过从上一个存储桶中彻底重新下载文件,删除旧的幻像文件,重新上传新文件以及设置其允许公开阅读文件的权限来解决问题。
答案 1 :(得分:25)
我知道这是一个旧线程,但我遇到了同样的问题。我让一切都工作了几个月,它突然停止工作,给我一个403 Forbidden
错误。事实证明,系统时钟是真正的罪魁祸首。我认为s3使用某种基于时间的令牌,它具有非常短的寿命。在我的情况下,我刚刚跑了:
ntpdate pool.ntp.org
问题消失了。如果它有任何相关性,我正在运行CentOS 6
。这是样本输出:
19 Aug 20:57:15 ntpdate[63275]: step time server ip_address offset 438.080758 sec
希望有所帮助!
答案 2 :(得分:11)
也可能需要根据亚马逊文档设置适当的政策。
http://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteAccessPermissionsReqd.html
对此政策提出疑问
{
"Version":"2012-10-17",
"Statement":[{
"Sid":"PublicReadGetObject",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::YOUR-BUCKET-NAME/*"
]
}
]
}
答案 3 :(得分:1)
这是我用来使S3存储桶中的index.html文件可从互联网访问的存储桶策略:
我还需要转到权限->“阻止公共访问”,并删除存储桶的阻止公共访问规则。像这样:
答案 4 :(得分:0)
对我来说,没有其他答案有效。文件权限,存储桶策略和时钟都很好。对我来说,这个问题是断断续续的,虽然听起来有些陈词滥调,但以下两种方法以前都对我有用:
答案 5 :(得分:0)
在设置了正确的权限后,为我解决了一个奇怪的事情,就是我从文件名中删除了扩展名。因此,我在存储桶中有很多项目都具有相同的权限,有的工作可以找到,有的返回了403。唯一的区别是那些不工作的项目在文件名末尾有.png
。当我删除它们时,它们工作正常。不知道为什么。
答案 6 :(得分:0)
在我的iPhone应用程序中,我发现了同样的问题。在具有相同配置和S3设置的Android上,它可以正常工作,但iPhone应用程序抛出错误。在检查了他们的日志后,我就此问题联系了Amazon支持团队。他们告诉我您的iPhone有日期和时间。然后我转到iPhone的设置,并调整了正确的日期和时间。然后,我尝试上传新图像,它按预期工作。
如果您遇到相同的问题,但您的iPhone或模拟器中的日期或时间有误;这可能会对您有所帮助。
谢谢!
答案 7 :(得分:0)
答案 8 :(得分:0)
确保您使用正确的 AWS 配置文件!!!! (开发\生产等...)
答案 9 :(得分:-1)
在策略存储区资源末尾添加*时,我遇到了同样的问题
{
"Version":"2012-10-17",
"Statement":[{
"Sid":"PublicReadGetObject",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::example-bucket/*"
]
}
]
}