2010-08-04 140 views
5

我有这样的亚马逊的结构 -如何定义权限的Amazon S3

(bucket name) MyImages 
    --- (key) general 
     ---- 1.jpg 
     ---- 2.jpg 

我以S3火狐管理工具创建的键(一般),并设置读取权限所有。现在,通过一个java程序,当我在这个密钥中上传图像时,我想要设置每个对象的权限作为密钥。但它没有发生,我必须写一些额外的代码行来设置每个对象的权限。

AccessControlList acl = s3.getBucketAcl("MyImages"); 
// give everyone read access 
acl.grantPermission(GroupGrantee.AllUsers, Permission.Read); 
s3.setObjectAcl("MyImages", "general/1.jpg", acl); 

有什么办法摆脱上面的代码。为什么这些对象没有获得作为密钥或桶的权限?

回答

8

以下代码适用于我。用您正在写入S3的文件对象替换file_to_save。

PutObjectRequest por = new PutObjectRequest("MyImages", "general/1.jpg", file_to_save); 

o.setCannedAcl(CannedAccessControlList.PublicRead); 
+0

谢谢,这对我的作品! – 2011-09-13 07:09:49

2

您也可以尝试使用存储桶策略使存储桶中的所有文件公开可用。

权限可以应用于现有文件以及所有新文件。

这里是使桶中的所有文件公开可用的桶政策的一个例子:

{ 
    "Version": "2008-10-17", 
    "Statement": [ 
    { 
     "Sid": "AllowPublicRead", 
     "Effect": "Allow", 
     "Principal": { 
     "AWS": "*" 
     }, 
     "Action": "s3:GetObject", 
     "Resource": "arn:aws:s3:::your-bucket-name/*" 
    } 
    ] 
} 

这里是如何应用桶政策使用S3浏览器软件:
http://s3browser.com/working-with-amazon-s3-bucket-policies.php

0

,如果你想要使用诸如s3browser,s3fox或s3浏览器之类的“浏览器”软件访问您的存储桶,您需要在s3的根目录中添加权限。

{ 
      "Effect": "Allow", 
      "Action": "s3:ListAllMyBuckets", 
      "Resource": "arn:aws:s3:::*" 
    } 

{ 
    "Version": "2008-10-17", 
    "Statement": [ 
    {  
     "Sid": "AllowPublicRead", 
     "Effect": "Allow", 
     "Principal": { 
     "AWS": "*" 
     }, 
     "Action": "s3:GetObject", 
     "Resource": "arn:aws:s3:::your-bucket-name/*" 
    }, 
    { 
     "Effect": "Allow", 
     "Action": "s3:ListAllMyBuckets", 
     "Resource": "arn:aws:s3:::*" 
    } 
    ] 
}