Administración de permisos de acceso de Amazon S3 para buckets y objetos - AWS SDK para Java 1.x

AWS SDK para Java 1.x ha entrado en modo de mantenimiento el 31 de julio de 2024 y llegará al final de soporte el 31 de diciembre de 2025. Le recomendamos que migre a AWS SDK for Java 2.x para seguir recibiendo nuevas características, mejoras de disponibilidad y actualizaciones de seguridad.

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 en GitHub.

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 en GitHub.

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 en GitHub.

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 en GitHub.

Más información