ruby-on-rails – 403使用s3cmd工具上传到Amazon S3的Paperclip
我最近使用
s3cmd tool从本地存储移动了超过一千个Paperlclip附件到Amazon S3.您可以找到有关我如何完成此
here的详细信息,但总而言之,我使用以下命令迁移所有旧附件.
s3cmd sync my-app/public/system/ s3://mybucket 我更新了我的代码库以使用新的S3存储桶,我已经测试了连接,一切正常.事实上,我可以通过我的应用程序将新附件上传到远程S3存储桶并查看/下载它们没问题.然而,似乎某些地方Paperclip和S3彼此不同步,我移动到我的s3桶的所有附件(在下图中模糊)返回403s,如果我尝试通过我访问它们应用.但是上传到同一个存储桶的新附件都可以正常加载. 我有一个具有以下配置的IAM组设置: { "Version": "2012-10-17","Statement": [ { "Effect": "Allow","Action": "s3:*","Resource": "arn:aws:s3:::mybucket/*" } ] } 从我可以上传新的附件到S3的事实来看,我会说连接建立得很好.我相信我设置s3cmd通过不同的IAM用户帐户连接到我的存储桶,而不是通过我的应用程序访问存储桶的用户帐户.它可能是一个许可问题吗?如果是这样,我可以以任何方式更改上述权限以授予对这些文件的访问权限吗? 我正在使用aws-sdk将回形针与S3集成在一起. 编辑: EDIT2: > s3 = AWS::S3.new => <AWS::S3> > bucket = s3.buckets['mybucket'] => #<AWS::S3::Bucket:mybucket> > bucket.exists? => true > image = bucket.objects["SomeFolder/SomeImage.jpg"] => <AWS::S3::S3Object:SomeFolder/SomeImage.jpg> > puts image.read => ????^?D????????=m??????f ... machine code 解决方法
看起来您的S3存储桶策略不允许公共用户正确进行公共读取访问.尝试以下方法:
{ "Version": "2008-10-17","Statement": [ { "Sid": "AllowPublicRead","Effect": "Allow","Principal": { "AWS": "*" },"Action": [ "s3:GetObject" ],"Resource": [ "arn:aws:s3:::my-brand-new-bucket/*" ] } ] } 当您手动应用公共读取权限时,您能够以公共用户身份访问这些文件,这一事实可确认您的存储桶策略未正确授予读取权限. 使用公共S3 URL访问文件时,没有经过身份验证的用户. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |