Control de la propiedad de los objetos y desactivación de las ACL del bucket - Amazon Simple Storage Service

Control de la propiedad de los objetos y desactivación de las ACL del bucket

S3 Object Ownership es una configuración de nivel de bucket de Amazon S3 que puede usar para controlar la propiedad de los objetos que se cargan en el bucket y para activar o desactivar las listas de control de acceso (ACL). De forma predeterminada, la propiedad de objetos se establece en la configuración impuesta por el propietario del bucket. Además, todas las ACL están deshabilitadas. Cuando las ACL están deshabilitadas, el propietario del bucket posee todos los objetos del bucket y administra el acceso a los datos de forma exclusiva mediante políticas de administración de acceso.

La mayoría de los casos de uso modernos de Amazon S3 ya no requieren el uso de ACL. Le recomendamos mantener las ACL desactivadas, excepto en circunstancias inusuales en las que necesite controlar el acceso de cada objeto de manera individual. Si las ACL están desactivadas, puede usar políticas para controlar el acceso más fácilmente a cada objeto del bucket, independientemente de quién haya subido los objetos al bucket.

La propiedad de objetos tiene tres configuraciones que puede utilizar para controlar la propiedad de los objetos que se cargan en el bucket y desactivar o habilitar las ACL:

ACL desactivadas
  • Propietario del bucket obligatorio (predeterminado): las ACL están desactivadas y el propietario del bucket tiene automáticamente la propiedad y el control total sobre cada objeto del bucket. Las ACL ya no afectan a los permisos de los datos del bucket de S3. El bucket utiliza políticas para definir el control de acceso.

ACL habilitadas
  • Propietario del bucket preferido: el propietario del bucket tiene la propiedad y el control total sobre los nuevos objetos que otras cuentas escriben en el bucket con la ACL predefinida bucket-owner-full-control.

  • Escritor del objeto: la Cuenta de AWS que carga un objeto es propietaria del objeto, tiene control total sobre él y puede conceder a otros usuarios acceso a él a través de ACL.

Para la mayoría de los casos de uso modernos de S3, le recomendamos que desactive las ACL eligiendo la configuración de propietario del bucket obligatorio y utilice su política de bucket para compartir datos con usuarios fuera de la cuenta según sea necesario. Este enfoque simplifica la administración de permisos. Puede desactivar las ACL tanto en los buckets recién creados como en los que ya existen. Para los buckets recién creados, las ACL están deshabilitadas de forma predeterminada. En el caso de un bucket existente que ya tiene objetos, después de desactivar las ACL, las ACL de objeto y bucket ya no forman parte de una evaluación de acceso y el acceso se concede o deniega sobre la base de políticas. Para los buckets existentes, puede volver a habilitar las ACL en cualquier momento después de desactivarlas, y las ACL de bucket y objeto preexistentes se restauran.

Antes de desactivar las ACL, le recomendamos que revise la política de bucket para asegurarse de que cubre todas las formas en que pretende conceder acceso al bucket fuera de la cuenta. Después de desactivar las ACL, el bucket solo acepta solicitudes PUT que no especifican una ACL o solicitudes PUT con ACL de control total del propietario del bucket, por ejemplo, la ACL predefinida bucket-owner-full-control o formas equivalentes de esta ACL expresadas en XML. Las aplicaciones existentes que admiten ACL de control total del propietario del bucket no se ven afectadas. Las solicitudes PUT que contienen otras ACL (por ejemplo, concesiones personalizadas a determinadas Cuentas de AWS) producen un error y devuelve un error 400 con el código de error AccessControlListNotSupported.

En cambio, un bucket con la configuración de propietario del bucket preferido sigue aceptando y respetando las ACL de bucket y objeto. Con esta configuración, nuevos objetos que se escriben con la ACL predefinida bucket-owner-full-control pertenecen automáticamente al propietario del bucket en lugar del escritor del objeto. Todos los demás comportamientos de ACL siguen vigentes. Para requerir que todas las operaciones PUT de Amazon S3 incluyan la ACL predefinida bucket-owner-full-control, puede agregar una política de bucket que permita solo cargas de objetos mediante esta ACL.

Para ver qué configuración de propiedad de objetos se aplica a los buckets, puede utilizar las métricas de la Lente de almacenamiento de Amazon S3. Lente de almacenamiento de S3 es una función de análisis de almacenamiento en la nube que puede utilizar para obtener visibilidad en toda la organización sobre el uso y la actividad del almacenamiento de objetos. Para obtener más información, consulte Uso de Lente de almacenamiento de S3 para encontrar la configuración de propiedad de objetos.

nota

Para obtener más información sobre el uso de la clase de almacenamiento Amazon S3 Express One Zone con buckets de directorio, consulte Buckets de directorio y S3 Express One Zone y Descripción general de los buckets de directorio.

Configuración de la propiedad de objetos

En esta tabla se muestra el impacto que cada configuración de propiedad de objetos tiene en las ACL, los objetos, la propiedad de objetos y las cargas de objetos.

Opción Aplica a Efecto en la propiedad de objetos Efecto en las ACL Cargas aceptadas
Aplicada al propietario del bucket (predeterminado) Todos los objetos existentes y nuevos El propietario del bucket es dueño de todos los objetos.

Las ACL están desactivadas y ya no afectan a los permisos de acceso al bucket. Las solicitudes de configuración o actualización de ACL fallan. Sin embargo, las solicitudes de lectura de ACL son compatibles.

El propietario del bucket tiene plena propiedad y control.

El escritor de objetos ya no tiene plena propiedad y control.

Cargas con ACL de control total del propietario del bucket o cargas que no especifican una ACL
Propietario del bucket preferido Objetos nuevos Si la carga de un objeto incluye la ACL predefinida bucket-owner-full-control, el propietario del bucket es el propietario del objeto.

Los objetos cargados con otras ACL son propiedad de la cuenta de escritura.

Las ACL se pueden actualizar y pueden conceder permisos.

Si la carga de un objeto incluye la ACL predefinida bucket-owner-full-control, el propietario del bucket tiene acceso de control total y el escritor del objeto ya no tiene acceso de control total.

Todas las cargas
Escritor de objetos Objetos nuevos El escritor del objeto es propietario del objeto.

Las ACL se pueden actualizar y pueden conceder permisos.

El escritor del objeto tiene acceso de control total.

Todas las cargas

Cambios introducidos al desactivar las ACL

Cuando se aplica la configuración Aplicada al propietario del bucket de Propiedad de objetos para desactivar las ACL, automáticamente tiene la propiedad y el control total de cada objeto del bucket sin realizar ninguna acción adicional. Aplicada al propietario del bucket es la configuración predeterminada para todos los buckets recién creados. Después de aplicar la configuración Aplicada al propietario del bucket, verá tres cambios:

  • Todas las ACL de bucket y de objetos están desactivadas, lo que le da acceso completo como propietario del bucket. Cuando realice una solicitud de ACL de lectura en el bucket u objeto, verá que el acceso completo solo se concede al propietario del bucket.

  • Como propietario del bucket, tiene automáticamente la propiedad y el control total sobre cada objeto del bucket.

  • Las ACL ya no afectan a los permisos de acceso al bucket. Como resultado, el control de acceso de los datos se basa en políticas, tales como políticas de IAM, políticas de bucket de S3, políticas de puntos de conexión de VPC y políticas de control de servicios (SCP) de las organizaciones.

Diagrama que muestra lo que sucede cuando se aplica la configuración Aplicada al propietario del bucket para desactivar las ACL.

Si utiliza S3 Versioning, el propietario del bucket tiene la propiedad y el control total sobre todas las versiones de objetos del bucket. La aplicación de la configuración Aplicada al propietario del bucket no agrega una nueva versión de un objeto.

Los objetos nuevos se pueden cargar en el bucket solo si utilizan ACL de control total del propietario del bucket o no especifican una ACL. Las cargas de objetos fallan si especifican cualquier otra ACL. Para obtener más información, consulte Resolución de problemas.

Como la siguiente operación PutObject de ejemplo que utiliza la AWS Command Line Interface (AWS CLI) incluye la ACL predefinida bucket-owner-full-control, el objeto se puede cargar en un bucket con ACL desactivadas.

aws s3api put-object --bucket amzn-s3-demo-bucket --key key-name --body path-to-file --acl bucket-owner-full-control

Dado que la siguiente operación PutObject no especifica una ACL, también se realiza correctamente para un bucket con ACL desactivadas.

aws s3api put-object --bucket amzn-s3-demo-bucket --key key-name --body path-to-file
nota

Si otras Cuentas de AWS necesitan acceso a objetos después de la carga, debe conceder permisos adicionales a esas cuentas mediante políticas de bucket. Para obtener más información, consulte Explicaciones que utilizan políticas para administrar el acceso a los recursos de Amazon S3.

Rehabilitación de ACL

Puede volver a habilitar las ACL cambiando la configuración Aplicada al propietario del bucket por otra configuración de propiedad de objetos en cualquier momento. Si utilizó ACL de objeto para la administración de permisos antes de aplicar la configuración Aplicada al propietario del bucket y no migró estos permisos de ACL de objetos a la política de bucket, estos permisos se restauran después de volver a habilitar las ACL. Además, los objetos escritos en el bucket mientras se aplicó la configuración Aplicada al propietario del bucket siguen siendo propiedad del propietario del bucket.

Por ejemplo, si cambia de la configuración Aplicada al propietario del bucket a Escritor de objetos, ya no tendrá automáticamente la propiedad ni el control total sobre los objetos que anteriormente eran propiedad de otras Cuentas de AWS. En su lugar, las cuentas de carga vuelven a ser propietarias de estos objetos. Los objetos que pertenecen a otras cuentas utilizan ACL para obtener permisos, por lo que no puede utilizar políticas para conceder permisos a estos objetos. Sin embargo, como propietario del bucket, sigue siendo propietario de cualquier objeto que se haya escrito en el bucket mientras se aplicaba la configuración Aplicada al propietario del bucket. Estos objetos no pertenecen al escritor del objeto, incluso si vuelve a habilitar las ACL.

Para obtener instrucciones sobre cómo habilitar y administrar las ACL mediante la AWS Management Console, AWS Command Line Interface (CLI), la API de REST o los SDK de AWS, consulteConfiguración de la ACL.

Requisitos previos para desactivar las ACL

Antes de desactivar las ACL de un bucket existente, se deben completar 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.

Si las ACL del bucket conceden permisos de lectura o escritura a otros que no pertenezcan a la cuenta, debe migrar estos permisos a la política de bucket para poder aplicar la configuración Aplicada al propietario del bucket. 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.

Por ejemplo, si desea desactivar las ACL de un bucket que recibe registros 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 en una política de bucket. Para obtener más información, consulte Concesión de acceso al grupo de entrega de registros de S3 para el registro de acceso al servidor.

Si desea que el escritor del objeto mantenga el control total del objeto que carga, el escritor del objeto es la mejor configuración de propiedad de objetos para el caso de uso. Si desea controlar el acceso de objeto individual, la mejor opción es la configuración de propietario del bucket preferido. Estos casos de uso son poco frecuentes.

Para revisar las ACL y migrar los permisos de ACL a las políticas de bucket, consulte Requisitos previos para desactivar las ACL.

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" } } } ] }

Permisos de propiedad de objetos

Para aplicar, actualizar o eliminar una configuración de propiedad de objetos de un bucket, es necesario el permiso s3:PutBucketOwnershipControls. Para devolver la configuración de propiedad de objetos de un bucket, es necesario el permiso s3:GetBucketOwnershipControls. Para obtener más información, consulte Configuración de la propiedad de objetos al crear un bucket y Visualización de la configuración de propiedad de objetos para un bucket de S3.

Desactivación de las ACL para todos los buckets nuevos

De forma predeterminada, todos los buckets nuevos se crean con la configuración Aplicada al propietario del bucket y con las ACL deshabilitadas. Recomendamos mantener las ACL deshabilitadas. Como regla general, se recomienda utilizar políticas basadas en recursos de S3 (políticas de bucket y políticas de punto de acceso) o políticas de IAM para el control de acceso en lugar de ACL. Las políticas son una opción de control de acceso simplificada y más flexible. Con las políticas de bucket y las políticas de puntos de acceso, puede definir reglas que se apliquen ampliamente a todas las solicitudes a sus recursos de Amazon S3.

Replicación y propiedad de objetos

Cuando utiliza la replicación de S3 y los buckets de origen y destino pertenecen a diferentes Cuentas de AWS, puede desactivar las ACL (con la configuración Aplicada al propietario del bucket de Propietario del objeto) para cambiar la propiedad de réplica a la Cuenta de AWS que posee el bucket de destino. Esta configuración imita el comportamiento de anulación del propietario existente sin necesidad del permiso s3:ObjectOwnerOverrideToBucketOwner. Todos los objetos que se replican en el bucket de destino con la configuración Aplicada al propietario del bucket pertenecen al propietario del bucket de destino. Para obtener más información acerca de la opción de invalidación del propietario para configuraciones de replicación, consulte Cambiar el propietario de la réplica.

Configuración de la propiedad de objetos

Puede aplicar una configuración de propiedad de objetos mediante la consola de Amazon S3, AWS CLI, los SDK de AWS, la API de REST de Amazon S3 o AWS CloudFormation. La siguiente API de REST y los comandos de la AWS CLI admiten la propiedad de objetos:

API de REST AWS CLI Descripción
PutBucketOwnershipControls put-bucket-ownership-controls Crea o modifica la configuración de propiedad de objetos de un bucket de S3 existente.
CreateBucket create-bucket Crea un bucket utilizando el encabezado de solicitud de x-amz-object-ownership para especificar la configuración de propiedad de objetos.
GetBucketOwnershipControls get-bucket-ownership-controls Recupera la configuración de propiedad de objetos de un bucket de Amazon S3.
DeleteBucketOwnershipControls delete-bucket-ownership-controls Elimina la configuración de propiedad de objetos de un bucket de Amazon S3.

Para obtener más información acerca de la aplicación y el trabajo con la configuración de propiedad de objetos, consulte los siguientes temas.