Requisitos previos para desactivar las ACL - Amazon Simple Storage Service

Requisitos previos para desactivar las ACL

Una lista de control de acceso (ACL) a un bucket en Amazon S3 es un mecanismo que le permite definir permisos pormenorizados para objetos individuales dentro de un bucket de S3, especificando qué cuentas o grupos de AWS pueden acceder a esos objetos y modificarlos. La mayoría de los casos de uso modernos de Amazon S3 ya no requieren el uso de ACL. Le recomendamos que utilice AWS Identity and Access Management (IAM) y políticas de bucket para administrar el acceso, y que mantenga las ACL deshabilitadas, excepto en circunstancias inusuales en las que necesite controlar el acceso a cada objeto de manera individual.

Si tiene las ACL habilitadas en el bucket, antes de deshabilitar las ACL, asegúrese de cumplir los siguientes requisitos previos:

Revisión de las ACL de bucket y objeto y migración de los permisos de ACL

Cuando desactiva las ACL, los permisos otorgados por las ACL de bucket y objeto ya no afectan al acceso. Antes de desactivar las ACL, revise las ACL de bucket y objeto.

Cada una de las ACL de bucket y objeto existentes tiene un equivalente en una política de IAM. Los siguientes ejemplos de políticas de bucket muestran cómo los permisos READ y WRITE para las ACL de bucket y objeto se asignan a los permisos de IAM. Para obtener más información acerca de cómo se traduce cada ACL en permisos de IAM, consulte Mapeo de permisos de ACL y permisos de política de acceso.

Antes de deshabilitar las ACL:

  • Si la ACL del bucket concede acceso fuera de la cuenta de AWS, en primer lugar, debe migrar los permisos de ACL del bucket a la política de bucket.

  • A continuación, restablezca la ACL del bucket a la ACL privada predeterminada.

  • También le recomendamos que revise los permisos de la ACL de nivel de objeto y los migre a la política de bucket.

Si las ACL del bucket conceden permisos de lectura o escritura a otros que no pertenezcan a la cuenta, antes de deshabilitar las ACL, debe migrar estos permisos a la política de bucket. Después de migrar estos permisos, puede establecer Propiedad del objeto en Propietario del bucket obligatorio. Si no migra las ACL de bucket que conceden acceso de lectura o escritura fuera de la cuenta, la solicitud de aplicar la configuración Aplicada al propietario del bucket genera un error y devuelve el código de error InvalidBucketAclWithObjectOwnership.

Si la ACL del bucket concede acceso fuera de la Cuenta de AWS, antes de desactivar las ACL, debe migrar los permisos de ACL del bucket a la política de bucket y restablecer la ACL del bucket a la ACL privada predeterminada. Si no realiza la migración y el restablecimiento, la solicitud de aplicar la configuración Propietario del bucket obligatorio para deshabilitar las ACL falla y devuelve el código de error InvalidBucketAclWithObjectOwnership. También le recomendamos que revise los permisos de la ACL de objetos y los migre a la política de bucket.

Para revisar y migrar los permisos de ACL a las políticas de bucket, consulte los siguientes temas.

Ejemplos de políticas de bucket

En estas políticas de bucket de ejemplo, se muestra cómo migrar los permisos READ y WRITE de las ACL de bucket y objeto para una Cuenta de AWS de terceros a una política de bucket. Las ACL READ_ACP y WRITE_ACP son menos relevantes para las políticas porque conceden permisos relacionados con ACL (s3:GetBucketAcl, s3:GetObjectAcl, s3:PutBucketAcl y s3:PutObjectAcl).

ejemplo : ACL READ para un bucket

Si su bucket tenía una ACL READ que concede a la Cuenta de AWS 111122223333 permiso para mostrar el contenido de su bucket, puede escribir una política de buckets que conceda los permisos s3:ListBuckets3:ListBucketVersions y s3:ListBucketMultipartUploads para su bucket.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Permission to list the objects in a bucket", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root" ] }, "Action": [ "s3:ListBucket", "s3:ListBucketVersions", "s3:ListBucketMultipartUploads" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket" } ] }
ejemplo : ACL READ para todos los objetos de un bucket

Si cada objeto del bucket tiene una ACL READ que concede acceso a la Cuenta de AWS 111122223333, puede escribir una política de buckets que conceda permisos s3:GetObject y s3:GetObjectVersion a esta cuenta para cada objeto del bucket.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Read permission for every object in a bucket", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root" ] }, "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*" } ] }

Este elemento de recurso de ejemplo concede acceso a un objeto específico.

"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/OBJECT-KEY"
ejemplo : ACL WRITE que concede permisos para escribir objetos en un bucket

Si el bucket tiene una ACL WRITE que concede a Cuenta de AWS 111122223333 permiso para escribir objetos en el bucket, puede escribir una política de buckets que conceda permiso s3:PutObject para el bucket.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Permission to write objects to a bucket", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root" ] }, "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*" } ] }

Uso de la consola de S3 para revisar y migrar permisos de ACL

Revisar permisos de ACL de un bucket
  1. Inicie sesión en la AWS Management Console y abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.

  2. En la lista de Buckets, seleccione el nombre del bucket.

  3. Elija la pestaña Permisos.

  4. En Access control list (ACL) (Lista de control de acceso [ACL]), revise los permisos de ACL del bucket.

Revisar permisos de ACL de un objeto
  1. Inicie sesión en la AWS Management Console y abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.

  2. En la lista Buckets, elija el nombre del bucket que contiene el objeto.

  3. En la lista Objetos, elija el nombre del objeto.

  4. Elija la pestaña Permisos.

  5. En Lista de control de acceso (ACL), revise los permisos de ACL del objeto.

Para migrar los permisos de ACL y actualizar la ACL del bucket
  1. Inicie sesión en la AWS Management Console y abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.

  2. En la lista de Buckets, seleccione el nombre del bucket.

  3. En la pestaña Permisos, en Política de bucket, elija Editar.

  4. En el cuadro Política, agregue o actualice la política de bucket.

    Para obtener ejemplos de políticas de bucket, consulte Ejemplos de políticas de bucket y Ejemplos de casos de uso.

  5. Seleccione Save changes (Guardar cambios).

  6. Actualizar la ACL del bucket para eliminar las concesiones de ACL a otros grupos o Cuentas de AWS.

  7. Aplicar la opción Aplicada al propietario del bucket de Propiedad del objeto.

Uso de la AWS CLI para revisar y migrar permisos de ACL

  1. Para devolver la ACL de bucket del bucket, utilice el comando get-bucket-acl de la AWS CLI:

    aws s3api get-bucket-acl --bucket amzn-s3-demo-bucket

    Por ejemplo, esta ACL de bucket concede acceso WRITE y READ a una cuenta de terceros. En esta ACL, la cuenta de terceros se identifica mediante el ID de usuario canónico. Para aplicar la configuración Aplicada al propietario del bucket y desactivar las ACL, debe migrar estos permisos para la cuenta de terceros a una política de bucket.

    { "Owner": { "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID" }, "Grants": [ { "Grantee": { "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID", "Type": "CanonicalUser" }, "Permission": "FULL_CONTROL" }, { "Grantee": { "DisplayName": "THIRD-PARTY-EXAMPLE-ACCOUNT", "ID": "72806de9d1ae8b171cca9e2494a8d1335dfced4ThirdPartyAccountCanonicalUserID", "Type": "CanonicalUser" }, "Permission": "READ" }, { "Grantee": { "DisplayName": "THIRD-PARTY-EXAMPLE-ACCOUNT", "ID": "72806de9d1ae8b171cca9e2494a8d1335dfced4ThirdPartyAccountCanonicalUserID", "Type": "CanonicalUser" }, "Permission": "WRITE" } ] }

    Para ver otras ACL de ejemplo, consulte Ejemplos de casos de uso.

  2. Migración de los permisos de ACL del bucket a una política de bucket:

    En esta política de bucket de ejemplo, se concede permisos s3:PutObject y s3:ListBucket para una cuenta de terceros. En la política de bucket, la cuenta de terceros se identifica mediante el ID de la Cuenta de AWS (111122223333).

    aws s3api put-bucket-policy --bucket amzn-s3-demo-bucket --policy file://policy.json policy.json: { "Version": "2012-10-17", "Statement": [ { "Sid": "PolicyForCrossAccountAllowUpload", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root" ] }, "Action": [ "s3:PutObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" } ] }

    Para obtener más ejemplos de políticas de bucket, consulte Ejemplos de políticas de bucket y Ejemplos de casos de uso.

  3. Para devolver la ACL de un objeto específico, utilice el comando get-object-acl de la AWS CLI.

    aws s3api get-object-acl --bucket amzn-s3-demo-bucket --key EXAMPLE-OBJECT-KEY
  4. Si es necesario, migre los permisos de ACL de objetos a la política de bucket.

    Este elemento de recurso de ejemplo concede acceso a un objeto específico de una política de bucket.

    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/EXAMPLE-OBJECT-KEY"
  5. Restablezca la ACL del bucket a la ACL predeterminada.

    aws s3api put-bucket-acl --bucket amzn-s3-demo-bucket --acl private
  6. Aplicar la opción Aplicada al propietario del bucket de Propiedad del objeto.

Identificar las solicitudes que requirieron una ACL para su autorización

Para identificar las solicitudes de Amazon S3 que requerían ACL para la autorización, puede utilizar el valor aclRequired de los registros de acceso al servidor de Amazon S3 o AWS CloudTrail. Si la solicitud requería una ACL para su autorización o si tiene solicitudes PUT que especifican una ACL, la cadena es Yes. Si no se requerían ACL, si está estableciendo una ACL predefinida bucket-owner-full-control o si las solicitudes están permitidas por su política de buckets, la cadena de valor de aclRequired es “-”en los registros de acceso al servidor de Amazon S3 y falta en CloudTrail. Para obtener más información sobre los valores aclRequired previstos, consulte Valores de aclRequired para solicitudes comunes de Amazon S3.

Si tiene solicitudes PutBucketAcl o PutObjectAcl con encabezados que conceden permisos basados en ACL, con la excepción de la ACL predefinida bucket-owner-full-control, debe eliminar esos encabezados para poder desactivar las ACL. De lo contrario, sus solicitudes fallarán.

Para las demás solicitudes que requieran una ACL para la autorización, migre esos permisos de ACL a políticas de buckets. A continuación, elimine cualquier ACL de bucket antes de activar la configuración aplicada al propietario del bucket.

nota

No elimine las ACL de objetos. De lo contrario, las aplicaciones que dependen de las ACL de objetos para obtener permisos perderán el acceso.

Si ve que ninguna solicitud requiere una ACL para su autorización, puede proceder a desactivar las ACL. Para obtener más información sobre las solicitudes de identificación, consulte Uso de los registros de acceso al servidor de Amazon S3 para identificar solicitudes y Identificación de solicitudes de Amazon S3 mediante CloudTrail.

Revisión y actualización de las políticas de bucket que utilizan claves de condición relacionadas con la ACL

Después de aplicar la configuración Aplicada al propietario del bucket para desactivar las ACL, los nuevos objetos se pueden cargar en el bucket solo si la solicitud utiliza ACL de control total del propietario del bucket o no especifica una ACL. Antes de desactivar las ACL, revise la política de bucket para ver las claves de condición relacionadas con la ACL.

Si la política de bucket utiliza una clave de condición relacionada con la ACL para requerir la ACL predefinida bucket-owner-full-control (por ejemplo, s3:x-amz-acl), no es necesario actualizar la política de bucket. La siguiente política de bucket utiliza s3:x-amz-acl para requerir la ACL predefinida bucket-owner-full-control para solicitudes PutObject de S3. Esta política todavía requiere que el escritor del objeto especifique la ACL predefinida bucket-owner-full-control. Sin embargo, los buckets con ACL desactivadas siguen aceptando esta ACL, por lo que las solicitudes se siguen realizando correctamente sin que se requieran cambios en el lado del cliente.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Only allow writes to my bucket with bucket owner full control", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:user/ExampleUser" ] }, "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } } ] }

Sin embargo, si la política de bucket utiliza una clave de condición relacionada con la ACL que requiere una ACL diferente, debe quitar esta clave de condición. Esta política de bucket de ejemplo requiere la ACL public-read para solicitudes PutObject de S3 y, por lo tanto, se deben actualizar antes de desactivar las ACL.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Only allow writes to my bucket with public read access", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:user/ExampleUser" ] }, "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "public-read" } } } ] }

Ejemplos de casos de uso

En los siguientes ejemplos, se muestra cómo migrar los permisos de ACL a las políticas de bucket para casos de uso específicos.

Concesión de acceso al grupo de entrega de registros de S3 para el registro de acceso al servidor

Si desea aplicar la configuración Aplicada al propietario del bucket para desactivar los ACL de un bucket de destino de registro de acceso al servidor, debe migrar los permisos de ACL del bucket para el grupo de entrega de registros de S3 a la entidad principal del servicio de registro (logging.s3.amazonaws.com) en una política de bucket. Para obtener más información acerca de los permisos de entrega de registros, consulte Permisos para entrega de registros.

Esta ACL de bucket concede acceso WRITE y READ_ACP al grupo entrega de registros de S3:

{ "Owner": { "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID" }, "Grants": [ { "Grantee": { "Type": "CanonicalUser", "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID" }, "Permission": "FULL_CONTROL" }, { "Grantee": { "Type": "Group", "URI": "http://acs.amazonaws.com/groups/s3/LogDelivery" }, "Permission": "WRITE" }, { "Grantee": { "Type": "Group", "URI": "http://acs.amazonaws.com/groups/s3/LogDelivery" }, "Permission": "READ_ACP" } ] }
Para migrar los permisos de ACL del bucket para el grupo de entrega de registros de S3 a la entidad principal del servicio de registro en una política de bucket
  1. Agregue la siguiente política de bucket al bucket de destino, sustituyendo los valores de ejemplo.

    aws s3api put-bucket-policy --bucket amzn-s3-demo-bucket --policy file://policy.json policy.json: { { "Version": "2012-10-17", "Statement": [ { "Sid": "S3ServerAccessLogsPolicy", "Effect": "Allow", "Principal": { "Service": "logging.s3.amazonaws.com" }, "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/EXAMPLE-LOGGING-PREFIX*", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::SOURCE-BUCKET-NAME" }, "StringEquals": { "aws:SourceAccount": "SOURCE-AWS-ACCOUNT-ID" } } } ] }
  2. Restablezca la ACL del bucket destino a la ACL predeterminada.

    aws s3api put-bucket-acl --bucket amzn-s3-demo-bucket --acl private
  3. Aplicar la opción Aplicada al propietario del bucket de Propiedad de objetos en el bucket de destino.

Concesión de acceso público de lectura para los objetos de un bucket

Si las ACL de objetos conceden acceso público de lectura a todos los objetos del bucket, puede migrar estos permisos de ACL a una política de bucket.

Esta ACL de objeto concede acceso público de lectura a un objeto de un bucket:

{ "Owner": { "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID" }, "Grants": [ { "Grantee": { "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID", "Type": "CanonicalUser" }, "Permission": "FULL_CONTROL" }, { "Grantee": { "Type": "Group", "URI": "http://acs.amazonaws.com/groups/global/AllUsers" }, "Permission": "READ" } ] }
Para migrar los permisos de ACL de lectura pública a una política de bucket
  1. Para conceder acceso público de lectura a todos los objetos del bucket, agregue la siguiente política de bucket y reemplace los valores de ejemplo.

    aws s3api put-bucket-policy --bucket amzn-s3-demo-bucket --policy file://policy.json policy.json: { "Version": "2012-10-17", "Statement": [ { "Sid": "PublicReadGetObject", "Effect": "Allow", "Principal": "*", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/*" ] } ] }

    Para conceder acceso público a un objeto específico de una política de bucket, utilice el siguiente formato para el elemento Resource.

    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/OBJECT-KEY"

    Para conceder acceso público a todos los objetos que tengan un prefijo determinado, utilice el siguiente formato para el elemento Resource.

    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/PREFIX/*"
  2. Aplicar la opción Aplicada al propietario del bucket de Propiedad del objeto.

Concesión de acceso a Amazon ElastiCache (Redis OSS) al bucket de S3

Puede exportar la copia de seguridad de ElastiCache (Redis OSS) a un bucket de S3, lo que le permite tener acceso a la copia de seguridad desde fuera de ElastiCache. Para exportar la copia de seguridad a un bucket de S3, debe conceder permisos a ElastiCache para copiar una instantánea en el bucket. Si ha concedido permisos a ElastiCache en una ACL de bucket, debe migrar esos permisos a una política de bucket antes de aplicar la configuración de propietario del bucket obligatorio para desactivar las ACL. Para obtener más información, consulte Concesión de acceso a ElastiCache al bucket de Amazon S3 en la Guía del usuario de Amazon ElastiCache.

En el ejemplo siguiente se muestran los permisos de ACL del bucket que conceden permisos a ElastiCache.

{ "Owner": { "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID" }, "Grants": [ { "Grantee": { "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID", "Type": "CanonicalUser" }, "Permission": "FULL_CONTROL" }, { "Grantee": { "DisplayName": "aws-scs-s3-readonly", "ID": "540804c33a284a299d2547575ce1010f2312ef3da9b3a053c8bc45bf233e4353", "Type": "CanonicalUser" }, "Permission": "READ" }, { "Grantee": { "DisplayName": "aws-scs-s3-readonly", "ID": "540804c33a284a299d2547575ce1010f2312ef3da9b3a053c8bc45bf233e4353", "Type": "CanonicalUser" }, "Permission": "WRITE" }, { "Grantee": { "DisplayName": "aws-scs-s3-readonly", "ID": "540804c33a284a299d2547575ce1010f2312ef3da9b3a053c8bc45bf233e4353", "Type": "CanonicalUser" }, "Permission": "READ_ACP" } ] }
Migración de los permisos de ACL del bucket para ElastiCache (Redis OSS) a una política de bucket
  1. Agregue la siguiente política de bucket al bucket, sustituyendo los valores de ejemplo.

    aws s3api put-bucket-policy --bucket amzn-s3-demo-bucket --policy file://policy.json policy.json: { "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt15399483", "Effect": "Allow", "Principal": { "Service": "Region.elasticache-snapshot.amazonaws.com" }, "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucket", "s3:GetBucketAcl", "s3:ListMultipartUploadParts", "s3:ListBucketMultipartUploads" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] } ] }
  2. Restablezca la ACL del bucket a la ACL predeterminada:

    aws s3api put-bucket-acl --bucket amzn-s3-demo-bucket --acl private
  3. Aplicar la opción Aplicada al propietario del bucket de Propiedad del objeto.