我最近继承了一个使用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配置
* GET 3000 https://www.appdomain.com PUT POST DELETE *
静态虚拟主机
启用.
我还能做些什么来让公众获得这些资产?
我知道这是一个旧线程,但我刚遇到同样的问题.我让一切都工作了几个月,它突然停止工作,给我一个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
希望有所帮助!
问题是转移是根据这个线程完成的,这本身不是问题.问题来自之前的开发人员在转移之前没有更改文件的权限.这意味着我无法管理任何文件,即使它们在我的桶中.
通过从前一个存储桶中彻底重新下载文件,删除旧的幻像文件,重新上传新文件以及设置其允许公共读取文件的权限来解决问题.
也可能需要根据亚马逊文档设置适当的政策.
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/*" ] } ] }