Gerenciar acesso a buckets do Amazon S3 usando políticas de bucket - AWS SDK for Java 1.x

Anunciamos o próximo end-of-support para AWS SDK for Java (v1). Recomendamos migrar para o AWS SDK for Java v2. Para saber as datas e receber detalhes adicionais e informações sobre como migrar, consulte o anúncio vinculado.

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 acesso a buckets do Amazon S3 usando políticas de bucket

Você pode definir, obter ou excluir uma política de bucket para gerenciar o acesso aos buckets do Amazon S3.

Definir uma política de bucket

Você pode definir a política de bucket para um determinado bucket do S3 ao:

  • Chamar o setBucketPolicy de cliente do AmazonS3 e fornecer um SetBucketPolicyRequest

  • Definir a política diretamente usando a sobrecarga setBucketPolicy que utiliza um nome de bucket e o texto da política (em formato JSON)

Importações

import com.amazonaws.AmazonServiceException; import com.amazonaws.auth.policy.Policy; import com.amazonaws.auth.policy.Principal;

Código

s3.setBucketPolicy(bucket_name, policy_text); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }

Usar a classe Policy para gerar ou validar uma política

Ao fornecer uma política de bucket para setBucketPolicy, você pode fazer o seguinte:

  • Especificar a política diretamente como uma string de texto formatado em JSON

  • Compilar a política usando a classe Policy

Usando a classe Policy, não é necessário se preocupar com a formatação correta da string de texto. Para obter o texto da política JSON da classe Policy, use o método toJson.

Importações

import com.amazonaws.auth.policy.Resource; import com.amazonaws.auth.policy.Statement; import com.amazonaws.auth.policy.actions.S3Actions; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder;

Código

new Statement(Statement.Effect.Allow) .withPrincipals(Principal.AllUsers) .withActions(S3Actions.GetObject) .withResources(new Resource( "{region-arn}s3:::" + bucket_name + "/*"))); return bucket_policy.toJson();

A classe Policy também oferece um método fromJson que pode tentar compilar uma política usando uma string JSON passada. O método a valida para garantir que o texto possa ser transformado em uma estrutura de política válida e falhará com um IllegalArgumentException se o texto da política for inválido.

Policy bucket_policy = null; try { bucket_policy = Policy.fromJson(file_text.toString()); } catch (IllegalArgumentException e) { System.out.format("Invalid policy text in file: \"%s\"", policy_file); System.out.println(e.getMessage()); }

Você pode usar essa técnica para pré-validar uma política lida de um arquivo ou outros meios.

Veja o exemplo completo no GitHub.

Obter uma política de bucket

Para recuperar a política de um bucket do Amazon S3, chame o método getBucketPolicy de cliente do AmazonS3, passando o nome do bucket do qual obter a política.

Importações

import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder;

Código

try { BucketPolicy bucket_policy = s3.getBucketPolicy(bucket_name); policy_text = bucket_policy.getPolicyText(); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }

Se o bucket nomeado não existir, se você não tiver acesso a ele, ou se ele não tiver uma política de bucket, um AmazonServiceException será lançado.

Veja o exemplo completo no GitHub.

Excluir uma política de bucket

Para excluir uma política de bucket, chame o deleteBucketPolicy de cliente do AmazonS3, fornecendo o nome do bucket.

Importações

import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3;

Código

try { s3.deleteBucketPolicy(bucket_name); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }

Esse método será bem-sucedido, mesmo se o bucket ainda não tiver uma política. Se você especificar um nome de bucket não existente ou se não tiver acesso ao bucket, um AmazonServiceException será lançado.

Veja o exemplo completo no GitHub.

Mais informações