2010-08-04 5 views
5

J'ai une structure sur amazon comme celui-ci -Comment définir les autorisations dans Amazon s3

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

J'ai créé la clé (général) en utilisant S3 Firefox outil Organisateur et définir l'autorisation de lecture pour tous. Maintenant, par un programme Java lorsque je télécharge les images à l'intérieur de cette clé, je veux définir la permission de chaque objet comme la clé. Mais cela n'arrive pas et je dois écrire une ligne de code supplémentaire pour configurer les permissions de chaque objet.

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

Y at-il un moyen de se débarrasser du code ci-dessus. Pourquoi les objets n'obtiennent pas l'autorisation en tant que clé ou compartiment?

Répondre

8

Le code suivant fonctionne pour moi. Remplacez file_to_save par l'objet fichier que vous écrivez à S3.

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

o.setCannedAcl(CannedAccessControlList.PublicRead); 
+0

Merci, ça marche pour moi! –

2

Vous pouvez également essayer d'utiliser les stratégies de compartiment pour rendre tous les fichiers d'un compartiment accessibles au public.

Des autorisations peuvent être appliquées pour des fichiers existants ainsi que pour tous les nouveaux fichiers.

Voici un exemple de politique Bucket qui fait tous les fichiers dans un seau public:

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

Voici comment appliquer une stratégie de seau à l'aide S3 Browser Freeware:
http://s3browser.com/working-with-amazon-s3-bucket-policies.php

0

si vous voulez pour accéder à votre seau avec un logiciel "navigateur" comme s3browser, s3fox ou s3 navigateur pour chrome, vous devez ajouter une permission sur la racine de votre s3 comme ceci.

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

donnant

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