2010-08-04 10 views
5

Ich habe eine Struktur auf amazon so -Wie definieren Berechtigungen in Amazon S3

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

ich den Schlüssel erstellt haben (allgemein) von S3 Firefox Organizer-Tool und stellen Sie die Leseberechtigung für alle. Nun, durch ein Java-Programm, wenn ich die Bilder innerhalb dieses Schlüssels hochlade, möchte ich die Erlaubnis für jedes Objekt als Schlüssel festlegen. Aber es passiert nicht, und ich muss eine zusätzliche Codezeile schreiben, um die Berechtigungen für jedes Objekt einzurichten.

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

Gibt es eine Möglichkeit, den obigen Code loszuwerden. Warum erhalten die Objekte nicht die Berechtigung als Schlüssel oder Bucket?

Antwort

8

Der folgende Code funktioniert für mich. Ersetzen Sie file_to_save durch das Dateiobjekt, das Sie in S3 schreiben.

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

o.setCannedAcl(CannedAccessControlList.PublicRead); 
+0

Dank, es funktioniert für mich! –

2

Sie können auch versuchen, mithilfe von Bucket-Richtlinien alle Dateien in einem Bucket öffentlich verfügbar zu machen.

Berechtigungen können für eine vorhandene Dateien sowie für alle neuen Dateien angewendet werden. Hier

ist ein Beispiel für Bucket-Richtlinie, die alle Dateien in einem Eimer öffentlich zugänglich macht:

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

Hier ist, wie Bucket-Politik mit S3 Browser Freeware anwenden:
http://s3browser.com/working-with-amazon-s3-bucket-policies.php

0

wenn Sie möchten, Um auf Ihren Bucket mit einer "Browser" -Software wie s3browser, s3fox oder s3 browser für chrome zugreifen zu können, müssen Sie eine Berechtigung für das root Ihres s3 hinzufügen.

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

geben

{ 
    "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:::*" 
    } 
    ] 
}