

# Habilitación de ABAC en buckets de uso general
<a name="buckets-tagging-enable-abac"></a>

El control de acceso basado en atributos (ABAC) es una estrategia de autorización que usa para definir permisos en función de atributos, es decir, etiquetas. De forma predeterminada, ABAC está desactivado para todos los buckets de uso general de Amazon S3. Para usar ABAC para buckets de uso general, debe habilitarlo.

Para poder habilitar ABAC para el bucket de uso general, recomendamos que, primero, complete las tareas descritas en los siguientes temas: 

**Topics**
+ [Auditoría de las políticas antes de habilitar ABAC](#buckets-tagging-enable-abac-audit)

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

Antes de activar ABAC en el bucket, si este tiene etiquetas, audite las políticas de control de acceso para comprobar si las condiciones basadas en las etiquetas hacen referencia a alguna de las etiquetas existentes en los buckets. Si es así, confirme que estas políticas están configuradas según lo previsto y que habilitar el control de acceso basado en etiquetas no crea cambios de autorización involuntarios en los flujos de trabajo de Amazon S3. Si lo hace, lo ayudará a garantizar que las políticas funcionen según lo previsto una vez que ABAC esté activado en los buckets. Para ver ejemplos de utilización de condiciones basadas en atributos con etiquetas, consulte [Uso de etiquetas con buckets de uso general de S3](buckets-tagging.md).

### Inclusión de los permisos necesarios en las políticas de IAM
<a name="buckets-tagging-enable-abac-permissions"></a>

Necesita los siguientes permisos de Amazon S3 para habilitar ABAC para el bucket: 
+ `s3:PutBucketAbac`: actualice el estado de ABAC para el bucket de uso general.
+ `s3:GetBucketAbac`: vea el estado de ABAC para el bucket de uso general.

Tras habilitar ABAC, los permisos que utilizaba anteriormente para agregar etiquetas a un bucket o eliminar etiquetas de un bucket, `PutBucketTagging` o `DeleteBucketTagging`, dejarán de funcionar. En su lugar, utilice las API `TagResource` y *UntagResource* para realizar estas tareas. 

Recomendamos usar las API `TagResource` y `UntagResource` para administrar el etiquetado antes de habilitar ABAC en los buckets. La consola de Amazon S3 y CloudFormation ahora utilizan las API `TagResource` y `UntagResource` de forma predeterminada. También puede desactivar ABAC en el bucket mediante la API `PutBucketAbac`. Puede utilizar `GetBucketTagging` para mostrar las etiquetas de los buckets. Esta API seguirá funcionando después de que habilite ABAC en los buckets. Como alternativa, también puede utilizar `ListTagsForResource` para mostrar todas las etiquetas de los buckets. 

Necesitará los siguientes permisos para aplicar etiquetas a los buckets de uso general y eliminarlos de ellos. 
+ `s3:TagResource`: agregue etiquetas a un recurso de AWS, como un bucket de uso general de Amazon S3.
+ `s3:UntagResource`: elimine etiquetas de un recurso de AWS, como un bucket de uso general de Amazon S3.
+ `s3:ListTagsForResource`: vea etiquetas aplicadas a un recurso de AWS, como un bucket de uso general de Amazon S3.

La política de IAM siguiente concede el permiso para habilitar ABAC y ver su estado para el bucket.

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

Para obtener más información sobre el etiquetado de buckets de uso general y políticas de ABAC de ejemplo para buckets de uso general, consulte [Uso de etiquetas con buckets de uso general de S3](buckets-tagging.md). 

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

Si tiene permiso `s3:PutBucketAbac` para un bucket de uso general, puede habilitar ABAC para el bucket mediante la consola de Amazon S3, la interfaz de la línea de comandos de AWS (AWS CLI) , la API de REST de Amazon S3 y los AWS SDK.

### Uso de la consola de S3
<a name="bucket-enable-abac-console"></a>

Para habilitar ABAC para un bucket de uso general mediante la consola de Amazon S3:

1. Inicie sesión en la consola de Amazon S3 en [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. En el panel de navegación izquierdo, elija **Buckets**.

1. Elija el nombre del bucket. 

1. Elija la pestaña **Propiedades**. 

1. En el panel **ABAC de bucket**, elija **Editar**. 

1. Elija la opción **Habilitar**. 

1. Revise y confirme los permisos que necesitará para administrar las etiquetas después de habilitar ABAC: `TagResource`, `UntagResource` y `ListTagsForResource`. 

1. Seleccione **Save changes (Guardar cambios)**. 

### Uso de los AWS SDK
<a name="bucket-enable-abac-sdks"></a>

------
#### [ SDK for Java 2.x ]

En este ejemplo se muestra cómo agregar habilitar ABAC para un bucket de uso general mediante AWS SDK for Java 2.x. Para usar el comando, sustituya los *marcadores de posición de entrada del usuario* con su propia información. 

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

En este ejemplo se muestra cómo agregar habilitar ABAC para un bucket de uso general mediante el AWS SDK para Java 2.x. Para utilizar el comando, reemplace `user input placeholders` por información propia.

------

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

Para obtener información sobre la compatibilidad con la API de REST de Amazon S3 para agregar etiquetas a un bucket de uso general, consulte la siguiente sección en la *Referencia de la API de Amazon Simple Storage Service*:
+ [PutBucketAbac](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutBucketABAC.html)

### Uso de AWS CLI
<a name="bucket-enable-abac-cli"></a>

Para instalar la CLI de AWS, consulte [Instalación de la CLI de AWS](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) en la *Guía del usuario de AWS Command Line Interface*.

En el ejemplo de la CLI siguiente, se muestra cómo habilitar ABAC para un bucket de uso general mediante la AWS CLI. Para usar el comando, sustituya los *marcadores de posición de entrada del usuario* con su propia información.

**Solicitud:**

```
# 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
```