我无法使用S3 IAM策略获取使用Paperclip的上传.我甚至有直接的jQuery上传问题(没有Paperclip).我的方案如下,我有一个应用程序将有很多网站.每个网站都有自己的桶,只能访问自己的桶,没有人.
IAM Example Policies文档正是在“示例:允许每个IAM用户访问一个文件夹中的文件夹”下完全解释了我想要执行的操作.我有一个为应用程序设置的IAM组,并且每个站点内有一个用户.这些IAM用户属于该组.该集团的政策如下:
最终解决方案 @H_404_4@这是我最终的基于this article的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}/*" } ] }@H_404_4@这里是我的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>@H_404_4@以下是我的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"@H_404_4@我以前一直在使用直接在桶上的策略,但是当我进入具有许多“站点”的生产环境中时,它正在工作,但没有我需要的那么灵活.据我所知,我完全遵循了这些文件,但我所做的任何事情都导致了“拒绝访问”.在这一点上,我甚至不知道我的问题是我的IAM政策还是我的Paperclip配置. @H_404_4@编辑:澄清. @H_404_4@编辑2:
最终解决方案 @H_404_4@这是我最终的基于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}/*"] } ] }@H_404_4@和我更新的纸夹设置:
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"@H_404_4@将用户名包含在Paperclip路径中很重要.我假设亚马逊会从凭据中推断出,但事实并非如此.