Habilitación de ABAC en buckets de uso general - Amazon Simple Storage Service

Habilitación de ABAC en buckets de uso general

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:

Auditoría de las políticas antes de habilitar ABAC

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.

Inclusión de los permisos necesarios en las políticas de IAM

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.

Steps

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 (CLI de AWS) de AWS, la API de REST de Amazon S3 y los AWS SDK.

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/.

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

  3. Elija el nombre del bucket.

  4. Elija la pestaña Propiedades.

  5. En el panel ABAC de bucket, elija Editar.

  6. Elija la opción Habilitar.

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

  8. Seleccione Save changes (Guardar cambios).

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.

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:

Para instalar la CLI de AWS, consulte Instalación de la CLI de AWS 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