Gerenciar permissões de acesso ao Amazon S3 para buckets e objetos - AWS SDK for Java 1.x

O AWS SDK for Java 1.x entrou no modo de manutenção em 31 de julho de 2024 e chegará end-of-supportem 31 de dezembro de 2025. Recomendamos que você migre para o AWS SDK for Java 2.xpara continuar recebendo novos recursos, melhorias de disponibilidade e atualizações de segurança.

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Gerenciar permissões de acesso ao Amazon S3 para buckets e objetos

É possível usar listas de controle de acesso (ACLs) para objetos e buckets do Amazon S3 para controle refinado sobre os recursos do Amazon S3.

nota

Esses exemplos de código pressupõem que você entenda o material em Usar o AWS SDK for Java e tenha configurado credenciais da AWS padrão usando as informações em Configurar credenciais e região da AWS para desenvolvimento.

Obter a lista de controle de acesso para um bucket

Para obter a ACL atual de um bucket, chame o método getBucketAcl do AmazonS3 passando o nome do bucket para consulta. Esse método retorna um objeto AccessControlList. Para obter cada concessão de acesso na lista, chame o método getGrantsAsList, que retornará uma lista de objetos Grant do Java padrão.

Importações

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

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); }

Veja o exemplo completo no GitHub.

Definir a lista de controle de acesso para um bucket

Para adicionar ou modificar permissões para uma ACL de um bucket, chame o método setBucketAcl do AmazonS3. Ele utiliza um objeto AccessControlList que contém uma lista de favorecidos e níveis de acesso a serem definidos.

Importações

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

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

É possível fornecer o identificador exclusivo do favorecido diretamente usando a classe Grantee ou usar a classe EmailAddressGrantee para definir o favorecido por e-mail, como fizemos aqui.

Veja o exemplo completo no GitHub.

Obter a lista de controle de acesso para um objeto

Para obter a ACL atual de um objeto, chame o método getObjectAcl do AmazonS3, passando o nome do bucket e o nome do objeto para consulta. Assim como getBucketAcl, esse método retorna um objeto AccessControlList que você pode usar para examinar cada Grant.

Importações

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

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); }

Veja o exemplo completo no GitHub.

Definir a lista de controle de acesso para um objeto

Para adicionar ou modificar permissões para uma ACL de um objeto, chame o método setObjectAcl do AmazonS3. Ele utiliza um objeto AccessControlList que contém uma lista de favorecidos e níveis de acesso a serem definidos.

Importações

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

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

É possível fornecer o identificador exclusivo do favorecido diretamente usando a classe Grantee ou usar a classe EmailAddressGrantee para definir o favorecido por e-mail, como fizemos aqui.

Veja o exemplo completo no GitHub.

Mais informações