2010-08-04 137 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:::*" 
    } 
    ] 
}