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

La propiedad de objetos de S3 es una configuración de bucket de Amazon S3 que puede utilizar para desactivar las listas de control de acceso (ACL) y asumir la propiedad de todos los objetos del bucket, lo que simplifica la administración del acceso de los datos almacenados en Amazon S3. De forma predeterminada, cuando otra Cuenta de AWS carga un objeto en el bucket de S3, esa cuenta (el escritor del objeto) es propietario del objeto, tiene acceso a él y puede conceder acceso a él a otros usuarios a través de ACL. Puede utilizar la propiedad de objetos para cambiar este comportamiento predeterminado. Con la propiedad de objetos, las ACL están desactivadas y usted, como propietario del bucket, tenga automáticamente la propiedad de todos los objetos del 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 nube privada virtual (VPC) y políticas de control de servicios (SCP) de AWS Organizations.

La mayoría de los casos de uso modernos de Amazon S3 ya no requieren el uso de ACL. Le recomendamos desactivar las ACL, excepto en circunstancias inusuales en las que necesite controlar el acceso de cada objeto de manera individual. Con la propiedad de objetos, puede desactivar las ACL y confiar en políticas para el control de acceso. Al desactivar las ACL, puede mantener fácilmente un bucket con objetos cargados por diferentes Cuentas de AWS. Como propietario del bucket, posee todos los objetos del bucket y puede administrar el acceso a ellos mediante políticas.

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 (recomendado): 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 al bucket con la ACL predefinida bucket-owner-full-control.

  • Escritor del objeto (predeterminado): 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 y la auditoría. Puede desactivar las ACL tanto en los buckets recién creados como en los que ya existen. 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. Debe restablecer la ACL del bucket a la predeterminada (control total para el propietario del bucket). Después de desactivar las ACL, el bucket solo acepta solicitudes PUT que no especifican solicitudes ACL o PUT con ACL de control total del propietario del bucket, tales como 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) falla 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.

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 Se aplica a Efecto en la propiedad de objetos Efecto en las ACL Cargas aceptadas
Propietario del bucket obligatorio (recomendado) 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 del objeto (predeterminado) 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 aplica la configuración de propietario del bucket obligatorio de Object Ownership para desactivar las ACL, automáticamente tiene la propiedad y el control total de cada objeto del bucket sin realizar ninguna acción adicional. Después de aplicar esta configuración, podrá 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 de propietario del bucket obligatorio 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 de propietario del bucket obligatorio 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 Solució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 DOC-EXAMPLE-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 DOC-EXAMPLE-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 de ejemplo: administrar acceso a sus recursos de Amazon S3 .

Rehabilitación de ACL

Puede volver a habilitar las ACL cambiando la configuración de propietario del bucket obligatorio a 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 de propietario del bucket obligatorio 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 de propietario del bucket obligatorio siguen siendo propiedad del propietario del bucket.

Por ejemplo, si cambia de la configuración de propietario del bucket obligatorio a escritor del objeto, como propietario del bucket, ya no tiene 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 de propietario del bucket obligatorio. Estos objetos no pertenecen al escritor del objeto, incluso si vuelve a habilitar las 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 de 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 de propietario del bucket obligatorio falla 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.

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 de propietario del bucket obligatorio 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:::DOC-EXAMPLE-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:::DOC-EXAMPLE-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

Se puede requerir que todos los buckets nuevos se creen con ACL desactivadas mediante políticas de IAM u Organizations. Puede utilizar la clave de condición s3:x-amz-object-ownership de una política de IAM u Organizations para requerir la configuración de propietario del bucket obligatorio de Object Ownership en todos los buckets recién creados. Al requerir la configuración de propietario del bucket obligatorio, se asegura de que las ACL estén desactivadas para todos los buckets nuevos de la cuenta u organización. Para obtener más información, consulte Desactivación de las ACL para todos los buckets nuevos (propietario del bucket obligatorio) .

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, es posible desactivar las ACL (con la configuración de propietario del bucket obligatorio de Object Ownership) 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 de propietario del bucket obligatorio 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.

Si utiliza la configuración predeterminada de escritor del objeto de Object Ownership o aplica la configuración de propietario del bucket preferido para el bucket de destino, puede utilizar la opción de invalidación del propietario de Amazon S3 Replication para transferir la propiedad de los objetos replicados al propietario del bucket de destino.

Configuración de la propiedad de objetos

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

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