O AWS SDK for Java 1.x entrou no modo de manutenção em 31 de julho de 2024 e chegará end-of-support
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
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
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
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
Mais informações
-
GET Bucket acl na Referência de API do Amazon S3
-
PUT Bucket acl na Referência de API do Amazon S3
-
GET Object acl na Referência de API do Amazon S3
-
PUT Object acl na Referência de API do Amazon S3