2013-10-17 75 views
6

我试图上传到S3,当我看到日志从S3存储桶记录这就是它说:拒绝访问上传到S3

mybucket-me [17/Oct/2013:08:18:57 +0000] 120.28.112.39 
arn:aws:sts::778671367984:federated-user/[email protected] BB3AA9C408C0D26F 
REST.POST.BUCKET avatars/dean%2540player.com/4.png "POST/HTTP/1.1" 403 
AccessDenied 231 - 132 - "http://localhost:8080/ajaxupload/test.html" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17" - 

我被拒绝访问。从它指向的位置我想我错过的唯一的东西是添加存储桶策略。所以在这里。

使用我的电子邮件我可以登录到我的应用程序并上传头像。我想放置我的头像的存储桶名称是mybucket-me,并且它有一个名为avatars的子存储桶。

-mybucket-me 
-avatars 
    [email protected] //dynamic based on who are logged in 
    -myavatar.png //image uploaded 

如何添加一个水桶政策,所以我可以授予联合比如我在S3上传什么是正确的说法,我会加上我的桶的政策,因此它可以给予我有权上传到我们的存储桶中?

回答

3

您可以将以下策略来斗:

{ 
    "Version": "2008-10-17", 
    "Id": "Policy1358656005371", 
    "Statement": [ 
     { 
      "Sid": "Stmt1354655992561", 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": [ 
        "arn:aws:sts::778671367984:federated-user/[email protected]"     
       ] 
      }, 
      "Action": [ 
       "s3:List*", 
       "s3:Get*" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::my.bucket", 
       "arn:aws:s3:::my.bucket/*" 
      ] 
     } 
    ] 
} 

授予联盟用户[email protected]只读权限为“my.bucket”。

该政策不是很好维护,因为它特别命名这个用户。要以更具扩展性的方式仅允许某些联邦用户访问,最好在调用GetFederationToken时执行此操作。如果您发布STS代码,我可以帮助您在那里分配政策,但它与上述非常相似。

+0

喜,遗憾的响应晚。我使用s3浏览器上传,我们有一个我们称之为API的API,它给我们提供了证书。这里是几乎所有相关代码都发布的链接。 [链接](http://stackoverflow.com/questions/19401936/signaturedoesnotmatch-browser-based-upload-to-s3?noredirect=1#comment28781719_19401936) –

+0

这是行不通的行动只是“列表和获取”?我试图做的是上传或张贴方法。另外您的正确我需要的是可扩展的方式,不同的用户将上传到存储桶中。请帮忙。 –

+0

您需要将操作更改为任何您需要的操作,只需“s3:*”即可访问所有S3操作。 您使用哪种语言?发布你到目前为止的代码 – prestomation

1

要上传到S3斗,你需要添加/创建IAM /组策略,例如:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Action": ["s3:ListBucket"], 
     "Resource": ["arn:aws:s3:::test"] 
    }, 
    { 
     "Effect": "Allow", 
     "Action": [ 
     "s3:PutObject", 
     "s3:GetObject", 
     "s3:DeleteObject" 
     ], 
     "Resource": ["arn:aws:s3:::test/*"] 
    } 
    ] 
} 

哪里arn:aws:s3:::test是你的亚马逊资源名称(ARN)。

来源:Writing IAM Policies: How to Grant Access to an Amazon S3 Bucket

相关: