

# Habilitar o ABAC em buckets de uso geral
<a name="buckets-tagging-enable-abac"></a>

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: 

**Topics**
+ [Auditar as políticas antes de habilitar o ABAC](#buckets-tagging-enable-abac-audit)

## Auditar as políticas antes de habilitar o ABAC
<a name="buckets-tagging-enable-abac-audit"></a>

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](buckets-tagging.md).

### Incluir as permissões necessárias em políticas do IAM
<a name="buckets-tagging-enable-abac-permissions"></a>

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](buckets-tagging.md). 

### Etapas
<a name="bucket-tag-add-steps"></a>

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.

### Usar o console do S3
<a name="bucket-enable-abac-console"></a>

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/](https://console.aws.amazon.com/s3/).

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

1. Escolha o nome do bucket. 

1. Escolha a guia **Properties (Propriedades)**. 

1. No painel **ABAC do Bucket**, escolha **Editar**. 

1. Escolha o botão **Habilitar**. 

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

1. Escolha **Salvar alterações**. 

### Usar SDKs da AWS
<a name="bucket-enable-abac-sdks"></a>

------
#### [ 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.

------

### Uso da API REST
<a name="bucket-enable-abac-api"></a>

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*:
+ [PutBucketAbac](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutBucketABAC.html)

### Como usar a AWS CLI
<a name="bucket-enable-abac-cli"></a>

Para instalar a AWS CLI, consulte [Instalar ou atualizar a versão mais recente da AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) 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
```