AWS SDK para Java 1.x ha entrado en modo de mantenimiento el 31 de julio de 2024 y llegará al final de soporte
Administración de permisos de acceso de Amazon S3 para buckets y objetos
Puede utilizar listas de control de acceso (ACL) para los buckets y objetos de Amazon S3 para obtener un control detallado de los recursos de Amazon S3.
nota
En estos ejemplos de código se presupone que conoce la información que se describe en Uso del AWS SDK para Java y que ha configurado credenciales de AWS predeterminadas mediante la información de Configuración de credenciales y regiones de AWS para desarrollo.
Obtener la lista de control de acceso de un bucket
Para obtener la ACL actual de un bucket, llame al método getBucketAcl de AmazonS3, pasando el nombre de bucket que se desea consultar. Este método devuelve un objeto AccessControlList. Para obtener cada concesión de acceso en la lista, llame a su método getGrantsAsList, que devuelve una lista Java estándar de objetos Grant.
Importaciones
import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.AccessControlList; import com.amazonaws.services.s3.model.Grant;
Código de
final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build(); try { AccessControlList acl = s3.getBucketAcl(bucket_name); List<Grant> grants = acl.getGrantsAsList(); for (Grant grant : grants) { System.out.format(" %s: %s\n", grant.getGrantee().getIdentifier(), grant.getPermission().toString()); } } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }
Consulte el ejemplo completo
Establecer la lista de control de acceso de un bucket
Para añadir o modificar permisos de la ACL de un bucket, llame al método setBucketAcl de AmazonS3. Este método toma un objeto AccessControlList que contiene una lista de los destinatarios del acceso y los niveles de acceso que se van a establecer.
Importaciones
import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.AccessControlList; import com.amazonaws.services.s3.model.EmailAddressGrantee;
Código de
final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build(); try { // get the current ACL AccessControlList acl = s3.getBucketAcl(bucket_name); // set access for the grantee EmailAddressGrantee grantee = new EmailAddressGrantee(email); Permission permission = Permission.valueOf(access); acl.grantPermission(grantee, permission); s3.setBucketAcl(bucket_name, acl); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }
nota
Puede proporcionar directamente el identificador único del destinatario del acceso mediante la clase Grantee o puede usar la clase EmailAddressGrantee para definir el destinatario del acceso por correo electrónico, como hemos hecho aquí.
Consulte el ejemplo completo
Obtener la lista de control de acceso de un objeto
Para obtener la ACL actual de un objeto, llame al método getObjectAcl de AmazonS3, pasando el nombre de bucket y el nombre de objeto que se desea consultar. Al igual que getBucketAcl, este método devuelve un objeto AccessControlList, que puede utilizar para examinar cada uno de los objetos Grant.
Importaciones
import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.AccessControlList; import com.amazonaws.services.s3.model.Grant;
Código de
try { AccessControlList acl = s3.getObjectAcl(bucket_name, object_key); List<Grant> grants = acl.getGrantsAsList(); for (Grant grant : grants) { System.out.format(" %s: %s\n", grant.getGrantee().getIdentifier(), grant.getPermission().toString()); } } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }
Consulte el ejemplo completo
Establecer la lista de control de acceso de un objeto
Para añadir o modificar permisos para la ACL de un objeto, llame al método setObjectAcl de AmazonS3. Este método toma un objeto AccessControlList que contiene una lista de los destinatarios del acceso y los niveles de acceso que se van a establecer.
Importaciones
import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.AccessControlList; import com.amazonaws.services.s3.model.EmailAddressGrantee;
Código de
try { // get the current ACL AccessControlList acl = s3.getObjectAcl(bucket_name, object_key); // set access for the grantee EmailAddressGrantee grantee = new EmailAddressGrantee(email); Permission permission = Permission.valueOf(access); acl.grantPermission(grantee, permission); s3.setObjectAcl(bucket_name, object_key, acl); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } }
nota
Puede proporcionar directamente el identificador único del destinatario del acceso mediante la clase Grantee o puede usar la clase EmailAddressGrantee para definir el destinatario del acceso por correo electrónico, como hemos hecho aquí.
Consulte el ejemplo completo
Más información
-
GET Bucket acl en la referencia de la API de Amazon S3
-
PUT Bucket acl en la referencia de la API de Amazon S3
-
GET Object acl en la referencia de la API de Amazon S3
-
PUT Object acl en la referencia de la API de Amazon S3