Habilitar o ABAC em buckets de uso geral - Amazon Simple Storage Service

Habilitar o ABAC em buckets de uso geral

O controle de acesso por atributo (ABAC) é uma estratégia de autorização usada para definir permissões com base em atributos (isto é, tags). Por padrão, o ABAC está desabilitado para todos os buckets de uso geral do Amazon S3. Para habilitar o ABAC para buckets de uso geral, é necessário habilitá-lo.

Antes de habilitar o ABAC para um bucket de uso geral, recomendamos primeiro concluir as tarefas descritas nos seguintes tópicos:

Auditar as políticas antes de habilitar o ABAC

Antes de habilitar o ABAC para um bucket, se ele tiver tags, audite as políticas de controle de acesso para verificar se as condições baseadas em tags fazem referência a alguma das tags existentes no bucket. Se fizerem, confirme se essas políticas estão configuradas conforme o esperado e se a habilitação do controle de acesso baseado em tags não cria alterações de autorização indesejadas nos fluxos de trabalho do Amazon S3. Isso ajudará a garantir que suas políticas funcionem conforme o esperado após a habilitação do ABAC em seus buckets. Para ver exemplos de uso de condições baseadas em atributos com tags, consulte Usar tags com buckets de uso geral do S3.

Incluir as permissões necessárias em políticas do IAM

Para habilitar o ABAC para um bucket, as seguintes permissões do Amazon S3 são necessárias:

  • s3:PutBucketAbac: atualize o status do ABAC do bucket de uso geral.

  • s3:GetBucketAbac: visualize o status do ABAC do bucket de uso geral.

Depois de habilitar o ABAC, as permissões que você usou anteriormente para adicionar tags a um bucket ou excluir tags de um bucket, PutBucketTagging ou DeleteBucketTagging, não funcionarão mais. Em vez disso, use as APIs TagResource e UntagResource para realizar essas tarefas.

É recomendável usar as APIs TagResource e UntagResource para gerenciar a marcação antes de habilitar o ABAC nos buckets. Agora o console do Amazon S3 e o CloudFormation usam as APIs TagResource e UntagResource por padrão. Também é possível desabilitar o ABAC no bucket usando a API PutBucketAbac. Você pode usar GetBucketTagging para listar tags em seus buckets. Essa API continuará a funcionar depois que você habilitar o ABAC para seus buckets. Também é possível usar ListTagsForResource para listar todas as tags em seus buckets.

Para aplicar tags e removê-las de buckets de uso geral, as permissões a seguir serão necessárias.

  • s3:TagResource: adicione tags a um recurso da AWS, como um bucket de uso geral do Amazon S3.

  • s3:UntagResource: remova tags de um recurso da AWS, como um bucket de uso geral do Amazon S3.

  • s3:ListTagsForResource: visualize as tags de um recurso da AWS, como um bucket de uso geral do Amazon S3.

A política do IAM a seguir concede a permissão para habilitar o ABAC e visualizar o respectivo status para o bucket.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutBucketAbac", "s3:GetBucketAbac" ], "Resource": "arn:aws:s3:::my-s3-bucket/*" } ] }

Para ter mais informações sobre a marcação de buckets de uso geral e exemplos de política de ABAC para buckets de uso geral, consulte Usar tags com buckets de uso geral do S3.

Etapas

Se você tiver a permissão s3:PutBucketAbac para um bucket de uso geral, poderá habilitar o ABAC para esse bucket usando o console do Amazon S3, a AWS Command Line Interface (AWS CLI), a API REST do Amazon S3 e SDKs da AWS.

Para habilitar o ABAC para um bucket de uso geral usando o console do Amazon S3:

  1. Faça login no console do Amazon S3 em https://console.aws.amazon.com/s3/.

  2. No painel de navegação à esquerda, escolha Buckets.

  3. Escolha o nome do bucket.

  4. Escolha a guia Properties (Propriedades).

  5. No painel ABAC do Bucket, escolha Editar.

  6. Escolha o botão Habilitar.

  7. Analise e confirme as permissões necessárias para gerenciar as tags depois de habilitar o ABAC: TagResource, UntagResource e ListTagsForResource.

  8. Escolha Salvar alterações.

SDK for Java 2.x

Este exemplo mostra como habilitar o ABAC para um bucket de uso geral usando o AWS SDK for Java 2.x. Para usar o comando, substitua os espaços reservados para entrada do usuário por suas próprias informações.

import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.AbacStatus; import software.amazon.awssdk.services.s3.model.GetBucketAbacRequest; import software.amazon.awssdk.services.s3.model.GetBucketAbacResponse; import software.amazon.awssdk.services.s3.model.PutBucketAbacRequest; import software.amazon.awssdk.services.s3.model.PutBucketAbacResponse; import software.amazon.awssdk.regions.Region; public class BucketAbac { public static void main(String[] args) { Region region = Region.US_EAST_1; S3Client s3 = S3Client.builder() .region(region) .build(); putBucketAbac(s3, "amzn-s3-demo-bucket", "Enabled"); getBucketAbac(s3, "amzn-s3-demo-bucket"); putBucketAbac(s3, "amzn-s3-demo-bucket", "Disabled"); getBucketAbac(s3, "amzn-s3-demo-bucket"); } /** * Sets the ABAC (Attribute-Based Access Control) status for a specified S3 bucket. * * @param s3 The S3Client instance to use for the API call * @param bucketName The name of the S3 bucket to update * @param status The desired ABAC status ("Enabled" or "Disabled") */ public static void putBucketAbac(S3Client s3, String bucketName, String status) { try { AbacStatus abacStatus = AbacStatus.builder() .abacStatus(status) .build(); PutBucketAbacReqquest request = PutBucketAbacRequest.builder() .bucket(bucketName) .abacStatus(abacStatus) .build(); s3.putBucketAbac(request); } catch (S3Exception e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } } /** * Retrieves the current ABAC (Attribute-Based Access Control) status for a specified S3 bucket. * * @param s3 The S3Client instance to use for the API call * @param bucketName The name of the S3 bucket to query */ public static void getBucketAbac(S3Client s3, String bucketName) { try { GetBucketAbacReqquest request = GetBucketAbacRequest.builder() .bucket(bucketName) .build(); GetBucketAbacResponse response = s3.getBucketAbac(request); } catch (S3Exception e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } } }

Este exemplo mostra como habilitar o ABAC para um bucket de uso geral usando o AWS SDK para Java 2.x. Para usar o comando, substitua os user input placeholders por suas próprias informações.

Para ter informações sobre a compatibilidade oferecida pela API REST do Amazon S3 para adicionar tags a um bucket de uso geral, consulte a seguinte seção na Referência de API do Amazon Simple Storage Service:

Para instalar a AWS CLI, consulte Instalar ou atualizar a versão mais recente da AWS CLI no Guia do usuário da versão 2 da AWS Command Line Interface.

O exemplo da CLI a seguir mostra como habilitar o ABAC para um bucket de uso geral usando a AWS CLI. Para usar o comando, substitua os espaços reservados para entrada do usuário por suas próprias informações.

Solicitação:

# Enable ABAC on a general purpose bucket aws s3api put-bucket-abac --bucket amzn-s3-demo-bucket --abac-status Status=Enabled --region us-east-2 # Disable ABAC on a general purpose bucket aws s3api put-bucket-abac --bucket amzn-s3-demo-bucket --abac-status Status=Disabled --region us-east-2 # Get ABAC status on a general purpose bucket aws s3api get-bucket-abac --bucket amzn-s3-demo-bucket --region us-east-2