加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 使用Paperclip和IAM策略将文件上传到Amazon时,

发布时间:2020-12-16 22:33:05 所属栏目:百科 来源:网络整理
导读:我无法使用S3 IAM策略获取使用Paperclip的上传.我甚至有直接的jQuery上传问题(没有Paperclip).我的方案如下,我有一个应用程序将有很多网站.每个网站都有自己的桶,只能访问自己的桶,没有人. IAM Example Policies文档正是在“示例:允许每个IAM用户访问一个文
我无法使用S3 IAM策略获取使用Paperclip的上传.我甚至有直接的jQuery上传问题(没有Paperclip).我的方案如下,我有一个应用程序将有很多网站.每个网站都有自己的桶,只能访问自己的桶,没有人. IAM Example Policies文档正是在“示例:允许每个IAM用户访问一个文件夹中的文件夹”下完全解释了我想要执行的操作.我有一个为应用程序设置的IAM组,并且每个站点内有一个用户.这些IAM用户属于该组.该集团的政策如下:
{
   "Version":"2012-10-17","Statement":[{
         "Effect":"Allow","Action":[
            "s3:PutObject","s3:GetObject","s3:GetObjectVersion","s3:DeleteObject","s3:DeleteObjectVersion"
         ],"Resource":"arn:aws:s3:::my-app/${aws:username}/*"
      }
   ]
}

这里是我的CORS配置在桶上,当然,它会被锁定在以后:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>POST</AllowedMethod>
        <AllowedMethod>PUT</AllowedMethod>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

以下是我的PaperClip设置:

has_attached_file :background_image,storage: :s3,s3_credentials: {
                    access_key_id: "xxx",secret_access_key: "xxx"
                  },bucket: "my-app",s3_permissions: "public-read",path: "/background_images/:id/:filename"

我以前一直在使用直接在桶上的策略,但是当我进入具有许多“站点”的生产环境中时,它正在工作,但没有我需要的那么灵活.据我所知,我完全遵循了这些文件,但我所做的任何事情都导致了“拒绝访问”.在这一点上,我甚至不知道我的问题是我的IAM政策还是我的Paperclip配置.

编辑:澄清.

编辑2:
最终解决方案

这是我最终的基于this article的IAM政策:

{
 "Version":"2012-10-17","Statement": [
   {
     "Sid": "AllowUserToSeeBucketListInTheConsole","Action": ["s3:ListAllMyBuckets","s3:GetBucketLocation"],"Effect": "Allow","Resource": ["arn:aws:s3:::*"]
   },{
     "Sid": "AllowRootAndHomeListingOfCompanyBucket","Action": ["s3:ListBucket"],"Resource": ["arn:aws:s3:::my-app"],"Condition":{"StringEquals":{"s3:prefix":["","home/"],"s3:delimiter":["/"]}}
    },{
     "Sid": "AllowListingOfUserFolder","Resource": ["arn:aws:s3:::estimator-app"],"Condition":{"StringLike":{"s3:prefix":["home/${aws:username}/*"]}}
   },{
     "Sid": "AllowAllS3ActionsInUserFolder","Action": ["s3:*"],"Resource": ["arn:aws:s3:::my-app/home/${aws:username}/*"]
   }
 ]
}

和我更新的纸夹设置:

has_attached_file :background_image,s3_credentials: {
                      access_key_id: "xxx",secret_access_key: "xxx"
                    },bucket: "estimator-app",path: "/home/my_s3_username/background_images/:id/:filename"

将用户名包含在Paperclip路径中很重要.我假设亚马逊会从凭据中推断出,但事实并非如此.

解决方法

因为您正在尝试为上传的对象设置权限,还需要向IAM用户提供s3:PutObjectAcl权限.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读