2010-08-04 25 views
5

tengo una estructura en Amazon como esto -Cómo definir permisos en Amazon S3

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

He creado la clave (general) mediante el uso de herramientas S3 Firefox Organizador y establecer permiso de lectura para todos. Ahora, mediante un programa Java cuando estoy cargando las imágenes dentro de esta clave, quiero establecer el permiso de cada objeto como la clave. Pero no está sucediendo y tengo que escribir una línea adicional de código para configurar los permisos de cada objeto.

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

¿Hay alguna forma de deshacerse del código anterior? ¿Por qué los objetos no están obteniendo el permiso como la clave o el cubo?

Respuesta

8

El siguiente código funciona para mí. Reemplaza file_to_save con el objeto de archivo que estás escribiendo en S3.

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

o.setCannedAcl(CannedAccessControlList.PublicRead); 
+0

Gracias, funciona para mí! –

2

También puede intentar utilizar las políticas de cubo para hacer que todos los archivos dentro de un depósito estén disponibles públicamente.

Los permisos se pueden aplicar a los archivos existentes, así como a todos los archivos nuevos.

Aquí es un ejemplo de política de cubo que hace que todos los archivos en un cubo a disposición del público:

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

Aquí es cómo aplicar mediante la directiva de cubo S3 Browser freeware:
http://s3browser.com/working-with-amazon-s3-bucket-policies.php

0

si quieres para acceder a su cubo con un software de "navegador" como s3browser, s3fox o s3 browser for chrome, necesita agregar un permiso en la raíz de su s3 de esta manera.

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

dando

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