

# Protección de los datos mediante el cifrado
<a name="UsingEncryption"></a>

**importante**  
Amazon S3 aplica ahora el cifrado del servidor con claves administradas por Amazon S3 (SSE-S3) como el nivel básico de cifrado para cada bucket de Amazon S3. Desde el 5 de enero de 2023, todas las cargas de objetos nuevos a Amazon S3 se cifran automáticamente sin costo adicional y sin afectar al rendimiento. El estado de cifrado automático para la configuración de cifrado predeterminada del bucket de S3 y para cargas de objetos nuevos está disponible en registros de CloudTrail, inventario de S3, Lente de almacenamiento de S3, la consola de Amazon S3 y como encabezado de respuesta a la API de Amazon S3 adicional en la AWS CLI y los AWS SDK. Para obtener más información, consulte [Preguntas frecuentes del cifrado predeterminado](https://docs.aws.amazon.com/AmazonS3/latest/userguide/default-encryption-faq.html).

La protección de datos se refiere a salvaguardarlos mientras están en tránsito (al desplazarlos desde y hacia Amazon S3) y en reposo (almacenados en discos en centros de datos Amazon S3). Puede proteger los datos en tránsito con capa de sockets seguros/seguridad de la capa de transporte (SSL/TLS) incluido el intercambio de claves poscuánticas híbrido o cifrado del cliente. Para proteger los datos en reposo en Amazon S3, dispone de las siguientes opciones:
+ **Cifrado del lado del servidor**: Amazon S3 cifra sus objetos antes de guardarlos en discos en centros de datos de AWS y, a continuación, los descifra cuando se descargan.

  Todos los buckets de Amazon S3 tienen el cifrado configurado de forma predeterminada y todos los objetos nuevos cargados en un bucket de S3 se cifran automáticamente en reposo. El cifrado del lado del servidor con claves administradas de Amazon S3 (SSE-S3) es la configuración de cifrado predeterminada para cada bucket de Amazon S3. Para usar otro tipo de cifrado, puede especificar el tipo de cifrado del servidor que se utilizará en las solicitudes `PUT` de S3 o puede actualizar la configuración de cifrado predeterminada en el bucket de destino. 

  Si desea especificar un tipo de cifrado diferente en sus solicitudes `PUT`, puede utilizar el cifrado del servidor con claves de AWS Key Management Service (AWS KMS) (SSE-KMS), el cifrado del servidor de doble capa con claves de AWS KMS (DSSE-KMS) o el cifrado del servidor con claves proporcionadas por el cliente (SSE-C). Si desea establecer una configuración de cifrado predeterminada diferente en el bucket de destino, puede usar SSE-KMS o DSSE-KMS.

  Para obtener más información sobre cómo cambiar la configuración de cifrado predeterminada de los buckets de uso general, consulte [Configuración del cifrado predeterminado](default-bucket-encryption.md). 

  Al cambiar la configuración de cifrado predeterminada del bucket a SSE-KMS, no se modifica el tipo de cifrado de los objetos de Amazon S3 existentes en el bucket. Para cambiar el tipo de cifrado de los objetos preexistentes tras actualizar la configuración de cifrado predeterminada a SSE-KMS, puede utilizar Operaciones por lotes de Amazon S3. A Operaciones por lotes de S3 se proporciona una lista de objetos y Operaciones por lotes llama a la operación de la API correspondiente. Puede utilizar la acción [Copia de objetos](batch-ops-copy-object.md) para copiar objetos existentes, que los vuelve a escribir en el mismo bucket que los objetos cifrados con SSE-KMS. Un solo trabajo de la herramienta de operaciones por lotes puede realizar la operación especificada en miles de millones de objetos. Para obtener más información, consulte [Realización de operaciones de objetos de forma masiva con Operaciones por lotes](batch-ops.md) y la publicación [How to retroactively encrypt existing objects in Amazon S3 using S3 Inventory, Amazon Athena, and S3 Batch Operations](https://aws.amazon.com/blogs/security/how-to-retroactively-encrypt-existing-objects-in-amazon-s3-using-s3-inventory-amazon-athena-and-s3-batch-operations/) de *AWS Storage Blog*. 

  Para obtener más información acerca de cada opción para el cifrado del servidor, consulte [Protección de los datos con el cifrado del servidor](serv-side-encryption.md).

  Para configurar el cifrado del servidor, consulte:
  + [Especificación del cifrado del servidor con claves administradas por Amazon S3 (SSE-S3)](specifying-s3-encryption.md)
  + [Especificación del cifrado del lado del servidor con AWS KMS (SSE-KMS)](specifying-kms-encryption.md)
  + [Especificación del cifrado del servidor de doble capa con claves de AWS KMS (DSSE-KMS)](specifying-dsse-encryption.md)
  + [Especificación del cifrado del lado del servidor con claves proporcionadas por el cliente (SSE-C)](specifying-s3-c-encryption.md)

  
+ **Cifrado del cliente**: puede cifrar datos del lado del cliente y cargar los datos cifrados en Amazon S3. En este caso, administra el proceso de cifrado, las claves de cifrado y las herramientas relacionadas.

  Para configurar el cifrado del lado del cliente, consulte [Protección de los datos con el cifrado del cliente](UsingClientSideEncryption.md).

Para ver qué porcentaje de los bytes de almacenamiento están cifrados, puede utilizar las métricas de 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 [Evaluación de la actividad y el uso de almacenamiento con S3 Storage Lens](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens?icmpid=docs_s3_user_guide_UsingEncryption.html). Para obtener una lista completa de las métricas, consulte el [Glosario de métricas de Lente de almacenamiento de S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_metrics_glossary.html?icmpid=docs_s3_user_guide_UsingEncryption).

Para obtener más información sobre el cifrado del servidor, el cifrado del cliente y el cifrado en tránsito, revise los temas siguientes.

**Topics**
+ [

# Protección de los datos con el cifrado del servidor
](serv-side-encryption.md)
+ [

# Protección de los datos con el cifrado del cliente
](UsingClientSideEncryption.md)
+ [

# Protección de los datos en tránsito con cifrado
](UsingEncryptionInTransit.md)

# Protección de los datos con el cifrado del servidor
<a name="serv-side-encryption"></a>

**importante**  
A partir de abril de 2026, AWS desactivará el cifrado del servidor con claves proporcionadas por el cliente (SSE-C) para todos los buckets nuevos. Además, el cifrado SSE-C se desactivará para todos los buckets existentes en Cuentas de AWS que no contengan datos cifrados con SSE-C. Con estos cambios, las pocas aplicaciones que necesitan el cifrado SSE-C deberán habilitar deliberadamente el uso de SSE-C a través de la API [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html) después de crear el bucket. En estos casos, es posible que deba actualizar los scripts de automatización, las plantillas de CloudFormation u otras herramientas de configuración de infraestructura para configurar estos ajustes. Para obtener más información, consulte la [publicación del Blog de almacenamiento de AWS](https://aws.amazon.com/blogs/storage/advanced-notice-amazon-s3-to-disable-the-use-of-sse-c-encryption-by-default-for-all-new-buckets-and-select-existing-buckets-in-april-2026/).

**importante**  
Amazon S3 aplica ahora el cifrado del servidor con claves administradas por Amazon S3 (SSE-S3) como el nivel básico de cifrado para cada bucket de Amazon S3. Desde el 5 de enero de 2023, todas las cargas de objetos nuevos a Amazon S3 se cifran automáticamente sin costo adicional y sin afectar al rendimiento. El estado de cifrado automático para la configuración de cifrado predeterminada del bucket de S3 y para cargas de objetos nuevos está disponible en registros de CloudTrail, inventario de S3, Lente de almacenamiento de S3, la consola de Amazon S3 y como encabezado de respuesta a la API de Amazon S3 adicional en la AWS CLI y los AWS SDK. Para obtener más información, consulte [Preguntas frecuentes del cifrado predeterminado](https://docs.aws.amazon.com/AmazonS3/latest/userguide/default-encryption-faq.html).

El cifrado del lado del servidor es el cifrado de datos en su destino por la aplicación o servicio que los recibe. Amazon S3 cifra sus datos en el nivel de objeto; los escribe en los discos de sus centros de datos de AWS y los descifra cuando accede a él. Siempre que autentique su solicitud y tenga permiso de acceso, no existe diferencia alguna en la forma de obtener acceso a objetos cifrados o sin cifrar. Por ejemplo, si comparte objetos con una URL prefirmada, esa URL funcionará igual para objetos cifrados y sin cifrar. Además, al enumerar los objetos en su bucket, las operaciones de la API de listado devuelven una lista de todos los objetos, independientemente de si están cifrados.

Todos los buckets de Amazon S3 tienen el cifrado configurado de forma predeterminada y todos los objetos nuevos cargados en un bucket de S3 se cifran automáticamente en reposo. El cifrado del lado del servidor con claves administradas de Amazon S3 (SSE-S3) es la configuración de cifrado predeterminada para cada bucket de Amazon S3. Para usar otro tipo de cifrado, puede especificar el tipo de cifrado del servidor que se utilizará en las solicitudes `PUT` de S3 o puede actualizar la configuración de cifrado predeterminada en el bucket de destino. 

Si desea especificar un tipo de cifrado diferente en sus solicitudes `PUT`, puede utilizar el cifrado del servidor con claves de AWS Key Management Service (AWS KMS) (SSE-KMS), el cifrado del servidor de doble capa con claves de AWS KMS (DSSE-KMS) o el cifrado del servidor con claves proporcionadas por el cliente (SSE-C). Si desea establecer una configuración de cifrado predeterminada diferente en el bucket de destino, puede usar SSE-KMS o DSSE-KMS.

Para obtener más información sobre cómo cambiar la configuración de cifrado predeterminada de los buckets de uso general, consulte [Configuración del cifrado predeterminado](default-bucket-encryption.md). 

Al cambiar la configuración de cifrado predeterminada del bucket a SSE-KMS, no se modifica el tipo de cifrado de los objetos de Amazon S3 existentes en el bucket. Para cambiar el tipo de cifrado de los objetos preexistentes tras actualizar la configuración de cifrado predeterminada a SSE-KMS, puede utilizar Operaciones por lotes de Amazon S3. A Operaciones por lotes de S3 se proporciona una lista de objetos y Operaciones por lotes llama a la operación de la API correspondiente. Puede utilizar la acción [Copia de objetos](batch-ops-copy-object.md) para copiar objetos existentes, que los vuelve a escribir en el mismo bucket que los objetos cifrados con SSE-KMS. Un solo trabajo de la herramienta de operaciones por lotes puede realizar la operación especificada en miles de millones de objetos. Para obtener más información, consulte [Realización de operaciones de objetos de forma masiva con Operaciones por lotes](batch-ops.md) y la publicación [How to retroactively encrypt existing objects in Amazon S3 using S3 Inventory, Amazon Athena, and S3 Batch Operations](https://aws.amazon.com/blogs/security/how-to-retroactively-encrypt-existing-objects-in-amazon-s3-using-s3-inventory-amazon-athena-and-s3-batch-operations/) de *AWS Storage Blog*. 

**nota**  
No es posible aplicar tipos diferentes de cifrado en el servidor al mismo objeto simultáneamente.

Si necesita cifrar los objetos existentes, utilice Operaciones por lotes de S3 e Inventario de S3. Para obtener más información, consulte [Cifrado de objetos con Operaciones por lotes de Amazon S3](https://aws.amazon.com/blogs/storage/encrypting-objects-with-amazon-s3-batch-operations/) y [Realización de operaciones de objetos de forma masiva con Operaciones por lotes](batch-ops.md).

Cuando se almacenan datos en Amazon S3, tiene cuatro opciones mutuamente excluyentes de cifrado del servidor en función de cómo elija administrar las claves de cifrado y el número de capas de cifrado que quiera aplicar.

**Cifrado del servidor con claves administradas por Amazon S3 (SSE-S3)**  
Todos los buckets de Amazon S3 tienen el cifrado configurado de forma predeterminada. La opción predeterminada para el cifrado del lado del servidor son las claves administradas de Amazon S3 (SSE-S3) Cada objeto se cifra con una clave única. Como medida de seguridad adicional, SSE-S3 cifra la propia clave con una clave raíz que cambia periódicamente. SSE-S3 utiliza uno de los cifrados de bloques más seguros disponibles, Advanced Encryption Standard de 256 bits (AES-256), para cifrar sus datos. Para obtener más información, consulte [Uso del cifrado del servidor con claves administradas por Amazon S3 (SSE-S3)](UsingServerSideEncryption.md).

**Cifrado del lado del servidor con claves AWS Key Management Service (AWS KMS) (SSE-KMS)**  
El cifrado del lado del servidor con AWS KMS keys (SSE-KMS) se proporciona mediante una integración del servicio de AWS KMS con Amazon S3. Con AWS KMS, tiene más control sobre sus claves. Por ejemplo, puede ver claves distintas, editar las políticas de control y seguir las claves en AWS CloudTrail. Además, puede crear y gestionar claves administradas por el cliente o utilizar Claves administradas por AWS que sean únicas para usted, su servicio y su región. Para obtener más información, consulte [Uso del cifrado del servidor con claves de AWS KMS (SSE-KMS)](UsingKMSEncryption.md).

**Cifrado del servidor con claves de AWS Key Management Service (AWS KMS) (SSE-KMS)**  
El cifrado del servidor de doble capa con AWS KMS keys (DSSE-KMS) es similar al de SSE-KMS, pero el DSSE-KMS aplica dos capas independientes de cifrado AES-256 en lugar de una: primero usa una clave de cifrado de datos de AWS KMS y, a continuación, una clave de cifrado administrada por Amazon S3 independiente. Como ambas capas de cifrado se aplican a un objeto del servidor, puede utilizar una amplia gama de Servicios de AWS y herramientas para analizar los datos en S3 y, al mismo tiempo, utilizar un método de cifrado que pueda satisfacer los requisitos de conformidad del cifrado multicapa. Para obtener más información, consulte [Uso del cifrado del servidor de doble capa con claves de AWS KMS (DSSE-KMS)](UsingDSSEncryption.md).

**Cifrado en el servidor con claves proporcionadas por el cliente (SSE-C)**  
Con el cifrado del servidor con claves proporcionadas por el cliente (SSE-C), usted administra las claves de cifrado y Amazon S3 administra tanto el cifrado, al escribir en los discos, como el descifrado, cuando usted accede a los objetos. Para obtener más información, consulte [Uso de cifrado en el lado del servidor con claves proporcionadas por el cliente (SSE-C)](ServerSideEncryptionCustomerKeys.md).

**nota**  
Cuando utiliza puntos de acceso para los sistemas de archivos de Amazon FSx mediante puntos de acceso de S3, tiene una opción para el cifrado del servidor.  
Todos los sistemas de archivos de Amazon FSx tienen el cifrado configurado de forma predeterminada y se cifran en reposo con claves administradas mediante AWS Key Management Service. Los datos se cifran y descifran automáticamente en el sistema de archivos a medida que se escriben y se leen desde el sistema de archivos. Estos procesos los gestiona Amazon FSx de forma transparente.

# Establecer el comportamiento del cifrado predeterminado del lado del servidor para los buckets de Amazon S3
<a name="bucket-encryption"></a>

**importante**  
Amazon S3 aplica ahora el cifrado del servidor con claves administradas por Amazon S3 (SSE-S3) como el nivel básico de cifrado para cada bucket de Amazon S3. Desde el 5 de enero de 2023, todas las cargas de objetos nuevos a Amazon S3 se cifran automáticamente sin costo adicional y sin afectar al rendimiento. El estado de cifrado automático para la configuración de cifrado predeterminada del bucket de S3 y para cargas de objetos nuevos está disponible en registros de CloudTrail, inventario de S3, Lente de almacenamiento de S3, la consola de Amazon S3 y como encabezado de respuesta a la API de Amazon S3 adicional en la AWS CLI y los AWS SDK. Para obtener más información, consulte [Preguntas frecuentes del cifrado predeterminado](https://docs.aws.amazon.com/AmazonS3/latest/userguide/default-encryption-faq.html).

Todos los bucket de Amazon S3 tienen el cifrado configurado de forma predeterminada y los objetos se cifran de forma automática con el cifrado del servidor mediante claves administradas de Amazon S3 (SSE-S3). Esta configuración de cifrado se aplica a todos los objetos de sus buckets de Amazon S3.

Si necesita más control sobre sus claves, por ejemplo, administrar la rotación de claves y las concesiones de las políticas de acceso, puede optar por utilizar el cifrado del servidor con claves de AWS Key Management Service (AWS KMS) (SSE-KMS) o con el cifrado del servidor de doble capa con claves de AWS KMS (DSSE-KMS). Para obtener más información sobre las claves de KMS, consulte [Edición de claves](https://docs.aws.amazon.com/kms/latest/developerguide/editing-keys.html) en la *Guía para desarrolladores de AWS Key Management Service*. 

**nota**  
Hemos cambiado los buckets para cifrar automáticamente las cargas de objetos nuevos. Si anteriormente creó un bucket sin cifrado predeterminado, Amazon S3 habilitará el cifrado de forma predeterminada para el bucket mediante SSE-S3. No se modificará la configuración de cifrado predeterminada para un bucket existente que ya tenga configurado SSE-S3 o SSE-KMS. Si desea cifrar sus objetos con SSE-KMS, debe cambiar el tipo de cifrado en la configuración del bucket. Para obtener más información, consulte [Uso del cifrado del servidor con claves de AWS KMS (SSE-KMS)](UsingKMSEncryption.md). 

Cuando configura el bucket para que utilice el cifrado predeterminado con SSE-KMS, también puede habilitar las claves de bucket de S3 para reducir el tráfico de Amazon S3 a AWS KMS y el costo del cifrado. Para obtener más información, consulte [Reducción del costo de SSE-KMS con las claves de bucket de Amazon S3](bucket-key.md).

Para identificar los buckets que tienen el SSE-KMS habilitado para el cifrado predeterminado, 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 proteger los datos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-lens-data-protection.html?icmpid=docs_s3_user_guide_bucket-encryption.html).

Si usa el cifrado del servidor, Amazon S3 cifra un objeto antes de guardarlo en el disco y lo descifra al descargar el objeto. Para obtener más información sobre cómo proteger los datos mediante el cifrado del servidor y la administración de claves de cifrado, consulte [Protección de los datos con el cifrado del servidor](serv-side-encryption.md).

Para obtener más información acerca de los permisos necesarios para el cifrado predeterminado, consulte [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html) en la *Referencia de API de Amazon Simple Storage Service*.

Puede configurar el cifrado predeterminado de Amazon S3 para un bucket de S3 a través de la consola de Amazon S3, los SDK de AWS, la API de REST de Amazon S3 y la AWSCommand Line Interface (AWS CLI CLI).

**Cifrado de objetos existentes**  
Para cifrar los objetos de Amazon S3 no cifrados existentes, puede utilizar las operaciones por lotes de Amazon S3. A las operaciones por lotes de S3 se les proporciona una lista de objetos en los que deben actuar. Las operaciones por lotes llaman a la API correspondiente para llevar a cabo la operación especificada. Puede utilizar la [operación de copia de la herramienta de operaciones por lotes](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-copy-object.html) para copiar objetos existentes sin cifrar y escribirlos como objetos cifrados en el mismo bucket. Un solo trabajo de la herramienta de operaciones por lotes puede realizar la operación especificada en miles de millones de objetos. Para obtener más información, consulte [Realización de operaciones de objetos de forma masiva con Operaciones por lotes](batch-ops.md) y la publicación [Encrypting objects with Amazon S3 Batch Operations](https://aws.amazon.com/blogs/storage/encrypting-objects-with-amazon-s3-batch-operations/) del *Blog de almacenamiento de AWS*.

También puede cifrar los objetos existentes mediante la operación de la API `CopyObject` o el comando `copy-object` AWS CLI. Para obtener más información, consulte la publicación [Encrypting existing Amazon S3 objects with the AWS CLI](https://aws.amazon.com/blogs/storage/encrypting-existing-amazon-s3-objects-with-the-aws-cli/) del *Blog de almacenamiento de AWS*.

**nota**  
Los buckets de Amazon S3 con cifrado de bucket predeterminado con SSE-KMS no se pueden utilizar como buckets de destino para [Registro de solicitudes con registro de acceso al servidor](ServerLogs.md). Solo se admite el cifrado predeterminado SSE-S3 para los buckets de destino del registro de acceso al servidor.

## Uso del cifrado SSE-KMS para operaciones entre cuentas
<a name="bucket-encryption-update-bucket-policy"></a>

Tenga en cuenta lo siguiente cuando utilice el cifrado para operaciones entre cuentas:
+ Si no se proporciona un nombre de recurso de Amazon (ARN) o un alias de AWS KMS key en el momento de la solicitud, ni a través de la configuración de cifrado predeterminado del bucket, se usa la Clave administrada de AWS (`aws/s3`).
+ Si está cargando o accediendo a objetos de S3 usando las entidades principales de AWS Identity and Access Management (IAM) que están en la misma Cuenta de AWS que la clave de KMS, puede usar la Clave administrada de AWS (`aws/s3`). 
+ Use una clave administrada por el cliente si desea conceder acceso entre cuentas a sus objetos de S3. Puede configurar la política de una clave administrada por el cliente para permitir el acceso desde otra cuenta.
+ Si especifica una clave de KMS administrada por el cliente, le recomendamos que use un ARN totalmente cualificado de la clave de KMS. Si, en su lugar, utiliza un alias de clave de KMS, AWS KMS resolverá la clave dentro de la cuenta del solicitante. Esto puede dar como resultado datos cifrados con una clave de KMS que pertenece al solicitante y no al propietario del bucket.
+ Debe especificar una clave para la que el solicitante le haya concedido permiso `Encrypt`. Para obtener más información, consulte [Permitir a los usuarios de claves utilizar una clave de KMS para las operaciones criptográficas](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-users-crypto) en la *Guía para desarrolladores de AWS Key Management Service*.

Para obtener más información acerca de cuándo utilizar claves administradas por el cliente y las claves de KMS administradas por AWS, consulte [¿Debo usar una clave administrada por Clave administrada de AWS o una clave administrada por el cliente para cifrar mis objetos en Amazon S3?](https://aws.amazon.com/premiumsupport/knowledge-center/s3-object-encryption-keys/)

## Uso del cifrado predeterminado con la replicación
<a name="bucket-encryption-replication"></a>

Cuando habilita el cifrado predeterminado para un bucket de destino de replicación, se aplica el siguiente comportamiento de cifrado:
+ Si los objetos del bucket de origen no están cifrados, los objetos de réplica del bucket de destino se cifran mediante la configuración de cifrado predeterminado del bucket de destino. Como resultado, las etiquetas de entidad (ETags) de los objetos de origen difieren de las ETags de los objetos de réplica. Si tiene aplicaciones que utilizan ETags, deberá actualizarlas para tener en cuenta esta diferencia.
+ Si los objetos del bucket de origen se cifran mediante el cifrado del servidor con claves administradas por Amazon S3 (SSE-S3), el cifrado del servidor con claves de AWS Key Management Service (AWS KMS) (SSE-KMS) o con cifrado del servidor de doble capa con claves de AWS KMS (DSSE-KMS), los objetos de réplica del bucket de destino utilizarán el mismo tipo de cifrado que los objetos de origen. La configuración de cifrado predeterminado del bucket de destino no se utiliza.

Para obtener más información acerca del uso del cifrado predeterminado con SSE-KMS, consulte [Replicar objetos cifrados](replication-config-for-kms-objects.md).

## Uso de claves de bucket de Amazon S3 con cifrado predeterminado
<a name="bucket-key-default-encryption"></a>

Si configura el bucket para que utilice el cifrado predeterminado para SSE-KMS en los objetos nuevos, también puede configurar las claves de bucket de S3. Las claves de bucket de S3 reducen el número de transacciones de Amazon S3 a AWS KMS para rebajar el costo de SSE-KMS. 

Cuando configura el bucket a fin de que utilice claves de bucket de S3 para SSE-KMS en objetos nuevos, AWS KMS genera una clave de bucket que se utiliza con el fin de crear una [clave de datos](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys) única para los objetos del bucket. Esta clave de bucket de S3 se utiliza durante un periodo limitado dentro de Amazon S3, lo que reduce la necesidad de que Amazon S3 realice solicitudes a AWS KMS para completar las operaciones de cifrado. 

Para obtener más información sobre el uso de claves de bucket de S3, consulte [Uso de claves de bucket de Amazon S3](bucket-key.md).

# Configuración del cifrado predeterminado
<a name="default-bucket-encryption"></a>

**importante**  
Amazon S3 aplica ahora el cifrado del servidor con claves administradas por Amazon S3 (SSE-S3) como el nivel básico de cifrado para cada bucket de Amazon S3. Desde el 5 de enero de 2023, todas las cargas de objetos nuevos a Amazon S3 se cifran automáticamente sin costo adicional y sin afectar al rendimiento. El estado de cifrado automático para la configuración de cifrado predeterminada del bucket de S3 y para cargas de objetos nuevos está disponible en registros de CloudTrail, inventario de S3, Lente de almacenamiento de S3, la consola de Amazon S3 y como encabezado de respuesta a la API de Amazon S3 adicional en la AWS CLI y los AWS SDK. Para obtener más información, consulte [Preguntas frecuentes del cifrado predeterminado](https://docs.aws.amazon.com/AmazonS3/latest/userguide/default-encryption-faq.html).

Los bucket de Amazon S3 tienen el cifrado de buckets activado de forma predeterminada y los objetos nuevos se cifran automáticamente mediante el cifrado del servidor con claves administradas de Amazon S3 (SSE-S3). Este cifrado se aplica a todos los objetos nuevos de sus buckets de Amazon S3 y no tiene ningún costo para usted.

Si necesita más control sobre las claves de cifrado, por ejemplo, administrar la rotación de claves y las concesiones de las políticas de acceso, puede optar por utilizar el cifrado del servidor con claves de AWS Key Management Service (AWS KMS) (SSE-KMS) o el cifrado del servidor de doble capa con claves de AWS KMS (DSSE-KMS). Para obtener más información sobre SSE-KMS, consulte [Especificación del cifrado del lado del servidor con AWS KMS (SSE-KMS)](specifying-kms-encryption.md). Para obtener más información sobre DSSE-KMS, consulte [Uso del cifrado del servidor de doble capa con claves de AWS KMS (DSSE-KMS)](UsingDSSEncryption.md). 

Si desea utilizar una clave de KMS propiedad de una cuenta diferente, primero debe tener permiso para utilizar la clave. Para obtener más información sobre los permisos entre cuentas para las claves de KMS, consulte [Crear claves de KMS que otras cuentas puedan utilizar](https://docs.aws.amazon.com//kms/latest/developerguide/key-policy-modifying-external-accounts.html#cross-account-console) en la *Guía para desarrolladores de AWS Key Management Service*. 

Al establecer el cifrado del bucket predeterminado en SSE-KMS, también puede configurar una clave de bucket de S3 para reducir los costos de las solicitudes de AWS KMS. Para obtener más información, consulte [Reducción del costo de SSE-KMS con las claves de bucket de Amazon S3](bucket-key.md).

**nota**  
Si utiliza [PutBucketEncryption](https://docs.aws.amazon.com//AmazonS3/latest/API/API_PutBucketEncryption.html) para establecer a SSE-KMS el cifrado predeterminado de su bucket, deberá verificar que el ID de su clave de KMS es correcto. Amazon S3 no valida el ID de clave de KMS proporcionado en las solicitudes de PutBucketEncryption.

No se aplican cargos adicionales por usar el cifrado predeterminado de buckets de S3. Las solicitudes para configurar el comportamiento de cifrado predeterminado generan cargos por solicitudes de Amazon S3 estándar. Para obtener información acerca de los precios, consulte [Precios de Amazon S3](https://aws.amazon.com/s3/pricing/). Para SSE-KMS y DSSE-KMS, se aplican los cargos de AWS KMS que se muestran en [Precios de AWS KMS](https://aws.amazon.com/kms/pricing/). 

No se admite el cifrado predeterminado del servidor con claves proporcionadas por el cliente (SSE-C).

Puede configurar el cifrado predeterminado de Amazon S3 para un bucket de S3 a través de la consola de Amazon S3, los SDK de AWS, la API de REST de Amazon S3 y la AWS Command Line Interface (AWS CLI).

**Cambios para tener en cuenta antes de habilitar el cifrado predeterminado**  
Después de habilitar el cifrado predeterminado para un bucket, se aplica el siguiente comportamiento de cifrado:
+ No hay ninguna variación en el cifrado de los objetos que existían en el bucket antes de que se habilitara el cifrado predeterminado. 
+ Cuando carga objetos después de habilitar el cifrado predeterminado:
  + Si los encabezados de las solicitudes `PUT` no incluyen información de cifrado, Amazon S3 utiliza la configuración de cifrado predeterminada del bucket para cifrar los objetos. 
  + Si los encabezados de las solicitudes `PUT` incluyen información de cifrado, Amazon S3 utiliza la información de cifrado de la solicitud `PUT` para cifrar los objetos antes de guardarlos en Amazon S3.
+ Si utiliza la opción de SSE-KMS o DSSE-KMS para la configuración de cifrado predeterminado, se le aplicarán las cuotas de solicitudes por segundo (RPS) de AWS KMS. Para obtener más información acerca de las cuotas de AWS KMS y cómo solicitar un aumento de cuota, consulte [Cuotas](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html) en la *Guía para desarrolladores de AWS Key Management Service*. 

**nota**  
Los objetos cargados antes de que se habilitara el cifrado predeterminado no se cifrarán. Para obtener más información sobre el cifrado de objetos existentes, consulte [Establecer el comportamiento del cifrado predeterminado del lado del servidor para los buckets de Amazon S3](bucket-encryption.md).

## Uso de la consola de S3
<a name="bucket-encryption-how-to-set-up-console"></a>

**Para configurar el cifrado predeterminado en un bucket de Amazon S3**

1. Inicie sesión en la Consola de administración de AWS y abra 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. En la lista **Buckets**, elija el nombre del bucket en cuestión. 

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

1. En **Cifrado predeterminado**, elija **Editar**.

1. Para configurar el cifrado, elija una de las siguientes opciones en **Tipo de cifrado**: 
   + **Cifrado del servidor con claves administradas por Amazon S3 (SSE-S3)**
   + **Cifrado del servidor con claves de AWS Key Management Service (SSE-KMS)**
   + **Cifrado del servidor de doble capa con claves de AWS Key Management Service (DSSE-KMS)**
**importante**  
Si utiliza las opciones SSE-KMS o DSSE-KMS para la configuración del cifrado predeterminado, se le aplicarán las cuotas de solicitudes por segundo (RPS) de AWS KMS. Para obtener más información acerca de las cuotas de AWS KMS y cómo solicitar un aumento de cuota, consulte [Cuotas](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html) en la *Guía para desarrolladores de AWS Key Management Service*. 

   Los buckets y los objetos nuevos se cifran de forma predeterminada con SSE-S3, a menos que especifique otro tipo de cifrado predeterminado para sus buckets. Para obtener más información acerca del cifrado predeterminado, consulte [Establecer el comportamiento del cifrado predeterminado del lado del servidor para los buckets de Amazon S3](bucket-encryption.md).

   Para obtener más información sobre el uso del cifrado del lado del servidor de Amazon S3 para cifrar los datos, consulte [Uso del cifrado del servidor con claves administradas por Amazon S3 (SSE-S3)](UsingServerSideEncryption.md).

1. Si elige el **Cifrado del servidor con claves de AWS Key Management Service (SSE-KMS)** o el **Cifrado del servidor de doble capa con claves de AWS Key Management Service (DSSE-KMS)**, haga lo siguiente: 

   1. En **Clave de AWS KMS**, especifique su clave de KMS de una de las siguientes maneras:
      + Para seleccionar de una lista de claves de KMS disponibles, marque **Elija entre sus claves de AWS KMS keys** y seleccione su **clave de KMS** de la lista de claves disponibles.

        En esta lista aparecen tanto la Clave administrada de AWS (`aws/s3`) como las claves administradas por el cliente. Para obtener más información acerca de las claves administradas por el cliente, consulte [Claves de cliente y claves de AWS](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#key-mgmt) en la *Guía para desarrolladores de AWS Key Management Service*.
      + Para introducir el ARN de la clave de KMS, elija **Introducir el ARN de la AWS KMS key** e introduzca el ARN de la clave de KMS en el campo que aparece. 
      + Para crear una nueva clave administrada por el cliente en la consola de AWS KMS, elija **Crear una clave de KMS**.

        Para obtener más información acerca de cómo crear una AWS KMS key, consulte [Creación de claves](https://docs.aws.amazon.com//kms/latest/developerguide/create-keys.html) en la *AWS Key Management Service Guía para desarrolladores*.
**importante**  
Solo puede utilizar las claves de KMS que estén habilitadas en la misma Región de AWS que el bucket. Cuando elige **Choose from your KMS master keys (Elegir entre las claves raíz de KMS)**, la consola de S3 solo muestra 100 claves de KMS por región. Si tiene más de 100 claves de KMS en la misma región, solo puede ver las primeras 100 claves de KMS en la consola S3. Para utilizar una clave de KMS que no aparezca en la consola, elija **Introducir el ARN de AWS KMS key** y escriba el ARN de la clave de KMS.  
Cuando utilice una AWS KMS key para el cifrado en el lado del servidor en Amazon S3, debe elegir una clave de cifrado de KMS simétrica. Amazon S3 solo admite claves de KMS de cifrado simétricas. Para obtener más información sobre estas claves, consulte [Symmetric encryption KMS keys](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#symmetric-cmks) (Claves de KMS de cifrado simétricas) en la *Guía para desarrolladores de AWS Key Management Service*.

      Para obtener más información sobre el uso de SSE-KMS con Amazon S3, consulte [Uso del cifrado del servidor con claves de AWS KMS (SSE-KMS)](UsingKMSEncryption.md). Para obtener más información sobre el uso de DSSE-KMS, consulte [Uso del cifrado del servidor de doble capa con claves de AWS KMS (DSSE-KMS)](UsingDSSEncryption.md).

   1. Si configura el bucket para que use el cifrado predeterminado con SSE-KMS, también puede habilitar una clave de bucket de S3. Las claves de bucket de S3 reducen el costo del cifrado al reducir el tráfico de solicitudes de Amazon S3 a AWS KMS. Para obtener más información, consulte [Reducción del costo de SSE-KMS con las claves de bucket de Amazon S3](bucket-key.md).

      Para utilizar las claves de bucket de S3, en **Clave de bucket**, seleccione **Habilitar**.
**nota**  
Las claves de bucket de S3 no son compatibles con DSSE-KMS.

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

## Mediante AWS CLI
<a name="default-bucket-encryption-cli"></a>

En estos ejemplos se muestra cómo configurar el cifrado predeterminado con SSE-S3 o SSE-KMS con una clave de bucket de S3.

Para obtener más información acerca del cifrado predeterminado, consulte [Establecer el comportamiento del cifrado predeterminado del lado del servidor para los buckets de Amazon S3](bucket-encryption.md). Para obtener más información acerca del uso de la AWS CLI para configurar el cifrado predeterminado, consulte [put-bucket-encryption](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-bucket-encryption.html).

**Example — Cifrado predeterminado con SSE-S3**  
En este ejemplo se configura el cifrado de bucket predeterminado con las claves administradas de Amazon S3.  

```
aws s3api put-bucket-encryption --bucket amzn-s3-demo-bucket --server-side-encryption-configuration '{
    "Rules": [
        {
            "ApplyServerSideEncryptionByDefault": {
                "SSEAlgorithm": "AES256"
            }
        }
    ]
}'
```

**Example — Cifrado predeterminado con SSE-KMS usando una clave de bucket de S3**  
En este ejemplo se configura el cifrado de bucket predeterminado con SSE-KMS mediante una clave de bucket de S3.   

```
aws s3api put-bucket-encryption --bucket amzn-s3-demo-bucket --server-side-encryption-configuration '{
    "Rules": [
            {
                "ApplyServerSideEncryptionByDefault": {
                    "SSEAlgorithm": "aws:kms",
                    "KMSMasterKeyID": "KMS-Key-ARN"
                },
                "BucketKeyEnabled": true
            }
        ]
    }'
```

## Uso de la API de REST
<a name="bucket-encryption-how-to-set-up-api"></a>

Utilice la operación de la API de REST `PutBucketEncryption` para habilitar el cifrado predeterminado y establecer el tipo de cifrado del servidor para usar SSE-S3, SSE-KMS o DSSE-KMS. 

Para obtener más información, consulte [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTencryption.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTencryption.html) en la *Referencia de la API de Amazon Simple Storage Service*.

# Monitoreo del cifrado predeterminado con AWS CloudTrail y Amazon EventBridge
<a name="bucket-encryption-tracking"></a>

**importante**  
Amazon S3 aplica ahora el cifrado del servidor con claves administradas por Amazon S3 (SSE-S3) como el nivel básico de cifrado para cada bucket de Amazon S3. Desde el 5 de enero de 2023, todas las cargas de objetos nuevos a Amazon S3 se cifran automáticamente sin costo adicional y sin afectar al rendimiento. El estado de cifrado automático para la configuración de cifrado predeterminada del bucket de S3 y para cargas de objetos nuevos está disponible en registros de CloudTrail, inventario de S3, Lente de almacenamiento de S3, la consola de Amazon S3 y como encabezado de respuesta a la API de Amazon S3 adicional en la AWS CLI y los AWS SDK. Para obtener más información, consulte [Preguntas frecuentes del cifrado predeterminado](https://docs.aws.amazon.com/AmazonS3/latest/userguide/default-encryption-faq.html).

Puede realizar un seguimiento de las solicitudes de configuración de cifrado predeterminado para los buckets de Amazon S3 mediante eventos de AWS CloudTrail. Los siguientes nombres de eventos de API se utilizan en los registros de CloudTrail:
+ `PutBucketEncryption`
+ `GetBucketEncryption`
+ `DeleteBucketEncryption`

También puede crear reglas de EventBridge para que coincidan con los eventos de CloudTrail para estas llamadas a la API. Para obtener más información acerca de los eventos de CloudTrail, consulte [Habilitar el registro de objetos en un bucket mediante la consola](enable-cloudtrail-logging-for-s3.md#enable-cloudtrail-events). Para obtener más información acerca de los eventos de EventBridge, consulte [Eventos de Servicios de AWS](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-service-event.html).

Puede utilizar registros de CloudTrail para acciones de Amazon S3 de objeto y así realizar un seguimiento de las solicitudes `PUT` y `POST` a Amazon S3. Puede utilizar estas acciones para verificar si se usa el cifrado predeterminado para cifrar los objetos cuando las solicitudes `PUT` entrantes no tienen encabezados de cifrado.

Cuando Amazon S3 cifra un objeto utilizando la configuración de cifrado predeterminada, el registro incluye los siguientes campos como el par de nombre-valor: `"SSEApplied":"Default_SSE_S3"`, `"SSEApplied":"Default_SSE_KMS"` o `"SSEApplied":"Default_DSSE_KMS"`.

Cuando Amazon S3 cifra un objeto utilizando los encabezados de cifrado `PUT`, el registro incluye uno de los siguientes campos como el par de nombre-valor: `"SSEApplied":"SSE_S3"`, `"SSEApplied":"SSE_KMS"`, `"SSEApplied":"DSSE_KMS"` o `"SSEApplied":"SSE_C"`. 

Para las cargas multiparte, esta información se incluye en las solicitudes de la operación de la API `InitiateMultipartUpload`. Para obtener más información sobre el uso de CloudTrail y CloudWatch, consulte [Registro y monitoreo en Amazon S3](monitoring-overview.md).

# Preguntas frecuentes de cifrado predeterminado
<a name="default-encryption-faq"></a>

Amazon S3 aplica ahora el cifrado del servidor con claves administradas por Amazon S3 (SSE-S3) como el nivel básico de cifrado para cada bucket de Amazon S3. Desde el 5 de enero de 2023, todas las cargas de objetos nuevos a Amazon S3 se cifran automáticamente sin costo adicional y sin afectar al rendimiento. SSE-S3, que utiliza el estándar de cifrado avanzado de 256 bits (AES-256), se aplica automáticamente a todos los buckets nuevos y a cualquier bucket de S3 existente que aún no tenga configurado el cifrado predeterminado. El estado de cifrado automático para la configuración de cifrado predeterminada en el bucket de S3 y para cargas de objetos nuevos está disponible en registros de AWS CloudTrail, Inventario de S3, Lente de almacenamiento de S3, la consola de Amazon S3 y como encabezado de respuesta a la API de Amazon S3 adicional en AWS Command Line Interface (AWS CLI) y los SDK de AWS.

Las siguientes secciones responden a las preguntas sobre esta actualización. 

**¿Cambiará Amazon S3 la configuración de cifrado predeterminada de los buckets que ya tienen el cifrado predeterminado configurado?**  
No. No se modificará la configuración de cifrado predeterminada para un bucket existente que ya tenga configurado el SSE-S3 o el cifrado del lado del servidor con claves de AWS Key Management Service (AWS KMS) (SSE-KMS). Para obtener más información sobre cómo definir el comportamiento de cifrado predeterminado para los bucket, consulte [Establecer el comportamiento del cifrado predeterminado del lado del servidor para los buckets de Amazon S3](bucket-encryption.md). Para obtener más información sobre la configuración de cifrado SSE-S3 y SSE-KMS, consulte [Protección de los datos con el cifrado del servidor](serv-side-encryption.md).

**¿Se habilitará el cifrado predeterminado en los buckets que no tengan configurado el cifrado predeterminado?**  
Sí. Amazon S3 ahora configura el cifrado predeterminado en todos los bucket no cifrados existentes para aplicar cifrado del lado del servidor con claves administradas de S3 (SSE-S3) como nivel base de cifrado para los objetos nuevos cargados en estos buckets. Los objetos que ya estén en un bucket sin cifrar existente no se cifrarán automáticamente.

**¿Cómo puedo ver el estado de cifrado predeterminado de las cargas de objetos nuevos?**  
Actualmente, puede ver el estado de cifrado predeterminado para cargas de objetos nuevos en registros de AWS CloudTrail, Inventario de S3, Lente de almacenamiento de S3, la consola de Amazon S3 y como encabezado de respuesta a la API de Amazon S3 adicional en AWS Command Line Interface (AWS CLI) y los SDK de AWS.
+ Para ver los eventos de CloudTrail, consulte [Visualizar eventos de CloudTrail Insights en la consola de CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events-console.html) en la *Guía del usuario de AWS CloudTrail*. Los registros de CloudTrail proporcionan un seguimiento de la API para solicitudes `PUT` y `POST` a Amazon S3. Cuando se utilice el cifrado predeterminado para cifrar los objetos de los buckets, los registros de CloudTrail para las solicitudes de la API `PUT` y `POST` incluirán el siguiente campo como par de nombre-valor: `"SSEApplied":"Default_SSE_S3"`. 
+ Para consultar el estado de cifrado automático de las cargas de objetos nuevos en el inventario de S3, configure un informe de inventario de S3 para incluir el campo de metadatos de **Encryption** (Cifrado) y, a continuación, consulte el estado de cifrado de cada objeto nuevo del informe. Para obtener más información, consulte [Configuración de inventario de Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/configure-inventory.html#storage-inventory-setting-up).
+ Para consultar el estado del cifrado automático de las cargas de objetos nuevos en S3 Storage Lens, configure un panel de S3 Storage Lens y consulte las métricas de **Encrypted bytes** (Bytes cifrados) y **Encrypted object count** (Recuento de objetos cifrados) en la categoría **Data protection** (Protección de datos) del panel. Para obtener más información, consulte [Uso de la consola de S3](storage_lens_creating_dashboard.md#storage_lens_console_creating) y [Visualización de las métricas de S3 Storage Lens en los paneles](storage_lens_view_metrics_dashboard.md).
+ Para ver el estado del cifrado automático en el nivel de bucket en la consola de Amazon S3, compruebe el **cifrado predeterminado** de los buckets de Amazon S3 en la consola de Amazon S3. Para obtener más información, consulte [Configuración del cifrado predeterminado](default-bucket-encryption.md).
+ Para ver el estado del cifrado automático como encabezado de respuesta de la API de Amazon S3 adicional en la AWS Command Line Interface (AWS CLI) y los SDK de AWS, compruebe el encabezado de respuesta `x-amz-server-side-encryption` cuando utilice las API de acción de objetos, como [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) y [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html). 

**¿Qué tengo que hacer para aprovechar este cambio?**  
No es necesario que realice ningún cambio en las aplicaciones existentes. Como el cifrado predeterminado está habilitado para todos los buckets, todos los objetos nuevos cargados en Amazon S3 se cifran automáticamente.

**¿Puedo desactivar el cifrado de los nuevos objetos que se escriben en mi bucket?**  
No. SSE-S3 es el nuevo nivel base de cifrado que se aplica a todos los objetos nuevos que se cargan en el bucket. Ya no puede desactivar el cifrado para las cargas de objetos nuevas.

**¿Se verán afectados mis cargos?**  
No. El cifrado predeterminado con SSE-S3 está disponible sin costo adicional. Se le facturará el almacenamiento, las solicitudes y otras características de Amazon S3 como se haría normalmente. Para información sobre precios, consulte [Precios de Amazon S3](https://aws.amazon.com/s3/pricing/).

**¿Amazon S3 cifrará mis objetos existentes que no estén cifrados?**  
No. A partir del 5 de enero de 2023, Amazon S3 solo cifra automáticamente las cargas de objetos nuevos. Para cifrar objetos existentes, puede utilizar Operaciones por lotes de S3 para crear copias cifradas de los objetos. Estas copias cifradas retendrán los datos y el nombre del objeto existente y se cifrarán mediante las claves de cifrado que especifique. Para obtener más información, consulte [Cifrado de objetos con operaciones por lotes de Amazon S3](https://aws.amazon.com/blogs/storage/encrypting-objects-with-amazon-s3-batch-operations/) en el *blog de almacenamiento de AWS*.

**No habilité el cifrado de mis buckets antes de esta versión. ¿Debo cambiar la forma de acceder a los objetos?**  
No. El cifrado predeterminado con SSE-S3 cifra automáticamente los datos según se escriben en Amazon S3 y los descifra para usted cuando acceda a ellos. No hay ningún cambio en la forma de acceder a los objetos que se cifran automáticamente.

**¿Debo cambiar la forma de acceder a los objetos de cifrado del cliente?**  
No. Todos los objetos cifrados del cliente que se cifran antes de cargarse en Amazon S3 llegan como objetos de texto cifrado a Amazon S3. Estos objetos tendrán ahora una capa adicional de cifrado de SSE-S3. Las cargas de trabajo que utilizan objetos cifrados del cliente no requerirán ningún cambio en los servicios de cliente ni en la configuración de autorización.

**nota**  
Los usuarios de HashiCorp Terraform que no utilicen una versión actualizada del proveedor de AWS, es posible que vean una desviación inesperada después de crear nuevos buckets de S3 sin una configuración de cifrado definida por el cliente. Para evitar esta desviación, actualice la versión del proveedor de AWS de Terraform a una de las siguientes versiones: cualquier versión de 4.x, 3.76.1 o 2.70.4.

# Actualización de cifrado del servidor para los datos existentes
<a name="update-sse-encryption"></a>

Todos los bucket de Amazon S3 tienen el cifrado configurado de forma predeterminada y los objetos se cifran de forma automática con el cifrado del servidor mediante claves administradas de Amazon S3 (SSE-S3). Esta configuración de cifrado predeterminada se aplica a todos los objetos nuevos en los buckets de Amazon S3.

Con la operación de la API `UpdateObjectEncryption`, puede actualizar automáticamente el tipo de cifrado del servidor de un objeto cifrado existente en un bucket de uso general del cifrado del servidor con el cifrado administrado por Amazon S3 (SSE-S3) al cifrado del servidor con claves de cifrado de AWS Key Management Service (AWS KMS) (SSE-KMS). La operación de la API `UpdateObjectEncryption` utiliza el [cifrado de sobre](https://docs.aws.amazon.com/kms/latest/developerguide/kms-cryptography.html#enveloping) para volver a cifrar la clave de datos utilizada para cifrar y descifrar el objeto con el tipo de cifrado del servidor recién especificado. 

Amazon S3 realiza esta actualización del tipo de cifrado sin ningún movimiento de datos. En otras palabras, cuando usa la operación `UpdateObjectEncryption`, los datos no se copian, los objetos archivados en S3 Glacier Flexible Retrieval o S3 Glacier Deep Archive no se restauran, y los objetos en la clase de almacenamiento de S3 Intelligent-Tiering no se mueven entre niveles. Además, la operación `UpdateObjectEncryption` conserva todas las propiedades de los metadatos de los objetos, incluida la clase de almacenamiento, la fecha de creación, la fecha de última modificación, ETag y las propiedades de suma de comprobación.

La operación `UpdateObjectEncryption` es compatible con todas las clases de almacenamiento de S3 compatibles con los buckets de uso general. Puede utilizar la operación `UpdateObjectEncryption` para hacer lo siguiente: 
+ Cambie los objetos cifrados del cifrado del servidor con cifrado administrado por Amazon S3 (SSE-S3) a cifrado del servidor con claves de cifrado de AWS Key Management Service (AWS KMS) (SSE-KMS).
+ Actualice los objetos cifrados de SSE-KMS por objeto para usar claves de bucket de S3, que disminuye el tráfico de solicitud de AWS KMS de Amazon S3 a AWS KMS. Para obtener más información, consulte [Reducción del costo de SSE-KMS con las claves de bucket de Amazon S3](bucket-key.md).
+ Cambie la clave de KMS administrada por el cliente que se usa para cifrar los datos, de modo que pueda cumplir con los estándares personalizados de rotación de claves.

**nota**  
Los objetos de origen que no estén cifrados o que estén cifrados con cifrado del servidor de doble capa con AWS KMS keys (DSSE-KMS) o claves de cifrado proporcionadas por el cliente (SSE-C) no son compatibles con esta operación.

La operación `UpdateObjectEncryption` se suele completar en milisegundos independientemente del tamaño del objeto o la clase de almacenamiento, incluido S3 Glacier Flexible Retrieval o S3 Glacier Deep Archive. Esta operación no cuenta como acceso para S3 Intelligent-Tiering, por lo que los objetos de la capa de acceso poco frecuente o de la capa de Archive Instant Access no volverán automáticamente a la capa de acceso frecuente si cambia el tipo de cifrado del servidor del objeto. 

`UpdateObjectEncryption` es una operación de API por objeto (plano de datos) que se registra en los registros de acceso del servidor de Amazon S3 y eventos de datos de AWS CloudTrail. Para obtener más información, consulte [Opciones de registro para Amazon S3](logging-with-S3.md). 

 La operación `UpdateObjectEncryption` tiene el mismo precio que las solicitudes `PUT`, `COPY`, `POST` y `LIST` (por 1000 solicitudes) y siempre se cobra como una solicitud de clase de almacenamiento estándar de S3, independientemente de la clase de almacenamiento del objeto subyacente. Para obtener más información, consulte [Precios de Amazon S3](https://aws.amazon.com/s3/pricing/).

## Restricciones y consideraciones
<a name="update-sse-encryption-restrictions"></a>

Al utilizar la operación `UpdateObjectEncryption`, se aplican las siguientes restricciones y consideraciones:
+ La operación `UpdateObjectEncryption` no admite objetos que no estén cifrados u objetos que estén cifrados con cifrado del servidor de doble capa con AWS KMS keys (DSSE-KMS) o claves de cifrado proporcionadas por el cliente (SSE-C). Además, no puede especificar SSE-S3 como la solicitud de `UpdateObjectEncryption` del tipo de cifrado nuevo solicitado.
+ Puede usar la operación `UpdateObjectEncryption` para actualizar objetos en buckets que tienen habilitado el control de versiones de S3. Para actualizar el tipo de cifrado de una versión concreta, debe especificar un ID de versión en la solicitud de `UpdateObjectEncryption`. Si no especifica el ID de versión, la solicitud de `UpdateObjectEncryption` actúa en la versión actual del objeto. Para obtener más información sobre el control de versiones de S3, consulte [Retención de varias versiones de objetos con Control de versiones de S3](Versioning.md).
+ La operación `UpdateObjectEncryption` produce un error en cualquier objeto al que se le aplique un modo de retención de Bloqueo de objetos de S3 o una retención legal. Si un objeto tiene un periodo de retención en modo de gobernanza o una retención legal, primero debe eliminar el estado de Bloqueo de objetos del objeto antes de emitir la solicitud de `UpdateObjectEncryption`. No puede usar la operación `UpdateObjectEncryption` con objetos a los que se les haya aplicado un periodo de retención del modo de cumplimiento de Bloqueo de objetos. Para obtener más información acerca de S3 Object Lock, consulte [Bloqueo de objetos mediante Bloqueo de objetos](object-lock.md).
+ Las solicitudes de `UpdateObjectEncryption` en los buckets de origen con la replicación en directo habilitada no iniciarán los eventos de réplica en el bucket de destino. Si desea cambiar el tipo de cifrado de los objetos en los buckets de origen y destino, debe iniciar solicitudes de `UpdateObjectEncryption` independientes en los objetos de los buckets de origen y destino.
+ De forma predeterminada, todas las solicitudes de `UpdateObjectEncryption` que especifican una clave de KMS administrada por el cliente están restringidas a las claves de KMS que son propiedad de la Cuenta de AWS del propietario del bucket. Si utiliza AWS Organizations, puede solicitar la posibilidad de utilizar AWS KMS keys si son propiedad de otras cuentas de miembros de la organización contactando con AWS Support.
+ Si usa la replicación por lotes de S3 para replicar conjuntos de datos entre regiones y los objetos anteriormente actualizaron el tipo de cifrado del servidor de SSE-S3 a SSE-KMS, es posible que necesite permisos adicionales. En el bucket de la región de origen, debe tener permisos `kms:decrypt`. A continuación, necesitará los permisos `kms:decrypt` y `kms:encrypt` para el bucket en la región de destino. 
+ Debe proporcionar un ARN de clave de KMS completo en la solicitud de `UpdateObjectEncryption`. No puede usar un nombre de alias o ARN de alias. Puede determinar el ARN de clave de KMS completo en la consola de AWS KMS o mediante la API de AWS KMS `DescribeKey`.

## Permisos necesarios
<a name="update-sse-encryption-permissions"></a>

Para realizar la operación `UpdateObjectEncryption`, debe tener los siguientes permisos: 
+ `s3:PutObject`
+ `s3:UpdateObjectEncryption`
+ `kms:Encrypt`
+ `kms:Decrypt`
+ `kms:GenerateDataKey`
+ `kms:ReEncrypt*`

Si utiliza AWS Organizations, para usar esta operación con claves de KMS administradas por el cliente de otras Cuentas de AWS dentro de la organización, debe tener el permiso `organizations:DescribeAccount`. Debe solicitar también la capacidad de usar AWS KMS keys si son propiedad de otras cuentas de miembros de la organización contactando con AWS Support.

Para realizar la operación `UpdateObjectEncryption`, agregue la siguiente política de AWS Identity and Access Management (IAM) al rol de IAM. Para utilizar esta política, sustituya `amzn-s3-demo-bucket` por el nombre del bucket de uso general y sustituya `user input placeholders` por su propia información.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [{
            "Sid": "AllowUpdateObjectEncryption",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:UpdateObjectEncryption",
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:GenerateDataKey",
                "kms:ReEncrypt*",
                "organizations:DescribeAccount"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket",
                "arn:aws:s3:::amzn-s3-demo-bucket/*",
                "arn:aws:kms:us-east-1:111122223333:key/01234567-89ab-cdef-0123-456789abcdef"
            ]
        }
    ]
}
```

## Actualización del cifrado en bloque
<a name="update-sse-encryption-bulk"></a>

Para actualizar el tipo de cifrado del servidor de más de un objeto de Amazon S3 con una sola solicitud, puede usar operaciones por lotes de S3. Puede proporcionar operaciones por lotes de S3 con una lista de objetos en los que operar o puede indicar a operaciones por lotes que genere una lista de objetos basada en los metadatos del objeto, incluidos el prefijo, la clase de almacenamiento, la fecha de creación, el tipo de cifrado, el ARN de la clave de KMS o el estado de la clave de bucket de S3. Operaciones por lotes de S3 llama a la operación de la API respectiva para realizar la operación especificada. Un solo trabajo de operaciones por lotes puede realizar la operación especificada en miles de millones de objetos dentro de un bucket que contiene petabytes de datos. Para obtener más información sobre las Operaciones por lotes, consulte [Realización de operaciones de objetos de forma masiva con Operaciones por lotes](batch-ops.md). 

Operaciones por lotes de S3 realiza un seguimiento del avance, envía notificaciones y guarda un informe de finalización de todas las acciones, por lo que proporciona una experiencia sin servidor, auditable, completamente administrada. Puede utilizar operaciones por lotes de S3 a través de la consola de Amazon S3, la AWS Command Line Interface (AWS CLI), los AWS SDK o la API de REST de Amazon S3. Para obtener más información, consulte [Actualización de cifrado de objetos](batch-ops-update-encryption.md).

## Actualización de cifrado para objetos
<a name="update-sse-encryption-single-object"></a>

Puede actualizar el tipo de cifrado del servidor de un objeto mediante la AWS Command Line Interface (AWS CLI), los AWS SDK o la API de REST de Amazon S3. 

### Actualización de cifrado de un objeto
<a name="update-sse-encryption-single-object-procedure"></a>

#### Uso de AWS CLI
<a name="update-sse-encryption-single-object-cli"></a>

Para ejecutar los siguientes comandos, debe tener instalado y configurado la AWS CLI. Si aún no ha instalado la AWS CLI, consulte [Instalación o actualización de la última versión de la AWS CLI](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-install.html) en la *Guía del usuario de la AWS Command Line Interface*.

De forma alternativa, puede ejecutar comandos de la AWS CLI desde la consola mediante AWS CloudShell. AWS CloudShell es un intérprete de comandos previamente autenticado y basado en el navegador que se puede lanzar directamente desde la Consola de administración de AWS. Para obtener más información, consulte [¿Qué es CloudShell?](https://docs.aws.amazon.com//cloudshell/latest/userguide/welcome.html) e [Introducción a AWS CloudShell](https://docs.aws.amazon.com//cloudshell/latest/userguide/getting-started.html) en la *Guía el usuario de AWS CloudShell*.

**Actualización del cifrado de un objeto mediante la AWS CLI**

Para utilizar el comando de ejemplo siguiente, sustituya `user input placeholders` con su información. 

1. Utilice el comando siguiente para actualizar el cifrado de un solo objeto (`index.html`) en el bucket de uso general (por ejemplo, `amzn-s3-demo-bucket`) para usar SSE-KMS con una clave de bucket de S3:

   ```
   aws s3api update-object-encryption \
   --bucket amzn-s3-demo-bucket \
   --key index.html \
   --object-encryption '{"SSEKMS": { "KMSKeyArn": "arn:aws:kms:us-east-1:111122223333:key/f12a345a-678e-9bbb-1025-62e317037583", "BucketKeyEnabled": true }}'
   ```
**nota**  
Debe especificar el Nombre de recurso de Amazon (ARN) de AWS KMS key completo. No se admiten el ID de clave de KMS ni el alias de clave de KMS.

1. Ejecute el comando `head-object` para ver el tipo de cifrado actualizado del objeto:

   ```
   aws s3api head-object --bucket amzn-s3-demo-bucket --key index.html
   ```

#### Uso de la API de REST
<a name="update-sse-encryption-single-object-rest-api"></a>

Puede enviar solicitudes REST para actualizar el cifrado de un objeto. Para obtener más información, consulte [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UpdateObjectEncryption.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UpdateObjectEncryption.html).

#### Uso de los AWS SDK
<a name="update-sse-encryption-single-object-sdk"></a>

Puede utilizar los AWS SDK para actualizar el cifrado de un objeto. Para obtener más información, consulte la [lista de SDK admitidos](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UpdateObjectEncryption.html#API_UpdateObjectEncryption_SeeAlso).

------
#### [ Java ]

**Example**  
En el ejemplo de AWS SDK for Java 2.x siguiente, se actualiza el tipo de cifrado a SSE-KMS para un objeto de un bucket de uso general.  

```
    public void updateObjectEncryption(String bucketName,
                                       String objectKey,
                                       String versionId,
                                       String kmsKeyArn,
                                       boolean bucketKeyEnabled) {
        // Create the target object encryption type.
        ObjectEncryption objectEncryption = ObjectEncryption.builder()
                .ssekms(SSEKMSEncryption.builder()
                        .kmsKeyArn(kmsKeyArn)
                        .bucketKeyEnabled(bucketKeyEnabled)
                        .build())
                .build();

        // Create the UpdateObjectEncryption request.
        UpdateObjectEncryptionRequest request = UpdateObjectEncryptionRequest.builder()
                .bucket(bucketName)
                .key(objectKey)
                .versionId(versionId)
                .objectEncryption(objectEncryption)
                .build();

        // Update the object encryption.
        try {
            getS3Client().updateObjectEncryption(request);
            logger.info("Object encryption updated to SSE-KMS for {} in bucket {}", objectKey, bucketName);
        } catch (S3Exception e) {
            logger.error("Failed to update to object encryption: {} - Error code: {}", e.awsErrorDetails().errorMessage(),
                    e.awsErrorDetails().errorCode());
            throw e;
        }
    }
```

------
#### [ Python ]

**Example**  
En el ejemplo de AWS SDK para Python (Boto3) siguiente, se muestra cómo actualizar el tipo de cifrado a SSE-KMS para un objeto de un bucket de uso general.   

```
response = client.update_object_encryption(
    Bucket='string',
    Key='string',
    VersionId='string',
    ObjectEncryption={
        'SSEKMS': {
                'KMSKeyArn': 'string',
                'BucketKeyEnabled': True|False
        }
    }
)
```

------

# Uso del cifrado del servidor con claves administradas por Amazon S3 (SSE-S3)
<a name="UsingServerSideEncryption"></a>

**importante**  
Amazon S3 aplica ahora el cifrado del servidor con claves administradas por Amazon S3 (SSE-S3) como el nivel básico de cifrado para cada bucket de Amazon S3. Desde el 5 de enero de 2023, todas las cargas de objetos nuevos a Amazon S3 se cifran automáticamente sin costo adicional y sin afectar al rendimiento. El estado de cifrado automático para la configuración de cifrado predeterminada del bucket de S3 y para cargas de objetos nuevos está disponible en registros de CloudTrail, inventario de S3, Lente de almacenamiento de S3, la consola de Amazon S3 y como encabezado de respuesta a la API de Amazon S3 adicional en la AWS CLI y los AWS SDK. Para obtener más información, consulte [Preguntas frecuentes del cifrado predeterminado](https://docs.aws.amazon.com/AmazonS3/latest/userguide/default-encryption-faq.html).

Todas las cargas de objetos nuevos en los buckets de Amazon S3 se cifran de forma predeterminada con cifrado del lado del servidor con claves administradas de Amazon S3 (SSE-S3).

El cifrado de lado de servidor protege los datos en reposo. Amazon S3 cifra cada objeto con una clave única. Como medida de seguridad adicional, cifra la propia clave con una clave que rota regularmente. El cifrado del servidor de Amazon S3 utiliza el modo Galois/Counter Mode (AES-GCM) estándar de cifrado avanzado de 256 bits para cifrar todos los objetos cargados.

No se aplican cargos adicionales por usar el cifrado del lado del servidor con claves administradas de Amazon S3 (SSE-S3). Sin embargo, las solicitudes para configurar la característica de cifrado predeterminadas generan cargos por solicitudes de Amazon S3 estándar. Para obtener información acerca de los precios, consulte [Precios de Amazon S3](https://aws.amazon.com/s3/pricing/).

Si necesita que las cargas de datos se cifren únicamente con claves administradas de Amazon S3, puede utilizar la siguiente política de buckets. Por ejemplo, en la siguiente política de bucket se deniega el permiso para cargar un objeto a menos que la solicitud incluya el encabezado `x-amz-server-side-encryption` para solicitar el cifrado del lado del servidor:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Id": "PutObjectPolicy",
  "Statement": [
    {
      "Sid": "DenyObjectsThatAreNotSSES3",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
      "Condition": {
        "StringNotEquals": {
          "s3:x-amz-server-side-encryption": "AES256"
        }
      }
    }
   ]
}
```

------

**nota**  
El cifrado en el servidor solo cifra los datos de objetos, no los metadatos de objetos. 

## Compatibilidad con API para el cifrado del lado del servidor
<a name="APISupportforServer-SideEncryption"></a>

Todos los buckets de Amazon S3 tienen el cifrado configurado de forma predeterminada y todos los objetos nuevos cargados en un bucket de S3 se cifran automáticamente en reposo. El cifrado del lado del servidor con claves administradas de Amazon S3 (SSE-S3) es la configuración de cifrado predeterminada para cada bucket de Amazon S3. Para usar otro tipo de cifrado, puede especificar el tipo de cifrado del servidor que se utilizará en las solicitudes `PUT` de S3 o puede actualizar la configuración de cifrado predeterminada en el bucket de destino. 

Si desea especificar un tipo de cifrado diferente en sus solicitudes `PUT`, puede utilizar el cifrado del servidor con claves de AWS Key Management Service (AWS KMS) (SSE-KMS), el cifrado del servidor de doble capa con claves de AWS KMS (DSSE-KMS) o el cifrado del servidor con claves proporcionadas por el cliente (SSE-C). Si desea establecer una configuración de cifrado predeterminada diferente en el bucket de destino, puede usar SSE-KMS o DSSE-KMS.

Para obtener más información sobre cómo cambiar la configuración de cifrado predeterminada de los buckets de uso general, consulte [Configuración del cifrado predeterminado](default-bucket-encryption.md). 

Al cambiar la configuración de cifrado predeterminada del bucket a SSE-KMS, no se modifica el tipo de cifrado de los objetos de Amazon S3 existentes en el bucket. Para cambiar el tipo de cifrado de los objetos preexistentes tras actualizar la configuración de cifrado predeterminada a SSE-KMS, puede utilizar Operaciones por lotes de Amazon S3. A Operaciones por lotes de S3 se proporciona una lista de objetos y Operaciones por lotes llama a la operación de la API correspondiente. Puede utilizar la acción [Copia de objetos](batch-ops-copy-object.md) para copiar objetos existentes, que los vuelve a escribir en el mismo bucket que los objetos cifrados con SSE-KMS. Un solo trabajo de la herramienta de operaciones por lotes puede realizar la operación especificada en miles de millones de objetos. Para obtener más información, consulte [Realización de operaciones de objetos de forma masiva con Operaciones por lotes](batch-ops.md) y la publicación [How to retroactively encrypt existing objects in Amazon S3 using S3 Inventory, Amazon Athena, and S3 Batch Operations](https://aws.amazon.com/blogs/security/how-to-retroactively-encrypt-existing-objects-in-amazon-s3-using-s3-inventory-amazon-athena-and-s3-batch-operations/) de *AWS Storage Blog*. 

Para configurar el cifrado del lado del servidor con las API de REST de creación de objetos, debe proporcionar el encabezado de solicitud `x-amz-server-side-encryption`. Para obtener más información acerca de las API de REST, consulte [Uso de la API de REST](specifying-s3-encryption.md#SSEUsingRESTAPI).

Las siguientes API de Amazon S3 admiten este encabezado:
+ **Operaciones PUT**: especifique el encabezado de solicitud al cargar datos con la API `PUT`. Para obtener más información, consulte [PUT Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html).
+ **Iniciar carga multiparte**: especifique el encabezado en la solicitud de inicio cuando cargue objetos grandes mediante la API de carga multiparte. Para obtener más información, consulte la sección sobre [Cómo iniciar la carga multiparte](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadInitiate.html).
+ **Operaciones COPY**: cuando copia un objeto, tiene un objeto de origen y otro de destino. Para obtener más información, consulte [Objeto PUT - Copia](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html).

**nota**  
Cuando utilice una operación `POST` para cargar un objeto, en vez de proporcionar el encabezado de solicitud, debe proporcionar la misma información en los campos del formulario. Para obtener más información, consulte [POST Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html). 

Los SDK de AWS también proporcionan API de encapsulamiento que puede utilizar para solicitar el cifrado del lado del servidor. También puede usar la Consola de administración de AWS para cargar objetos y solicitar el cifrado del lado del servidor.

Para obtener más información, consulte [Conceptos de AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html) en la *Guía para desarrolladores de AWS Key Management Service*.

**Topics**
+ [

## Compatibilidad con API para el cifrado del lado del servidor
](#APISupportforServer-SideEncryption)
+ [

# Especificación del cifrado del servidor con claves administradas por Amazon S3 (SSE-S3)
](specifying-s3-encryption.md)

# Especificación del cifrado del servidor con claves administradas por Amazon S3 (SSE-S3)
<a name="specifying-s3-encryption"></a>

Todos los buckets de Amazon S3 tienen el cifrado configurado de forma predeterminada y todos los objetos nuevos cargados en un bucket de S3 se cifran automáticamente en reposo. El cifrado del lado del servidor con claves administradas de Amazon S3 (SSE-S3) es la configuración de cifrado predeterminada para cada bucket de Amazon S3. Para usar otro tipo de cifrado, puede especificar el tipo de cifrado del servidor que se utilizará en las solicitudes `PUT` de S3 o puede actualizar la configuración de cifrado predeterminada en el bucket de destino. 

Si desea especificar un tipo de cifrado diferente en sus solicitudes `PUT`, puede utilizar el cifrado del servidor con claves de AWS Key Management Service (AWS KMS) (SSE-KMS), el cifrado del servidor de doble capa con claves de AWS KMS (DSSE-KMS) o el cifrado del servidor con claves proporcionadas por el cliente (SSE-C). Si desea establecer una configuración de cifrado predeterminada diferente en el bucket de destino, puede usar SSE-KMS o DSSE-KMS.

Para obtener más información sobre cómo cambiar la configuración de cifrado predeterminada de los buckets de uso general, consulte [Configuración del cifrado predeterminado](default-bucket-encryption.md). 

Al cambiar la configuración de cifrado predeterminada del bucket a SSE-KMS, no se modifica el tipo de cifrado de los objetos de Amazon S3 existentes en el bucket. Para cambiar el tipo de cifrado de los objetos preexistentes tras actualizar la configuración de cifrado predeterminada a SSE-KMS, puede utilizar Operaciones por lotes de Amazon S3. A Operaciones por lotes de S3 se proporciona una lista de objetos y Operaciones por lotes llama a la operación de la API correspondiente. Puede utilizar la acción [Copia de objetos](batch-ops-copy-object.md) para copiar objetos existentes, que los vuelve a escribir en el mismo bucket que los objetos cifrados con SSE-KMS. Un solo trabajo de la herramienta de operaciones por lotes puede realizar la operación especificada en miles de millones de objetos. Para obtener más información, consulte [Realización de operaciones de objetos de forma masiva con Operaciones por lotes](batch-ops.md) y la publicación [How to retroactively encrypt existing objects in Amazon S3 using S3 Inventory, Amazon Athena, and S3 Batch Operations](https://aws.amazon.com/blogs/security/how-to-retroactively-encrypt-existing-objects-in-amazon-s3-using-s3-inventory-amazon-athena-and-s3-batch-operations/) de *AWS Storage Blog*. 

Puede especificar SSE-S3 mediante la consola de S3, las API de REST, los SDK de AWS y la AWS Command Line Interface (AWS CLI). Para obtener más información, consulte [Establecer el comportamiento del cifrado predeterminado del lado del servidor para los buckets de Amazon S3](bucket-encryption.md).

## Uso de la consola de S3
<a name="add-object-encryption-s3"></a>

En este tema se describe cómo configurar o cambiar el tipo de cifrado que utiliza un objeto mediante la Consola de administración de AWS. Cuando copia un objeto con la consola, Amazon S3 copia el objeto tal cual. Esto significa que si el objeto de origen está cifrado, el objeto de destino también lo está. También puede usar la consola para agregar o cambiar el cifrado de un objeto. 

**nota**  
Puede cambiar el cifrado de un objeto si el objeto es menor de 5 GB. Si el objeto es mayor de 5 GB, debe usar la [AWS CLI](mpu-upload-object.md#UsingCLImpUpload) o los [AWS SDK](CopyingObjectsMPUapi.md) para cambiar el cifrado de un objeto.
Para obtener una lista de los permisos adicionales necesarios para cambiar el cifrado de un objeto, consulte [Permisos necesarios para las operaciones de la API de Amazon S3](using-with-s3-policy-actions.md). Para ver políticas de ejemplo que conceden estos permisos, consulte [Ejemplos de políticas basadas en identidad para Amazon S3](example-policies-s3.md).
Si cambia el cifrado de un objeto, se crea un nuevo objeto para reemplazar el antiguo. Si el control de versiones de S3 está activado, se crea una nueva versión del objeto y el objeto existente se convierte en una versión anterior. El rol que cambia la propiedad también se convierte en el propietario del nuevo objeto o (versión del objeto). 

**Para cambiar el cifrado de un objeto**

1. Inicie sesión en la Consola de administración de AWS y abra 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, elija **Buckets** y, a continuación, la pestaña **Buckets de uso general**. Desplácese hasta el bucket o la carpeta de Amazon S3 que contiene los objetos que desea cambiar.

1. Seleccione la casilla de verificación de los objetos que desea cambiar.

1. En el menú **Acciones**, elija **Editar cifrado del servidor** en la lista de opciones que aparece.

1. Desplácese hasta la sección **Cifrado del servidor**.

1. En **Configuración del cifrado**, elija **Usar la configuración del bucket para el cifrado predeterminado** o **Anular la configuración del bucket para el cifrado predeterminado**.

1. Si elige **Anular la configuración del bucket para el cifrado predeterminado**, debe configurar los siguientes ajustes de cifrado.

   1. En **Tipo de cifrado**, elija **Cifrado del servidor con claves administradas por Amazon S3 (SSE-S3)**. SSE-S3 utiliza uno de los cifrados de bloques más seguros, Advanced Encryption Standard de 256 bits (AES-256), para cifrar cada objeto. Para obtener más información, consulte [Uso del cifrado del servidor con claves administradas por Amazon S3 (SSE-S3)](UsingServerSideEncryption.md).

1. En **Configuración de copia adicional**, elija si desea **Copiar la configuración de origen**, **No especificar la configuración** o **Especificar la configuración**. **Copiar la configuración de origen** es la opción predeterminada. Si solo desea copiar el objeto sin los atributos de configuración de origen, elija **No especificar la configuración**. Elija **Especificar la configuración** para especificar la configuración de la clase de almacenamiento, las ACL, las etiquetas de objetos, los metadatos, el cifrado del servidor y las sumas de comprobación adicionales.

1. Elija **Save changes**.

**nota**  
En esta acción se aplica el cifrado a todos los objetos especificados. Al cifrar carpetas, espere a que finalice la operación de guardado para agregar nuevos objetos a la carpeta.

## Uso de la API de REST
<a name="SSEUsingRESTAPI"></a>

Al crear un objeto, es decir, cuando carga un objeto nuevo o hace una copia de un objeto existente, puede especificar si desea que Amazon S3 cifre los datos con claves administradas de Amazon S3 (SSE-S3) al agregar el encabezado `x-amz-server-side-encryption` en la solicitud. Configure el valor del encabezado para el algoritmo de cifrado `AES256` que admite Amazon S3. Amazon S3 confirma que su objeto se ha almacenado con SSE-S3 al devolver el encabezado de respuesta `x-amz-server-side-encryption`. 

Las siguientes operaciones de la API de carga de REST aceptan el encabezado de solicitud `x-amz-server-side-encryption`.
+ [PUT Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html)
+ [PUT Object - Copy](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html)
+ [POST Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html)
+ [Initiate Multipart Upload](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadInitiate.html)

Cuando cargue objetos grandes con la operación de la API de carga multiparte, puede especificar el cifrado del lado del servidor añadiendo el encabezado `x-amz-server-side-encryption` a la solicitud Iniciar carga multiparte. Cuando copie un objeto existente, independientemente de si el objeto de origen está cifrado o no, el objeto de destino no estará cifrado, a no ser que solicite explícitamente el cifrado del lado del servidor.

Los encabezados de respuesta de las siguientes operaciones de la API de REST devuelven el encabezado `x-amz-server-side-encryption` cuando un objeto se almacena con SSE-S3. 
+ [PUT Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html)
+ [PUT Object - Copy](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html)
+ [POST Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html)
+ [Initiate Multipart Upload](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadInitiate.html)
+ [Upload Part](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadUploadPart.html)
+ [Upload Part - Copy](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadUploadPartCopy.html)
+ [Complete Multipart Upload](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadComplete.html)
+ [Get Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html)
+ [Head Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectHEAD.html)

**nota**  
No envíe encabezados de solicitud de cifrado para las solicitudes `GET` y `HEAD` si el objeto utiliza SSE-S3, porque recibirá un error de código de error HTTP 400 (Solicitud errónea).

## Uso de los AWS SDK
<a name="s3-using-sdks"></a>

Si utiliza los SDK de AWS, puede solicitar a Amazon S3 que utilice el cifrado del lado del servidor con claves de cifrado administradas por Amazon S3 (SSE-S3). En esta sección, se proporcionan ejemplos de uso de los SDK de AWS en diferentes lenguajes. Para obtener información acerca de otros SDK, consulte [Código de muestra y bibliotecas](https://aws.amazon.com/code). 

------
#### [ Java ]

Cuando use el AWS SDK para Java para cargar un objeto, puede usar SSE-S3 para cifrarlo. Para solicitar cifrado del lado del servidor utilice la propiedad `ObjectMetadata` de la `PutObjectRequest` para establecer el encabezado de solicitud `x-amz-server-side-encryption`. Cuando llama al método `putObject()` del `AmazonS3Client`, Amazon S3 cifra y guarda los datos.

También puede solicitar el cifrado SSE-S3 cuando cargue objetos con la operación de la API de carga multiparte: 
+ Al usar la operación de la API de carga multiparte de nivel alto, utiliza los métodos `TransferManager` para aplicar cifrado del lado del servidor a los objetos a medida que los carga. Puede utilizar cualquier método de carga que tome `ObjectMetadata` como parámetro. Para obtener más información, consulte [Carga de un objeto con la carga multiparte](mpu-upload-object.md).
+ Cuando utiliza la operación de la API de carga multiparte de nivel bajo, especifica el cifrado del lado del servidor al iniciar la carga multiparte. Añade la propiedad `ObjectMetadata` al llamar al método `InitiateMultipartUploadRequest.setObjectMetadata()`. Para obtener más información, consulte [Uso de los SDK de AWS (API de bajo nivel)](mpu-upload-object.md#mpu-upload-low-level).

No puede cambiar directamente el estado de cifrado de un objeto (cifrado de un objeto no cifrado o descifrado de un objeto cifrado). Para cambiar el estado de cifrado de un objeto, realice una copia del objeto, especifique el estado de cifrado deseado para la copia y elimine el objeto original. Amazon S3 cifra el objeto copiado solo si solicita explícitamente el cifrado del lado del servidor. Para solicitar el cifrado del objeto copiado por medio de la API de Java, use la propiedad `ObjectMetadata` para especificar el cifrado del lado del servidor en la `CopyObjectRequest`.

**Example Ejemplo**  
En el siguiente ejemplo se muestra cómo establecer el cifrado del lado del servidor con el AWS SDK para Java. Se muestra cómo realizar las siguientes tareas:  
+ Cargue un objeto nuevo mediante SSE-S3.
+ Cambiar el estado de cifrado de un objeto (en este ejemplo, cifrar un objeto que no estaba cifrado anteriormente) copiando el objeto.
+ Comprobar el estado de cifrado del objeto.
Para obtener más información acerca del cifrado del lado del servidor, consulte [Uso de la API de REST](#SSEUsingRESTAPI). Para obtener instrucciones sobre cómo crear y probar una muestra funcional, consulte [Introducción](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/getting-started.html) en la Guía para desarrolladores de AWS SDK para Java.  

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.internal.SSEResultBase;
import com.amazonaws.services.s3.model.*;

import java.io.ByteArrayInputStream;

public class SpecifyServerSideEncryption {

    public static void main(String[] args) {
        Regions clientRegion = Regions.DEFAULT_REGION;
        String bucketName = "*** Bucket name ***";
        String keyNameToEncrypt = "*** Key name for an object to upload and encrypt ***";
        String keyNameToCopyAndEncrypt = "*** Key name for an unencrypted object to be encrypted by copying ***";
        String copiedObjectKeyName = "*** Key name for the encrypted copy of the unencrypted object ***";

        try {
            AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                    .withRegion(clientRegion)
                    .withCredentials(new ProfileCredentialsProvider())
                    .build();

            // Upload an object and encrypt it with SSE.
            uploadObjectWithSSEEncryption(s3Client, bucketName, keyNameToEncrypt);

            // Upload a new unencrypted object, then change its encryption state
            // to encrypted by making a copy.
            changeSSEEncryptionStatusByCopying(s3Client,
                    bucketName,
                    keyNameToCopyAndEncrypt,
                    copiedObjectKeyName);
        } catch (AmazonServiceException e) {
            // The call was transmitted successfully, but Amazon S3 couldn't process
            // it, so it returned an error response.
            e.printStackTrace();
        } catch (SdkClientException e) {
            // Amazon S3 couldn't be contacted for a response, or the client
            // couldn't parse the response from Amazon S3.
            e.printStackTrace();
        }
    }

    private static void uploadObjectWithSSEEncryption(AmazonS3 s3Client, String bucketName, String keyName) {
        String objectContent = "Test object encrypted with SSE";
        byte[] objectBytes = objectContent.getBytes();

        // Specify server-side encryption.
        ObjectMetadata objectMetadata = new ObjectMetadata();
        objectMetadata.setContentLength(objectBytes.length);
        objectMetadata.setSSEAlgorithm(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION);
        PutObjectRequest putRequest = new PutObjectRequest(bucketName,
                keyName,
                new ByteArrayInputStream(objectBytes),
                objectMetadata);

        // Upload the object and check its encryption status.
        PutObjectResult putResult = s3Client.putObject(putRequest);
        System.out.println("Object \"" + keyName + "\" uploaded with SSE.");
        printEncryptionStatus(putResult);
    }

    private static void changeSSEEncryptionStatusByCopying(AmazonS3 s3Client,
            String bucketName,
            String sourceKey,
            String destKey) {
        // Upload a new, unencrypted object.
        PutObjectResult putResult = s3Client.putObject(bucketName, sourceKey, "Object example to encrypt by copying");
        System.out.println("Unencrypted object \"" + sourceKey + "\" uploaded.");
        printEncryptionStatus(putResult);

        // Make a copy of the object and use server-side encryption when storing the
        // copy.
        CopyObjectRequest request = new CopyObjectRequest(bucketName,
                sourceKey,
                bucketName,
                destKey);
        ObjectMetadata objectMetadata = new ObjectMetadata();
        objectMetadata.setSSEAlgorithm(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION);
        request.setNewObjectMetadata(objectMetadata);

        // Perform the copy operation and display the copy's encryption status.
        CopyObjectResult response = s3Client.copyObject(request);
        System.out.println("Object \"" + destKey + "\" uploaded with SSE.");
        printEncryptionStatus(response);

        // Delete the original, unencrypted object, leaving only the encrypted copy in
        // Amazon S3.
        s3Client.deleteObject(bucketName, sourceKey);
        System.out.println("Unencrypted object \"" + sourceKey + "\" deleted.");
    }

    private static void printEncryptionStatus(SSEResultBase response) {
        String encryptionStatus = response.getSSEAlgorithm();
        if (encryptionStatus == null) {
            encryptionStatus = "Not encrypted with SSE";
        }
        System.out.println("Object encryption status is: " + encryptionStatus);
    }
}
```

------
#### [ .NET ]

Cuando carga un objeto, puede indicar a Amazon S3 que lo cifre. Para cambiar el estado de cifrado de un objeto existente, realice una copia del objeto y elimine el objeto de origen. De forma predeterminada la operación de copia cifra el destino solo si usted solicita explícitamente cifrado del lado del servidor del objeto de destino. Para especificar SSE-S3 en el `CopyObjectRequest`, añada lo siguiente:

```
 ServerSideEncryptionMethod = ServerSideEncryptionMethod.AES256
```

Para obtener una muestra funcional que indica cómo copiar un objeto, consulte [Uso de los AWS SDK](copy-object.md#CopyingObjectsUsingSDKs). 

En el siguiente ejemplo se carga un objeto. En la solicitud, el ejemplo indica a Amazon S3 que cifre el objeto. A continuación el ejemplo recupera los metadatos de los objetos y comprueba el método de cifrado que se utilizó. Para obtener información acerca de cómo configurar y ejecutar ejemplos de código, consulte [Introducción al SDK de AWS para .NET](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html) en la *Guía para desarrolladores del SDK de AWS para .NET*. 

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    class SpecifyServerSideEncryptionTest
    {
        private const string bucketName = "*** bucket name ***";
        private const string keyName = "*** key name for object created ***";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
        private static IAmazonS3 client;

        public static void Main()
        {
            client = new AmazonS3Client(bucketRegion);
            WritingAnObjectAsync().Wait();
        }

        static async Task WritingAnObjectAsync()
        {
            try
            {
                var putRequest = new PutObjectRequest
                {
                    BucketName = bucketName,
                    Key = keyName,
                    ContentBody = "sample text",
                    ServerSideEncryptionMethod = ServerSideEncryptionMethod.AES256
                };

                var putResponse = await client.PutObjectAsync(putRequest);

                // Determine the encryption state of an object.
                GetObjectMetadataRequest metadataRequest = new GetObjectMetadataRequest
                {
                    BucketName = bucketName,
                    Key = keyName
                };
                GetObjectMetadataResponse response = await client.GetObjectMetadataAsync(metadataRequest);
                ServerSideEncryptionMethod objectEncryption = response.ServerSideEncryptionMethod;

                Console.WriteLine("Encryption method used: {0}", objectEncryption.ToString());
            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine("Error encountered ***. Message:'{0}' when writing an object", e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
            }
        }
    }
}
```

------
#### [ PHP ]

En este tema se explica cómo usar las clases de la versión 3 de AWS SDK para PHP para agregar SSE-S3 a objetos que cargue a Amazon S3. Para obtener más información acerca de la API del SDK de AWS para Ruby, consulte [SDK de AWS para Ruby, versión 2](https://docs.aws.amazon.com/sdkforruby/api/index.html).

Para cargar un objeto en Amazon S3, use el método [Aws\$1S3\$1S3Client::putObject()](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putobject). Para añadir el encabezado de solicitud `x-amz-server-side-encryption` a su solicitud de carga, especifique el parámetro `ServerSideEncryption` con el valor `AES256`, como se muestra en el siguiente ejemplo de código. Para obtener información acerca de solicitudes de cifrado del lado del servidor, consulte [Uso de la API de REST](#SSEUsingRESTAPI).

```
 require 'vendor/autoload.php';

use Aws\S3\S3Client;

$bucket = '*** Your Bucket Name ***';
$keyname = '*** Your Object Key ***';

// $filepath should be an absolute path to a file on disk.
$filepath = '*** Your File Path ***';

$s3 = new S3Client([
    'version' => 'latest',
    'region'  => 'us-east-1'
]);

// Upload a file with server-side encryption.
$result = $s3->putObject([
    'Bucket'               => $bucket,
    'Key'                  => $keyname,
    'SourceFile'           => $filepath,
    'ServerSideEncryption' => 'AES256',
]);
```

Como respuesta, Amazon S3 devuelve el encabezado `x-amz-server-side-encryption` con el valor del algoritmo de cifrado que se utilizó para cifrar los datos del objeto. 

Cuando carga objetos grandes con la operación de la API de carga multiparte, puede especificar SSE-S3 para los objetos que está cargando, como sigue: 
+ Cuando utilice la operación de la API de carga multiparte de bajo nivel, especifique el cifrado del lado del servidor al llamar al método [Aws\$1S3\$1S3Client::createMultipartUpload()](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#createmultipartupload). Para agregar el encabezado de solicitud `x-amz-server-side-encryption` a su solicitud, especifique la clave del parámetro de la `array` `ServerSideEncryption` con el valor `AES256`. Para obtener más información sobre la operación de la API de carga multiparte de bajo nivel, consulte [Uso de los SDK de AWS (API de bajo nivel)](mpu-upload-object.md#mpu-upload-low-level).
+ Cuando utilice la operación de la API de carga multiparte de alto nivel, especifique el cifrado del lado del servidor mediante el parámetro `ServerSideEncryption` de la operación de la API [CreateMultipartUpload](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#createmultipartupload). Para ver un ejemplo sobre cómo usar el método `setOption()` con la operación de la API de carga multiparte de alto nivel, consulte [Carga de un objeto con la carga multiparte](mpu-upload-object.md).

Para determinar el estado de cifrado de un objeto existente, recupere los metadatos del objeto llamando al método [Aws\$1S3\$1S3Client::headObject()](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#headobject) como se muestra en el siguiente ejemplo de código PHP.

```
 require 'vendor/autoload.php';

use Aws\S3\S3Client;

$bucket = '*** Your Bucket Name ***';
$keyname = '*** Your Object Key ***';

$s3 = new S3Client([
    'version' => 'latest',
    'region'  => 'us-east-1'
]);

// Check which server-side encryption algorithm is used.
$result = $s3->headObject([
    'Bucket' => $bucket,
    'Key'    => $keyname,
]);
echo $result['ServerSideEncryption'];
```

Para cambiar el estado de cifrado de un objeto existente, realice una copia del objeto con el método [Aws\$1S3\$1S3Client::copyObject()](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#copyobject) y elimine el objeto de origen. De forma predeterminada, `copyObject()` no cifra el objeto de destino, a menos que solicite de forma explícita el cifrado del lado del servidor con el parámetro `ServerSideEncryption` con el valor `AES256`. El siguiente ejemplo de código PHP realiza una copia de un objeto y agrega cifrado en el servidor al objeto copiado.

```
 require 'vendor/autoload.php';

use Aws\S3\S3Client;

$sourceBucket = '*** Your Source Bucket Name ***';
$sourceKeyname = '*** Your Source Object Key ***';

$targetBucket = '*** Your Target Bucket Name ***';
$targetKeyname = '*** Your Target Object Key ***';

$s3 = new S3Client([
    'version' => 'latest',
    'region'  => 'us-east-1'
]);

// Copy an object and add server-side encryption.
$s3->copyObject([
    'Bucket'               => $targetBucket,
    'Key'                  => $targetKeyname,
    'CopySource'           => "$sourceBucket/$sourceKeyname",
    'ServerSideEncryption' => 'AES256',
]);
```

Para obtener más información, consulte los temas siguientes:
+ [AWS SDK para PHP para la clase Aws\$1S3\$1S3Client de Amazon S](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.S3.S3Client.html) 
+ [AWS SDK para PHP documentación](https://aws.amazon.com/documentation/sdk-for-php/)

------
#### [ Ruby ]

Si utiliza AWS SDK para Ruby para cargar un objeto, puede especificar que el objeto se almacene cifrado en reposo con SSE-S3. Cuando vuelve a leer el objeto, este se descifra automáticamente.

En el siguiente ejemplo de AWS SDK para Ruby versión 3 se muestra cómo especificar que un archivo cargado en Amazon S3 quede cifrado en reposo.

```
require 'aws-sdk-s3'

# Wraps Amazon S3 object actions.
class ObjectPutSseWrapper
  attr_reader :object

  # @param object [Aws::S3::Object] An existing Amazon S3 object.
  def initialize(object)
    @object = object
  end

  def put_object_encrypted(object_content, encryption)
    @object.put(body: object_content, server_side_encryption: encryption)
    true
  rescue Aws::Errors::ServiceError => e
    puts "Couldn't put your content to #{object.key}. Here's why: #{e.message}"
    false
  end
end

# Example usage:
def run_demo
  bucket_name = "amzn-s3-demo-bucket"
  object_key = "my-encrypted-content"
  object_content = "This is my super-secret content."
  encryption = "AES256"

  wrapper = ObjectPutSseWrapper.new(Aws::S3::Object.new(bucket_name, object_content))
  return unless wrapper.put_object_encrypted(object_content, encryption)

  puts "Put your content into #{bucket_name}:#{object_key} and encrypted it with #{encryption}."
end

run_demo if $PROGRAM_NAME == __FILE__
```

El siguiente ejemplo de código muestra cómo determinar el estado de cifrado de un objeto existente.

```
require 'aws-sdk-s3'

# Wraps Amazon S3 object actions.
class ObjectGetEncryptionWrapper
  attr_reader :object

  # @param object [Aws::S3::Object] An existing Amazon S3 object.
  def initialize(object)
    @object = object
  end

  # Gets the object into memory.
  #
  # @return [Aws::S3::Types::GetObjectOutput, nil] The retrieved object data if successful; otherwise nil.
  def object
    @object.get
  rescue Aws::Errors::ServiceError => e
    puts "Couldn't get object #{@object.key}. Here's why: #{e.message}"
  end
end

# Example usage:
def run_demo
  bucket_name = "amzn-s3-demo-bucket"
  object_key = "my-object.txt"

  wrapper = ObjectGetEncryptionWrapper.new(Aws::S3::Object.new(bucket_name, object_key))
  obj_data = wrapper.get_object
  return unless obj_data

  encryption = obj_data.server_side_encryption.nil? ? 'no' : obj_data.server_side_encryption
  puts "Object #{object_key} uses #{encryption} encryption."
end

run_demo if $PROGRAM_NAME == __FILE__
```

Si no se utiliza el cifrado del lado del servidor para el objeto almacenado en Amazon S3, el método devolverá `null`.

Para cambiar el estado de cifrado de un objeto existente, realice una copia del objeto y elimine el objeto de origen. De forma predeterminada, los métodos de copia no cifran el objeto de destino, a menos que solicite de forma explícita el cifrado del lado del servidor. Puede solicitar el cifrado del objeto de destino al especificar el valor `server_side_encryption` en el argumento hash de la opción, tal como se muestra en el siguiente código de ejemplo de Ruby. El ejemplo de código muestra cómo copiar un objeto y cifrar la copia con SSE-S3. 

```
require 'aws-sdk-s3'

# Wraps Amazon S3 object actions.
class ObjectCopyEncryptWrapper
  attr_reader :source_object

  # @param source_object [Aws::S3::Object] An existing Amazon S3 object. This is used as the source object for
  #                                        copy actions.
  def initialize(source_object)
    @source_object = source_object
  end

  # Copy the source object to the specified target bucket, rename it with the target key, and encrypt it.
  #
  # @param target_bucket [Aws::S3::Bucket] An existing Amazon S3 bucket where the object is copied.
  # @param target_object_key [String] The key to give the copy of the object.
  # @return [Aws::S3::Object, nil] The copied object when successful; otherwise, nil.
  def copy_object(target_bucket, target_object_key, encryption)
    @source_object.copy_to(bucket: target_bucket.name, key: target_object_key, server_side_encryption: encryption)
    target_bucket.object(target_object_key)
  rescue Aws::Errors::ServiceError => e
    puts "Couldn't copy #{@source_object.key} to #{target_object_key}. Here's why: #{e.message}"
  end
end

# Example usage:
def run_demo
  source_bucket_name = "amzn-s3-demo-bucket1"
  source_key = "my-source-file.txt"
  target_bucket_name = "amzn-s3-demo-bucket2"
  target_key = "my-target-file.txt"
  target_encryption = "AES256"

  source_bucket = Aws::S3::Bucket.new(source_bucket_name)
  wrapper = ObjectCopyEncryptWrapper.new(source_bucket.object(source_key))
  target_bucket = Aws::S3::Bucket.new(target_bucket_name)
  target_object = wrapper.copy_object(target_bucket, target_key, target_encryption)
  return unless target_object

  puts "Copied #{source_key} from #{source_bucket_name} to #{target_object.bucket_name}:#{target_object.key} and "\
       "encrypted the target with #{target_object.server_side_encryption} encryption."
end

run_demo if $PROGRAM_NAME == __FILE__
```

------

## Uso de AWS CLI
<a name="sse-s3-aws-cli"></a>

Para especificar SSE-S3 al cargar un objeto mediante la AWS CLI, utilice el siguiente ejemplo.

```
aws s3api put-object --bucket amzn-s3-demo-bucket1 --key object-key-name --server-side-encryption AES256  --body file path
```

Para obtener más información, consulte [put-object](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-object.html) en la *Referencia de la AWS CLI*. Para especificar SSE-S3 al copiar un objeto mediante la AWS CLI, consulte [copy-object](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/copy-object.html).

## Uso de CloudFormation
<a name="ss3-s3-cfn"></a>

Para obtener ejemplos de configuración de cifrado mediante CloudFormation, consulte [Crear un bucket con cifrado predeterminado](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-serversideencryptionrule.html#aws-properties-s3-bucket-serversideencryptionrule--examples--Create_a_bucket_with_default_encryption) y [Crear un bucket mediante el cifrado del lado del servidor AWS KMS con una clave de bucket de S3](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-serversideencryptionrule.html#aws-properties-s3-bucket-serversideencryptionrule--examples--Create_a_bucket_using_AWS_KMS_server-side_encryption_with_an_S3_Bucket_Key) en el tema `AWS::S3::Bucket ServerSideEncryptionRule` de la *Guía del usuario de AWS CloudFormation*. 

# Uso del cifrado del servidor con claves de AWS KMS (SSE-KMS)
<a name="UsingKMSEncryption"></a>

**importante**  
Amazon S3 aplica ahora el cifrado del servidor con claves administradas por Amazon S3 (SSE-S3) como el nivel básico de cifrado para cada bucket de Amazon S3. Desde el 5 de enero de 2023, todas las cargas de objetos nuevos a Amazon S3 se cifran automáticamente sin costo adicional y sin afectar al rendimiento. El estado de cifrado automático para la configuración de cifrado predeterminada del bucket de S3 y para cargas de objetos nuevos está disponible en registros de CloudTrail, inventario de S3, Lente de almacenamiento de S3, la consola de Amazon S3 y como encabezado de respuesta a la API de Amazon S3 adicional en la AWS CLI y los AWS SDK. Para obtener más información, consulte [Preguntas frecuentes del cifrado predeterminado](https://docs.aws.amazon.com/AmazonS3/latest/userguide/default-encryption-faq.html).

El cifrado del lado del servidor es el cifrado de datos en su destino por la aplicación o servicio que los recibe.

Amazon S3 habilita automáticamente el cifrado del lado del servidor con claves administradas de Amazon S3 (SSE-S3) para cargar objetos nuevos.

A menos que especifique lo contrario, los buckets utilizan SSE-S3 de forma predeterminada para cifrar objetos. Sin embargo, puede elegir configurar buckets para utilizar el cifrado del lado del servidor con claves de AWS Key Management Service (AWS KMS) (SSE-KMS). Para obtener más información, consulte [Especificación del cifrado del lado del servidor con AWS KMS (SSE-KMS)](specifying-kms-encryption.md).

AWS KMS es un servicio que combina hardware y software seguros y de alta disponibilidad para ofrecer un sistema de administración de claves adaptado a la nube. Amazon S3 utiliza el cifrado del lado del servidor con AWS KMS (SSE-KMS) para cifrar los datos de objetos de S3. Además, cuando se solicita SSE-KMS para el objeto, la suma de comprobación de S3 (como parte de los metadatos del objeto) se almacena de forma cifrada. Para obtener más información acerca de la suma de comprobación, consulte [Comprobación de la integridad de objetos en Amazon S3](checking-object-integrity.md).

Si utiliza claves de KMS, puede utilizar AWS KMS a través de la [Consola de administración de AWS](https://console.aws.amazon.com/kms) o la [API de AWS KMS](https://docs.aws.amazon.com/kms/latest/APIReference/) para hacer lo siguiente: 
+ Cree, vea, edite, monitoree, habilite o desactive, rote y programe la eliminación de claves de KMS de forma centralizada.
+ Defina las políticas que controlan cómo y quién puede utilizar las claves de KMS.
+ Audite el uso correcto de las claves de KMS. La [API de AWS KMS](https://docs.aws.amazon.com/kms/latest/APIReference/) admite la auditoría, per no la [consola de AWS KMS](https://console.aws.amazon.com/kms).



Los controles de seguridad de AWS KMS pueden ayudarle a cumplir los requisitos de conformidad relacionados con el cifrado. Puede usar estas claves de KMS para proteger sus datos en buckets de Amazon S3. Al utilizar el cifrado SSE-KMS con un bucket de S3, AWS KMS keys debe estar en la misma región que ese bucket.

La utilización de conlleva cargos adicionales AWS KMS keys. Para obtener más información, consulte [AWS KMS key los conceptos](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys) en la *AWS Key Management Service Guía para desarrolladores* y [AWS KMS los precios](https://aws.amazon.com/kms/pricing).

Para obtener instrucciones sobre cómo permitir que los usuarios de IAM accedan a buckets cifrados de KMS, consulte [Mi bucket de Amazon S3 tiene un cifrado predeterminado mediante una clave de AWS KMS personalizada. ¿Cómo puedo permitir que los usuarios realicen operaciones de carga y descarga en el bucket?](https://repost.aws/knowledge-center/s3-bucket-access-default-encryption) en el Centro de conocimiento de AWS re:Post.

**Permisos**  
Para realizar correctamente una solicitud `PutObject` para cifrar un objeto con una clave de AWS KMS en Amazon S3, necesita permisos `kms:GenerateDataKey` en la clave. Para descargar un objeto cifrado con una AWS KMS key, es necesario contar con los permisos `kms:Decrypt` para la clave. Para [realizar una carga multiparte](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html#mpuAndPermissions) para cifrar un objeto con una AWS KMS key, debe tener los permisos `kms:GenerateDataKey` y `kms:Decrypt` para la clave.

**importante**  
Revise detenidamente los permisos que se otorgan en sus políticas de claves de KMS. Limite siempre los permisos de la política de claves de KMS administradas por el cliente únicamente a las entidades principales de IAM y los servicios de AWS que deben acceder a la acción clave de AWS KMS correspondiente. Para más información, consulte [Políticas de claves en AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html).

**Topics**
+ [

## AWS KMS keys
](#aws-managed-customer-managed-keys)
+ [

## Claves de bucket de Amazon S3
](#sse-kms-bucket-keys)
+ [

## Requisito de cifrado del lado del servidor
](#require-sse-kms)
+ [

## Contexto de cifrado
](#encryption-context)
+ [

## Envío de solicitudes para objetos cifrados de AWS KMS
](#aws-signature-version-4-sse-kms)
+ [

# Especificación del cifrado del lado del servidor con AWS KMS (SSE-KMS)
](specifying-kms-encryption.md)
+ [

# Reducción del costo de SSE-KMS con las claves de bucket de Amazon S3
](bucket-key.md)

## AWS KMS keys
<a name="aws-managed-customer-managed-keys"></a>

Cuando utiliza el cifrado del lado del servidor con AWS KMS (SSE-KMS), puede utilizar la [clave administrada por AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) predeterminada o especificar una [clave administrada por el cliente](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) que ya haya creado. AWS KMS admite el *cifrado de sobres*. S3 utiliza las funciones de AWS KMS para *cifrado de sobres* para proteger aún más los datos. El cifrado de sobres es la práctica de cifrar los datos que son texto no cifrado con una clave de datos y, a continuación, cifrar la propia clave de datos con una clave de KMS. Para obtener más información acerca del cifrado de sobre, consulte [Cifrado de sobre](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#enveloping) en la *Guía para desarrolladores de AWS Key Management Service*.

Si no especifica una clave administrada por el cliente, Amazon S3 creará de manera automática una Clave administrada de AWS en su Cuenta de AWS la primera vez que agregue un objeto cifrado con SSE-KMS a un bucket. De forma predeterminada, Amazon S3 utiliza esta clave de KMS para SSE-KMS. 

**nota**  
Los objetos cifrados mediante SSE-KMS con [Claves administradas por AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) no se pueden compartir entre cuentas. Si necesita compartir datos de SSE-KMS entre cuentas, debe utilizar una [clave administrada por el cliente](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) de AWS KMS. 

Si desea utilizar una clave administrada por el cliente para SSE-KMS, cree una clave administrada por el cliente de cifrado simétrico antes de configurar SSE-KMS. Luego cuando configure SSE-KMS para el bucket, especifique la clave administrada por el cliente existente. Para obtener más información sobre la clave de cifrado simétrica, consulte [Symmetric encryption KMS keys](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#symmetric-cmks) (Claves de KMS de cifrado simétricas) en la *Guía para desarrolladores de AWS Key Management Service*.

Crear una clave administrada por el cliente le da más flexibilidad y control. Por ejemplo, puede crear, rotar y deshabilitar las claves administradas por el cliente. También puede definir controles de acceso y auditar las claves administradas por el cliente que utiliza para proteger sus datos. Para obtener más información acerca de las claves administradas por el cliente y AWS, consulte [Claves de cliente y claves de AWS](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#key-mgmt) en la *Guía para desarrolladores de AWS Key Management Service*.

**nota**  
Cuando utiliza el cifrado del lado del servidor con una clave administrada por el cliente que se almacena en un almacén de claves externo, a diferencia de las claves de KMS estándar, es responsable de garantizar la disponibilidad y la durabilidad del material de la clave. Para obtener más información sobre los almacenes de claves externos y cómo cambian el modelo de responsabilidad compartida, consulte [Almacenes de claves externos](https://docs.aws.amazon.com//kms/latest/developerguide/keystore-external.html) en la *Guía para desarrolladores de AWS Key Management Service*.

### Uso del cifrado SSE-KMS para operaciones entre cuentas
<a name="sse-kms-cross-account-operations"></a>

Tenga en cuenta lo siguiente cuando utilice el cifrado para operaciones entre cuentas:
+ Si no se proporciona un nombre de recurso de Amazon (ARN) o un alias de AWS KMS key en el momento de la solicitud, ni a través de la configuración de cifrado predeterminada del bucket, se usa la Clave administrada de AWS (`aws/s3`) de la cuenta de carga para el cifrado y es obligatoria para el descifrado.
+ Clave administrada de AWS (`aws/s3`) se puede usar como clave de KMS para operaciones entre cuentas cuando las entidades principales de carga y acceso de AWS Identity and Access Management (IAM) provienen de la misma Cuenta de AWS.
+ Use una clave administrada por el cliente si desea conceder acceso entre cuentas a sus objetos de S3. Puede configurar la política de una clave administrada por el cliente para permitir el acceso desde otra cuenta.
+ Si especifica una clave de KMS administrada por el cliente, le recomendamos que use un ARN totalmente cualificado de la clave de KMS. Si, en su lugar, utiliza un alias de clave de KMS, AWS KMS resolverá la clave dentro de la cuenta del solicitante. Esto puede dar como resultado datos cifrados con una clave de KMS que pertenece al solicitante y no al propietario del bucket.
+ Debe especificar una clave para la que el solicitante le haya concedido permiso `Encrypt`. Para obtener más información, consulte [Permitir a los usuarios de claves utilizar una clave de KMS para las operaciones criptográficas](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-users-crypto) en la *Guía para desarrolladores de AWS Key Management Service*.

Para obtener más información acerca de cuándo utilizar claves administradas por el cliente y las claves de KMS administradas por AWS, consulte [¿Debo usar una clave administrada por Clave administrada de AWS o una clave administrada por el cliente para cifrar mis objetos en Amazon S3?](https://aws.amazon.com/premiumsupport/knowledge-center/s3-object-encryption-keys/)

### Flujo de trabajo de cifrado SSE-KMS
<a name="sse-kms-encryption-workflow"></a>

Si elige cifrar los datos mediante una Clave administrada de AWS o una clave administrada por el cliente, AWS KMS y Amazon S3 llevan a cabo las siguientes acciones de cifrado de sobre:

1. Amazon S3 solicita una [clave de datos](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#data-keys) en texto no cifrado y una copia de la clave cifrada con la clave de KMS especificada.

1. AWS KMS crea una clave de datos, la cifra con la clave de KMS y envía la clave de datos en texto no cifrado y la clave de datos cifrada a Amazon S3.

1. Amazon S3 cifra los datos con la clave de datos y elimina la clave en texto no cifrado de la memoria tan pronto como sea posible después de utilizarla.

1. Amazon S3 almacena la clave de datos cifrada como metadatos con el archivo de datos.

Cuando se solicita que se descifren los datos, Amazon S3 y AWS KMS realizan las siguientes acciones:

1. Amazon S3 envía la clave de datos cifrada a AWS KMS en una solicitud de `Decrypt`.

1. AWS KMS descifra la clave de datos mediante la misma clave de KMS y devuelve la clave de datos en texto no cifrado a Amazon S3.

1. Amazon S3 descifra los datos cifrados, mediante la clave de datos de texto no cifrado y elimina la clave de datos de texto no cifrado de la memoria tan pronto como sea posible.

**importante**  
Cuando utilice una AWS KMS key para el cifrado en el lado del servidor en Amazon S3, debe elegir una clave de cifrado de KMS simétrica. Amazon S3 solo admite claves de KMS de cifrado simétricas. Para obtener más información sobre estas claves, consulte [Symmetric encryption KMS keys](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#symmetric-cmks) (Claves de KMS de cifrado simétricas) en la *Guía para desarrolladores de AWS Key Management Service*.

### Auditoría del cifrado SSE-KMS
<a name="sse-kms-encryption-audit"></a>

Para identificar las solicitudes que especifican SSE-KMS, puede utilizar las métricas de **Todas las solicitudes de SSE-KMS** y **Porcentaje de todas las solicitudes de SSE-KMS** de SSE-KMS en las métricas de 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. También puede utilizar el recuento de buckets con SSE-KMS habilitado y el porcentaje de buckets con SSE-KMS habilitado para comprender el recuento de los buckets (SSE-KMS) para el [cifrado de buckets predeterminado](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-encryption.html). Para obtener más información, consulte [Evaluación de la actividad y el uso de almacenamiento con S3 Storage Lens](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens.html?icmpid=docs_s3_user_guide_UsingKMSEncryption.html). Para obtener una lista completa de las métricas, consulte el [Glosario de métricas de Lente de almacenamiento de S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_metrics_glossary.html?icmpid=docs_s3_user_guide_UsingKMSEncryption.html).

Para auditar el uso de las claves de AWS KMS para los datos cifrados con SSE-KMS, puede utilizar los registros de AWS CloudTrail. Puede obtener información sobre las [operaciones de cifrado](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#cryptographic-operations), como, por ejemplo, [https://docs.aws.amazon.com/kms/latest/developerguide/ct-generatedatakey.html](https://docs.aws.amazon.com/kms/latest/developerguide/ct-generatedatakey.html) y [https://docs.aws.amazon.com/kms/latest/developerguide/ct-decrypt.html](https://docs.aws.amazon.com/kms/latest/developerguide/ct-decrypt.html). CloudTrail admite numerosos [valores de atributos](https://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_LookupEvents.html) para filtrar la búsqueda, incluidos el nombre del evento, el nombre de usuario y la fuente del evento. 

## Claves de bucket de Amazon S3
<a name="sse-kms-bucket-keys"></a>

Cuando configure el cifrado del lado del servidor mediante AWS KMS (SSE-KMS), puede configurar los buckets para que utilicen las claves de bucket de S3 para SSE-KMS. Usar una clave de nivel de bucket para SSE-KMS puede reducir los costos de solicitud de AWS KMS hasta en un 99 %, ya que disminuye el tráfico de solicitudes de Amazon S3 a AWS KMS. 

Cuando configura un bucket para utilizar claves de bucket de S3 para SSE-KMS en objetos nuevos, AWS KMS genera una clave de bucket que se utiliza en la creación de [claves de datos](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys) únicas para los objetos en el bucket. Esta clave de bucket de S3 se utiliza durante un periodo limitado dentro de Amazon S3, lo que reduce aún más la necesidad de que Amazon S3 realice solicitudes a AWS KMS para completar las operaciones de cifrado. Para obtener más información sobre el uso de claves de bucket de S3, consulte [Reducción del costo de SSE-KMS con las claves de bucket de Amazon S3](bucket-key.md).

## Requisito de cifrado del lado del servidor
<a name="require-sse-kms"></a>

Para requerir el cifrado del lado del servidor para todos los objetos en un bucket de Amazon S3 particular, puede usar una política de bucket. Por ejemplo, la siguiente política de bucket deniega el permiso de carga de objeto (`s3:PutObject`) para todos, si la solicitud no incluye el encabezado `x-amz-server-side-encryption-aws-kms-key-id`, que solicita el cifrado del lado del servidor con SSE-KMS.

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Id":"PutObjectPolicy",
   "Statement":[{
         "Sid":"DenyObjectsThatAreNotSSEKMS",
         "Effect":"Deny",
         "Principal":"*",
         "Action":"s3:PutObject",
         "Resource":"arn:aws:s3:::amzn-s3-demo-bucket1/*",
         "Condition":{
            "Null":{
               "s3:x-amz-server-side-encryption-aws-kms-key-id":"true"
            }
         }
      }
   ]
}
```

------

Para requerir que una AWS KMS key particular se utilice para cifrar los objetos en un bucket, puede utilizar la clave de condición `s3:x-amz-server-side-encryption-aws-kms-key-id`. Para especificar la clave de KMS, debe utilizar un nombre de recurso de Amazon (ARN) que tenga el formato `arn:aws:kms:region:acct-id:key/key-id`. AWS Identity and Access Management no valida si existe la cadena para `s3:x-amz-server-side-encryption-aws-kms-key-id`. 

**nota**  
Al cargar un objeto, puede especificar la clave de KMS con el encabezado `x-amz-server-side-encryption-aws-kms-key-id` o confiar en la [configuración de cifrado de bucket predeterminada](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-encryption.html). Si su solicitud PutObject especifica `aws:kms` en el encabezado `x-amz-server-side-encryption`, pero no especifica el encabezado `x-amz-server-side-encryption-aws-kms-key-id`, Amazon S3 asumirá que quiere usar la Clave administrada de AWS. En cualquier caso, el ID de la clave de AWS KMS que utiliza Amazon S3 para el cifrado de objetos debe coincidir con el ID de la clave de AWS KMS en la política; de lo contrario, Amazon S3 denegará la solicitud.

Para obtener una lista completa de las claves de condición específicas de Amazon S3, consulte [Condition keys for Amazon S3](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html#amazons3-policy-keys) en la *Referencia de autorizaciones de servicio*.

## Contexto de cifrado
<a name="encryption-context"></a>

Un *contexto de cifrado* es un conjunto definido de pares clave-valor que contienen información contextual adicional sobre los datos. El contexto de cifrado no está cifrado. Cuando se especifica un contexto de cifrado para una operación de cifrado, Amazon S3 debe especificar el mismo contexto de cifrado que para la operación de descifrado. De lo contrario, se produce un error en el descifrado. AWS KMS utiliza el contexto de cifrado como [datos autenticados adicionales](https://docs.aws.amazon.com/database-encryption-sdk/latest/devguide/concepts.html#digital-sigs) (AAD) para admitir el [cifrado autenticado](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#cryptographic-operations#digital-sigs). Para obtener más información sobre el contexto de cifrado, consulte [Contexto de cifrado](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) en la *Guía para desarrolladores de AWS Key Management Service*. 

De forma predeterminada, Amazon S3 utiliza el nombre de recurso de Amazon (ARN) del objeto o bucket como par del contexto de cifrado: 
+ **Si utiliza SSE-KMS sin activar una clave de bucket de S3**, se utiliza el ARN del objeto como contexto de cifrado.

  ```
  arn:aws:s3:::object_ARN
  ```
+ **Si utiliza SSE-KMS y activa una clave de bucket de S3**, se utiliza el ARN del bucket como contexto de cifrado. Para obtener más información sobre las claves de bucket de S3, consulte [Reducción del costo de SSE-KMS con las claves de bucket de Amazon S3](bucket-key.md).

  ```
  arn:aws:s3:::bucket_ARN
  ```

Si lo desea, puede proporcionar un par de contexto de cifrado adicional mediante el encabezado `x-amz-server-side-encryption-context` en una solicitud [s3:PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html#API_PutObject_RequestSyntax). No obstante, dado que el contexto de cifrado no está cifrado, asegúrese de no incluir información confidencial. Amazon S3 almacena este par de claves adicional junto con el contexto de cifrado predeterminado. Cuando procesa la solicitud `PUT`, Amazon S3 agrega el contexto de cifrado predeterminado de `aws:s3:arn` al que se proporcione. 

Puede utilizar el contexto de cifrado para identificar y clasificar las operaciones criptográficas. También puede utilizar el valor ARN del contexto de cifrado predeterminado para realizar un seguimiento de las solicitudes relevantes en AWS CloudTrail consultando qué ARN de Amazon S3 se usó con qué clave de cifrado.

En el campo `requestParameters` de un archivo de registro de CloudTrail, el contexto de cifrado es similar al siguiente: 

```
"encryptionContext": {
    "aws:s3:arn": "arn:aws:s3:::amzn-s3-demo-bucket1/file_name"
}
```

Cuando utiliza SSE-KMS con la característica opcional de claves de Bucket de S3, el valor del contexto de cifrado es el ARN del bucket.

```
"encryptionContext": {
    "aws:s3:arn": "arn:aws:s3:::amzn-s3-demo-bucket1"
}
```

## Envío de solicitudes para objetos cifrados de AWS KMS
<a name="aws-signature-version-4-sse-kms"></a>

**importante**  
Todas las solicitudes `GET` y `PUT` para los objetos cifrados de AWS KMS deben crearse mediante capa de conexión segura (SSL) o seguridad de la capa de transporte (TLS). Las solicitudes también deben firmarse con credenciales válidas, como AWS Signature Version 4 (o AWS Signature Version 2).

AWS Signature Version 4 es el proceso de agregar información de autenticación a las solicitudes de AWS enviadas por HTTP. Por seguridad, la mayoría de las solicitudes de AWS se firman con una clave de acceso, que se compone de un ID de clave de acceso y una clave de acceso secreta. Estas dos claves comúnmente se denominan credenciales de seguridad. Para obtener más información, consulte [Autenticación de solicitudes (AWS Signature Version 4)](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html) y [Proceso de firma de Signature Version 4](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html).

**importante**  
Si el objeto utiliza SSE-KMS, no envíe encabezados de solicitud de cifrado para solicitudes `GET` y `HEAD` . De lo contrario, aparecerá un error HTTP 400 Bad Request (Solicitud errónea).

**Topics**
+ [

## AWS KMS keys
](#aws-managed-customer-managed-keys)
+ [

## Claves de bucket de Amazon S3
](#sse-kms-bucket-keys)
+ [

## Requisito de cifrado del lado del servidor
](#require-sse-kms)
+ [

## Contexto de cifrado
](#encryption-context)
+ [

## Envío de solicitudes para objetos cifrados de AWS KMS
](#aws-signature-version-4-sse-kms)
+ [

# Especificación del cifrado del lado del servidor con AWS KMS (SSE-KMS)
](specifying-kms-encryption.md)
+ [

# Reducción del costo de SSE-KMS con las claves de bucket de Amazon S3
](bucket-key.md)

# Especificación del cifrado del lado del servidor con AWS KMS (SSE-KMS)
<a name="specifying-kms-encryption"></a>

Todos los buckets de Amazon S3 tienen el cifrado configurado de forma predeterminada y todos los objetos nuevos cargados en un bucket de S3 se cifran automáticamente en reposo. El cifrado del lado del servidor con claves administradas de Amazon S3 (SSE-S3) es la configuración de cifrado predeterminada para cada bucket de Amazon S3. Para usar otro tipo de cifrado, puede especificar el tipo de cifrado del servidor que se utilizará en las solicitudes `PUT` de S3 o puede actualizar la configuración de cifrado predeterminada en el bucket de destino. 

Si desea especificar un tipo de cifrado diferente en sus solicitudes `PUT`, puede utilizar el cifrado del servidor con claves de AWS Key Management Service (AWS KMS) (SSE-KMS), el cifrado del servidor de doble capa con claves de AWS KMS (DSSE-KMS) o el cifrado del servidor con claves proporcionadas por el cliente (SSE-C). Si desea establecer una configuración de cifrado predeterminada diferente en el bucket de destino, puede usar SSE-KMS o DSSE-KMS.

Para obtener más información sobre cómo cambiar la configuración de cifrado predeterminada de los buckets de uso general, consulte [Configuración del cifrado predeterminado](default-bucket-encryption.md). 

Al cambiar la configuración de cifrado predeterminada del bucket a SSE-KMS, no se modifica el tipo de cifrado de los objetos de Amazon S3 existentes en el bucket. Para cambiar el tipo de cifrado de los objetos preexistentes tras actualizar la configuración de cifrado predeterminada a SSE-KMS, puede utilizar Operaciones por lotes de Amazon S3. A Operaciones por lotes de S3 se proporciona una lista de objetos y Operaciones por lotes llama a la operación de la API correspondiente. Puede utilizar la acción [Copia de objetos](batch-ops-copy-object.md) para copiar objetos existentes, que los vuelve a escribir en el mismo bucket que los objetos cifrados con SSE-KMS. Un solo trabajo de la herramienta de operaciones por lotes puede realizar la operación especificada en miles de millones de objetos. Para obtener más información, consulte [Realización de operaciones de objetos de forma masiva con Operaciones por lotes](batch-ops.md) y la publicación [How to retroactively encrypt existing objects in Amazon S3 using S3 Inventory, Amazon Athena, and S3 Batch Operations](https://aws.amazon.com/blogs/security/how-to-retroactively-encrypt-existing-objects-in-amazon-s3-using-s3-inventory-amazon-athena-and-s3-batch-operations/) de *AWS Storage Blog*. 

Puede especificar SSE-KMS mediante el uso de la consola de Amazon S3, las operaciones de la API de REST, los SDK de AWS y la AWS Command Line Interface (AWS CLI). Para obtener más información, consulte los siguientes temas. 

**nota**  
Puede utilizar AWS KMS keys multirregionales en Amazon S3. No obstante, Amazon S3 trata las claves multirregionales como si fueran claves de una sola región y no utiliza las características multirregionales de la clave. Para obtener más información, consulte [ Using multi-Region keys](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html) en la *AWS Key Management Service Developer Guide*.

**nota**  
Si quiere utilizar una clave de KMS propiedad de una cuenta diferente, primero debe tener permiso para utilizar la clave. Para obtener más información sobre los permisos entre cuentas para las claves de KMS, consulte [Crear claves de KMS que otras cuentas puedan utilizar](https://docs.aws.amazon.com//kms/latest/developerguide/key-policy-modifying-external-accounts.html#cross-account-console) en la *Guía para desarrolladores de AWS Key Management Service*. 

## Uso de la consola de S3
<a name="add-object-encryption-kms"></a>

En este tema se describe cómo configurar o cambiar el tipo de cifrado de un objeto para utilizar el cifrado del lado del servidor con claves de AWS Key Management Service (AWS KMS) (SSE-KMS) mediante la consola de Amazon S3.

**nota**  
Puede cambiar el cifrado de un objeto si el objeto es menor de 5 GB. Si el objeto es mayor de 5 GB, debe usar la [AWS CLI](mpu-upload-object.md#UsingCLImpUpload) o los [AWS SDK](CopyingObjectsMPUapi.md) para cambiar el cifrado de un objeto.
Para obtener una lista de los permisos adicionales necesarios para cambiar el cifrado de un objeto, consulte [Permisos necesarios para las operaciones de la API de Amazon S3](using-with-s3-policy-actions.md). Para ver políticas de ejemplo que conceden estos permisos, consulte [Ejemplos de políticas basadas en identidad para Amazon S3](example-policies-s3.md).
Si cambia el cifrado de un objeto, se crea un nuevo objeto para reemplazar el antiguo. Si el control de versiones de S3 está activado, se crea una nueva versión del objeto y el objeto existente se convierte en una versión anterior. El rol que cambia la propiedad también se convierte en el propietario del nuevo objeto o (versión del objeto). 

**Para añadir o cambiar el cifrado de un objeto**

1. Inicie sesión en la Consola de administración de AWS y abra 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, elija **Buckets** y, a continuación, la pestaña **Buckets de uso general**. Desplácese hasta el bucket o la carpeta de Amazon S3 que contiene los objetos que desea cambiar.

1. Seleccione la casilla de verificación de los objetos que desea cambiar.

1. En el menú **Acciones**, elija **Editar cifrado del servidor** en la lista de opciones que aparece.

1. Desplácese hasta la sección **Cifrado del servidor**.

1. En **Configuración del cifrado**, elija **Usar la configuración del bucket para el cifrado predeterminado** o **Anular la configuración del bucket para el cifrado predeterminado**.
**importante**  
Si utiliza la opción de SSE-KMS para la configuración de cifrado predeterminado, se le aplicarán las cuotas de solicitudes por segundo (RPS) de AWS KMS. Para obtener más información acerca de las cuotas de AWS KMS y cómo solicitar un aumento de cuota, consulte [Cuotas](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html) en la *Guía para desarrolladores de AWS Key Management Service*. 

1. Si elige **Anular la configuración del bucket para el cifrado predeterminado**, debe configurar los siguientes ajustes de cifrado.

   1. En **Tipo de cifrado**, seleccione **Cifrado del servidor con claves de AWS Key Management Service (SSE-KMS**).

   1. En **Clave de AWS KMS**, siga una de las siguientes opciones para elegir su clave de KMS:
      + Para seleccionar en una lista de claves de KMS disponibles, marque **Elija entre sus claves de AWS KMS keys** y seleccione su **clave de KMS** en la lista de claves disponibles.

        En esta lista aparecen tanto la Clave administrada de AWS (`aws/s3`) como las claves administradas por el cliente. Para obtener más información acerca de las claves administradas por el cliente, consulte [Claves de cliente y claves de AWS](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#key-mgmt) en la *Guía para desarrolladores de AWS Key Management Service*.
      + Para introducir el ARN de la clave de KMS, elija **Introducir el ARN de la clave de AWS KMS key** e introduzca el ARN de la clave de KMS en el campo que aparece. 
      + Para crear una nueva clave administrada por el cliente en la consola de AWS KMS, elija **Crear una clave de KMS**.

        Para obtener más información acerca de cómo crear una AWS KMS key, consulte [Creación de claves](https://docs.aws.amazon.com//kms/latest/developerguide/create-keys.html) en la *AWS Key Management Service Guía para desarrolladores*.
**importante**  
Solo puede utilizar las claves de KMS que estén disponibles en la misma Región de AWS del bucket. La consola de Amazon S3 solo muestra las primeras 100 claves de KMS de la misma región del bucket. Para utilizar una clave de KMS que no aparezca en la lista, debe introducir el ARN de la clave de KMS. Si desea utilizar una clave de KMS propiedad de una cuenta de diferente, primero debe tener permiso para utilizar la clave y, después, debe introducir el ARN de la clave de KMS.  
Amazon S3 admite solo claves de KMS de cifrado simétricas y no claves de KMS asimétricas. Para obtener más información, consulte [Identificación de claves de KMS simétricas y asimétricas](https://docs.aws.amazon.com//kms/latest/developerguide/find-symm-asymm.html) en la *Guía para desarrolladores de AWS Key Management Service*.

1. En **Configuración de copia adicional**, elija si desea **Copiar la configuración de origen**, **No especificar la configuración** o **Especificar la configuración**. **Copiar la configuración de origen** es la opción predeterminada. Si solo desea copiar el objeto sin los atributos de configuración de origen, elija **No especificar la configuración**. Elija **Especificar la configuración** para especificar la configuración de la clase de almacenamiento, las ACL, las etiquetas de objetos, los metadatos, el cifrado del servidor y las sumas de comprobación adicionales.

1. Elija **Save changes**.

**nota**  
En esta acción se aplica el cifrado a todos los objetos especificados. Al cifrar carpetas, espere a que finalice la operación de guardado para agregar nuevos objetos a la carpeta.

## Uso de la API de REST
<a name="KMSUsingRESTAPI"></a>

Cuando cree un objeto, es decir, cuando cargue un objeto nuevo o copie uno existente, podrá especificar el uso del cifrado del lado del servidor con AWS KMS keys (SSE-KMS) para cifrar los datos. Para ello, añada el encabezado `x-amz-server-side-encryption` a la solicitud. Configure el valor del encabezado para el algoritmo de cifrado `aws:kms`. Amazon S3 confirma que su objeto fue guardado con SSE-KMS al devolver el encabezado de respuesta `x-amz-server-side-encryption`. 

Si especifica el encabezado `x-amz-server-side-encryption` con un valor de `aws:kms`, también puede utilizar los siguientes encabezados de solicitud:
+ `x-amz-server-side-encryption-aws-kms-key-id`
+ `x-amz-server-side-encryption-context`
+ `x-amz-server-side-encryption-bucket-key-enabled`

**Topics**
+ [

### Las operaciones de la API de REST de Amazon S3 que admiten SSE-KMS
](#sse-request-headers-kms)
+ [

### Contexto de cifrado (`x-amz-server-side-encryption-context`)
](#s3-kms-encryption-context)
+ [

### ID de clave de AWS KMS (`x-amz-server-side-encryption-aws-kms-key-id`)
](#s3-kms-key-id-api)
+ [

### Claves de bucket de S3 (`x-amz-server-side-encryption-aws-bucket-key-enabled`)
](#bucket-key-api)

### Las operaciones de la API de REST de Amazon S3 que admiten SSE-KMS
<a name="sse-request-headers-kms"></a>

Las siguientes operaciones de la API de REST aceptan los encabezados de solicitud `x-amz-server-side-encryption`, `x-amz-server-side-encryption-aws-kms-key-id` y `x-amz-server-side-encryption-context`.
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html): cuando cargue datos mediante la operación de la API `PUT`, puede especificar estos encabezados de solicitud. 
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) – al copiar un objeto, tiene un objeto de origen y otro de destino. Al pasar encabezados SSE-KMS con la operación `CopyObject`, estos se aplican solo al objeto de destino. Cuando copie un objeto existente, independientemente de si el objeto de origen está cifrado o no, el objeto de destino no estará cifrado, a no ser que solicite explícitamente el cifrado del lado en el servidor.
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html): cuando utilice una operación `POST` para cargar un objeto, en vez de proporcionar los encabezados de solicitud, debe proporcionar la misma información en los campos del formulario.
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html) – cuando cargue objetos grandes mediante la operación de la API de carga multiparte, puede especificar estos encabezados. Especifique estos encabezados en la solicitud de `CreateMultipartUpload`.

Los encabezados de respuesta de las siguientes operaciones de la API de REST devuelven el encabezado `x-amz-server-side-encryption` cuando un objeto se almacena con el cifrado del lado del servidor.
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html)

**importante**  
Todas las solicitudes `GET` y `PUT` para un objeto protegido por AWS KMS producirán un error si no realiza dichas solicitudes con la capa de sockets seguros (SSL), la seguridad de la capa de transporte (TLS) o Signature Version 4.
Si su objeto utiliza SSE-KMS, no envíe encabezados de solicitud de cifrado para solicitudes `GET` y `HEAD` u obtendrá un error HTTP 400 BadRequest.

### Contexto de cifrado (`x-amz-server-side-encryption-context`)
<a name="s3-kms-encryption-context"></a>

Si especifica `x-amz-server-side-encryption:aws:kms`, la API de Amazon S3 admitirá un contexto de cifrado con el encabezado `x-amz-server-side-encryption-context`. Un contexto de cifrado es un conjunto definido de pares clave-valor que contienen información contextual adicional sobre los datos.

Amazon S3 utiliza automáticamente el nombre de recurso de Amazon (ARN) del objeto o bucket como par del contexto de cifrado. Si utiliza SSE-KMS sin habilitar una clave de bucket de S3, utilice el ARN del objeto como contexto de cifrado, por ejemplo, `arn:aws:s3:::object_ARN`. Sin embargo, si utiliza SSE-KMS y habilita una clave de bucket de S3, utilice el ARN del bucket como contexto de cifrado, por ejemplo, `arn:aws:s3:::bucket_ARN`. 

Si lo desea, puede proporcionar un par de contexto de cifrado adicional mediante el encabezado `x-amz-server-side-encryption-context`. No obstante, dado que el contexto de cifrado no está cifrado, asegúrese de no incluir información confidencial. Amazon S3 almacena este par de claves adicional junto con el contexto de cifrado predeterminado.

Para obtener información sobre el contexto de cifrado en Amazon S3, consulte [Contexto de cifrado](UsingKMSEncryption.md#encryption-context). Para obtener información general sobre el contexto de cifrado, consulte [Conceptos de AWS Key Management Service: contexto de cifrado](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) en la *Guía para desarrolladores de AWS Key Management Service*. 

### ID de clave de AWS KMS (`x-amz-server-side-encryption-aws-kms-key-id`)
<a name="s3-kms-key-id-api"></a>

Puede utilizar el encabezado `x-amz-server-side-encryption-aws-kms-key-id` para especificar el ID de la clave administrada por el cliente utilizado para proteger los datos. Si especifica el encabezado `x-amz-server-side-encryption:aws:kms`, pero no proporciona el encabezado `x-amz-server-side-encryption-aws-kms-key-id`, Amazon S3 utiliza la Clave administrada de AWS (`aws/s3`) para proteger los datos. Si desea utilizar una clave administrada por el cliente, debe proporcionar el encabezado `x-amz-server-side-encryption-aws-kms-key-id` de dicha clave.

**importante**  
Cuando utilice una AWS KMS key para el cifrado en el lado del servidor en Amazon S3, debe elegir una clave de cifrado de KMS simétrica. Amazon S3 solo admite claves de KMS de cifrado simétricas. Para obtener más información sobre estas claves, consulte [Symmetric encryption KMS keys](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#symmetric-cmks) (Claves de KMS de cifrado simétricas) en la *Guía para desarrolladores de AWS Key Management Service*.

### Claves de bucket de S3 (`x-amz-server-side-encryption-aws-bucket-key-enabled`)
<a name="bucket-key-api"></a>

Puede utilizar el encabezado de solicitud `x-amz-server-side-encryption-aws-bucket-key-enabled` para habilitar o deshabilitar una clave de bucket de S3 en el nivel del objeto. Las claves de bucket de S3 reducen los costos de la solicitud de AWS KMS al disminuir el tráfico de solicitudes de Amazon S3 a AWS KMS. Para obtener más información, consulte [Reducción del costo de SSE-KMS con las claves de bucket de Amazon S3](bucket-key.md).

Si especifica el encabezado `x-amz-server-side-encryption:aws:kms`, pero no proporciona el encabezado `x-amz-server-side-encryption-aws-bucket-key-enabled`, el objeto utiliza el ajuste de la clave de bucket de S3 para que el bucket de destino cifre el objeto. Para obtener más información, consulte [Configuración de una clave de bucket de S3 en el nivel de objeto](configuring-bucket-key-object.md).

## Mediante AWS CLI
<a name="KMSUsingCLI"></a>

Para utilizar los siguientes comandos de ejemplo de la AWS CLI, sustituya `user input placeholders` con su información.

Cuando se carga un objeto nuevo o se copia uno existente, puede especificar el uso del cifrado del lado del servidor con claves de AWS KMS para cifrar los datos. Para ello, añada el encabezado `--server-side-encryption aws:kms` a la solicitud. Utilice `--ssekms-key-id example-key-id` para agregar la [clave de AWS KMS administrada de cliente](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#customer-cmk) que ha creado. Si especifica `--server-side-encryption aws:kms`, pero no proporciona un ID de clave de AWS KMS, Amazon S3 utilizará una clave administrada de AWS.

```
aws s3api put-object --bucket amzn-s3-demo-bucket --key example-object-key --server-side-encryption aws:kms --ssekms-key-id example-key-id --body filepath
```

Además, puede habilitar o desactivar las claves de bucket de Amazon S3 en las operaciones PUT o COPY agregando `--bucket-key-enabled` o `--no-bucket-key-enabled`. Las claves de bucket de Amazon S3 pueden reducir los costos de solicitud de AWS KMS al disminuir el tráfico de solicitudes de Amazon S3 a AWS KMS. Para obtener más información, consulte [Reducción del costo de SSE-KMS con las claves de bucket de S3](https://docs.aws.amazon.com//AmazonS3/latest/userguide/bucket-key.html).

```
aws s3api put-object --bucket amzn-s3-demo-bucket --key example-object-key --server-side-encryption aws:kms --bucket-key-enabled --body filepath
```

Puede cifrar un objeto no cifrado para usar SSE-KMS volviendo a copiar el objeto en su lugar.

```
aws s3api copy-object --bucket amzn-s3-demo-bucket --key example-object-key --body filepath --bucket amzn-s3-demo-bucket --key example-object-key --sse aws:kms --sse-kms-key-id example-key-id --body filepath
```

## Uso de los AWS SDK
<a name="kms-using-sdks"></a>

Al utilizar los SDK de AWS, puede solicitar a Amazon S3 que utilice AWS KMS keys para el cifrado del lado del servidor. En los ejemplos siguientes se muestra cómo usar SSE-KMS con los AWS SDK para Java y .NET. Para obtener información acerca de otros SDK, consulte [Código de muestra y bibliotecas](https://aws.amazon.com/code) en el Centro de desarrolladores de AWS.

**importante**  
Cuando utilice una AWS KMS key para el cifrado en el lado del servidor en Amazon S3, debe elegir una clave de cifrado de KMS simétrica. Amazon S3 solo admite claves de KMS de cifrado simétricas. Para obtener más información sobre estas claves, consulte [Symmetric encryption KMS keys](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#symmetric-cmks) (Claves de KMS de cifrado simétricas) en la *Guía para desarrolladores de AWS Key Management Service*.

### `CopyObject`Operación de
<a name="kms-copy-operation"></a>

Si copia objetos, agrega las mismas propiedades de la solicitud (`ServerSideEncryptionMethod` y `ServerSideEncryptionKeyManagementServiceKeyId`) para solicitar a Amazon S3 que use una AWS KMS key. Para obtener más información acerca de la copia de objetos, consulte [Copia, traslado y cambio de nombre de objetos](copy-object.md). 

### `PUT`Operación de
<a name="kms-put-operation"></a>

------
#### [ Java ]

Si carga un objeto mediante el AWS SDK para Java, puede solicitar que Amazon S3 utilice una AWS KMS key si agrega la propiedad `SSEAwsKeyManagementParams`, tal y como se muestra en la siguiente solicitud:

```
PutObjectRequest putRequest = new PutObjectRequest(bucketName,
   keyName, file).withSSEAwsKeyManagementParams(new SSEAwsKeyManagementParams());
```

En este caso, Amazon S3 utiliza la Clave administrada de AWS (`aws/s3`). Para obtener más información, consulte [Uso del cifrado del servidor con claves de AWS KMS (SSE-KMS)](UsingKMSEncryption.md). Opcionalmente, puede crear una clave de KMS de cifrado simétrica y especificarla en la solicitud, tal y como se muestra en el siguiente ejemplo:

```
PutObjectRequest putRequest = new PutObjectRequest(bucketName,
   keyName, file).withSSEAwsKeyManagementParams(new SSEAwsKeyManagementParams(keyID));
```

Para obtener más información acerca de la creación de claves administradas por el cliente, consulte [Programación de la API de AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/programming-top.html) en la *Guía para desarrolladores de AWS Key Management Service*.

Para ver ejemplos de código funcional sobre cómo cargar un objeto, consulte los temas siguientes. Para utilizar estos ejemplos, tiene que actualizar estos ejemplos de código y facilitar la información de cifrado, tal como se muestra en el fragmento de código anterior.
+ Para cargar un objeto en una única operación, consulte [Carga de objetos](upload-objects.md).
+ Para las cargas multiparte que utilizan las operaciones de API de carga multiparte de nivel alto o de nivel bajo, consulte [Carga de un objeto con la carga multiparte](mpu-upload-object.md). 

------
#### [ .NET ]

Si carga un objeto mediante el AWS SDK para .NET, puede solicitar que Amazon S3 utilice una AWS KMS key si agrega la propiedad `ServerSideEncryptionMethod`, tal y como se muestra en la siguiente solicitud:

```
PutObjectRequest putRequest = new PutObjectRequest
 {
     BucketName = amzn-s3-demo-bucket,
     Key = keyName,
     // other properties
     ServerSideEncryptionMethod = ServerSideEncryptionMethod.AWSKMS
 };
```

En este caso, Amazon S3 utiliza la Clave administrada de AWS. Para obtener más información, consulte [Uso del cifrado del servidor con claves de AWS KMS (SSE-KMS)](UsingKMSEncryption.md). Opcionalmente, puede crear su propia clave administrada por el cliente de cifrado simétrica y especificarla en la solicitud, tal y como se muestra en el siguiente ejemplo:

```
PutObjectRequest putRequest1 = new PutObjectRequest
{
  BucketName = amzn-s3-demo-bucket,
  Key = keyName,
  // other properties
  ServerSideEncryptionMethod = ServerSideEncryptionMethod.AWSKMS,
  ServerSideEncryptionKeyManagementServiceKeyId = keyId
};
```

Para obtener más información acerca de la creación de claves administradas por el cliente, consulte [Programación de la API de AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/programming-top.html) en la *Guía para desarrolladores de AWS Key Management Service*. 

Para ver ejemplos de código funcional sobre cómo cargar un objeto, consulte los temas siguientes. Para utilizar estos ejemplos, tiene que actualizar estos ejemplos de código y facilitar la información de cifrado, tal como se muestra en el fragmento de código anterior.
+ Para cargar un objeto en una única operación, consulte [Carga de objetos](upload-objects.md).
+ Para las cargas multiparte que utilizan las operaciones de API de carga multiparte de nivel alto o de nivel bajo, consulte [Carga de un objeto con la carga multiparte](mpu-upload-object.md). 

------

### URL prefirmadas
<a name="kms-presigned-urls"></a>

------
#### [ Java ]

Si crea una dirección URL prefirmada para un objeto cifrado con una AWS KMS key, es necesario que se especifique explícitamente Signature Version 4, tal y como se muestra en el siguiente ejemplo:

```
ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setSignerOverride("AWSS3V4SignerType");
AmazonS3Client s3client = new AmazonS3Client(
        new ProfileCredentialsProvider(), clientConfiguration);
...
```

Para ver un ejemplo del código, consulte . [Uso compartido de objetos con URL prefirmadas](ShareObjectPreSignedURL.md). 

------
#### [ .NET ]

Si crea una dirección URL prefirmada para un objeto cifrado con una AWS KMS key, es necesario que se especifique explícitamente Signature Version 4, tal y como se muestra en el siguiente ejemplo:

```
AWSConfigs.S3Config.UseSignatureVersion4 = true;
```

Para ver un ejemplo del código, consulte [Uso compartido de objetos con URL prefirmadas](ShareObjectPreSignedURL.md).

------

# Reducción del costo de SSE-KMS con las claves de bucket de Amazon S3
<a name="bucket-key"></a>

Las claves de bucket de Amazon S3 reducen el costo del cifrado del lado del servidor de Amazon S3 con las claves de AWS Key Management Service (AWS KMS) (SSE-KMS). Usar una clave de nivel de bucket para SSE-KMS puede reducir los costos de la solicitud de AWS KMS hasta en un 99 %, ya que disminuye el tráfico de solicitudes de Amazon S3 a AWS KMS. Con unos pocos clics en la Consola de administración de AWS y sin modificar sus aplicaciones de cliente, puede configurar su bucket de modo que utilice una clave de bucket de S3 para el cifrado SSE-KMS en los objetos nuevos.

**nota**  
Las claves de bucket de S3 no son compatibles con el cifrado de doble capa del servidor con claves de AWS Key Management Service (AWS KMS) (DSSE-KMS).

## Claves de bucket de S3 para SSE-KMS
<a name="bucket-key-overview"></a>

Las cargas de trabajo que acceden a millones o miles de millones de objetos cifrados con SSE-KMS pueden generar grandes volúmenes de solicitudes para AWS KMS. Cuando utiliza SSE-KMS para proteger los datos sin una clave de bucket de S3, Amazon S3 recurre a AWS KMS para utilizar una [clave de datos](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys) individual por cada objeto. En ese caso, Amazon S3 realiza una llamada a AWS KMS cada vez que se realiza una solicitud respecto de un objeto con cifrado de KMS. Para obtener información sobre cómo funciona SSE-KMS, consulte [Uso del cifrado del servidor con claves de AWS KMS (SSE-KMS)](UsingKMSEncryption.md). 

Cuando configura el bucket para utilizar una clave de bucket de S3 para SSE-KMS, AWS genera una clave en el nivel de bucket de corta duración desde AWS KMS y, a continuación, la mantiene temporalmente en S3. Esta clave en el nivel de bucket creará claves de datos para objetos nuevos durante el ciclo de vida. Las claves de bucket de S3 se utilizan durante un periodo de tiempo limitado dentro de Amazon S3, lo que reduce la necesidad de que S3 realice solicitudes a AWS KMS para completar las operaciones de cifrado. De esta manera, se reduce el tráfico de S3 a AWS KMS, lo que le permite acceder a objetos cifrados con AWS KMS en Amazon S3 a una fracción del costo anterior.

Las claves únicas en el nivel de bucket se obtienen al menos una vez por solicitante para garantizar que el acceso del solicitante a la clave se capture en un evento de AWS KMS CloudTrail. Amazon S3 trata a los intermediarios como solicitantes diferentes cuando utilizan roles o cuentas diferentes, o el mismo rol con distintas políticas de alcance. Los ahorros en las solicitudes de AWS KMS reflejan el número de solicitantes, los patrones de solicitudes y la antigüedad relativa de los objetos solicitados. Por ejemplo, reducir el número de solicitantes, solicitar varios objetos en un periodo de tiempo limitado y cifrarlos con la misma clave de nivel de bucket sigue generando mayores ahorros.

**nota**  
El uso de claves de bucket de S3 le permite ahorrar costos de solicitud de AWS KMS al reducir las solicitudes a AWS KMS para operaciones `Encrypt`, `GenerateDataKey` y `Decrypt` mediante el uso de una clave de nivel de bucket. Por diseño, las solicitudes posteriores que aprovechan esta clave de nivel de bucket no generan solicitudes de API de AWS KMS ni validan el acceso con respecto a la política de claves de AWS KMS.

Cuando se configura una clave de bucket de S3, los objetos que ya están en el bucket no utiliza la clave de bucket de S3. Para configurar una clave de bucket de S3 para los objetos existentes, puede utilizar una operación `CopyObject`. Para obtener más información, consulte [Configuración de una clave de bucket de S3 en el nivel de objeto](configuring-bucket-key-object.md).

Amazon S3 solo compartirá una clave de Bucket de S3 para los objetos que se cifren con la misma AWS KMS key. Las claves de bucket de S3 son compatibles con las claves de KMS creadas por AWS KMS, el [material de claves importado](https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html) y el [material de claves respaldado por almacenes de claves personalizados](https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html).

![\[Diagrama en el que se muestra cómo AWS KMS genera una clave de bucket que crea claves de datos para objetos de un bucket.\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/S3-Bucket-Keys.png)


## Configuración de claves de bucket de S3
<a name="configure-bucket-key"></a>

Es posible configurar su bucket para utilizar una clave de bucket de S3 para SSE-KMS en objetos nuevos a través de la consola de Amazon S3, los SDK de AWS, la AWS CLI o la API de REST. Con las claves de bucket de S3 habilitadas en el bucket, los objetos cargados con una clave de SSE-KMS especificada diferente utilizarán sus propias claves de bucket de S3. Independientemente de la configuración de la clave de bucket de S3, puede incluir el encabezado `x-amz-server-side-encryption-bucket-key-enabled` con un valor `true` o `false` en la solicitud para invalidar la configuración del bucket.

Antes de configurar el bucket para utilizar una clave de bucket de S3, consulte [Cambios para tener en cuenta antes de habilitar una clave de bucket de S3](#bucket-key-changes). 

### Configuración de una clave de bucket de S3 mediante la consola de Amazon S3
<a name="configure-bucket-key-console"></a>

Al crear un nuevo bucket, puede configurarlo para utilizar una clave de bucket de S3 para SSE-KMS en objetos nuevos. También puede configurar un bucket existente para utilizar una clave de bucket de S3 para SSE-KMS en objetos nuevos al actualizar las propiedades del bucket. 

Para obtener más información, consulte [Configuración del bucket para utilizar una clave de bucket de S3 con SSE-KMS para objetos nuevos](configuring-bucket-key.md).

### Compatibilidad con la API de REST, la AWS CLI y el SDK de AWS para claves de buckets de S3
<a name="configure-bucket-key-programmatic"></a>

Puede emplear la API de REST, la AWS CLI o el SDK de AWS a fin de configurar el bucket de manera que utilice una clave de bucket de S3 para SSE-KMS en los objetos nuevos. También puede habilitar una clave de bucket de S3 en el nivel de objeto.

Para obtener más información, consulte los siguientes temas: 
+ [Configuración de una clave de bucket de S3 en el nivel de objeto](configuring-bucket-key-object.md)
+ [Configuración del bucket para utilizar una clave de bucket de S3 con SSE-KMS para objetos nuevos](configuring-bucket-key.md)

Las siguientes operaciones de la API admiten claves de bucket de S3 para SSE-KMS:
+ [PutBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html)
  + `ServerSideEncryptionRule` acepta el `BucketKeyEnabled` parámetro para habilitar y deshabilitar una clave de bucket de S3.
+ [GetBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html)
  + `ServerSideEncryptionRule` devuelve la configuración de `BucketKeyEnabled`.
+ [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html), [CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html), [CreateMutlipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html) y [PostObject](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html)
  + El encabezado de solicitud `x-amz-server-side-encryption-bucket-key-enabled` habilita o deshabilita una clave de bucket de S3 en el nivel de objeto.
+ [HeadObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html), [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html), [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html), [UploadPart](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html)y [CompleteMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html)
  + El encabezado de respuesta `x-amz-server-side-encryption-bucket-key-enabled` indica si una clave de bucket de S3 está habilitada o deshabilitada para un objeto.

### Trabajo con CloudFormation
<a name="configure-bucket-key-cfn"></a>

En CloudFormation, el recurso `AWS::S3::Bucket` contiene una propiedad de cifrado denominada `BucketKeyEnabled` que usted puede utilizar para activar o desactivar una clave de bucket de S3. 

Para obtener más información, consulte [Uso de CloudFormation](configuring-bucket-key.md#enable-bucket-key-cloudformation).

## Cambios para tener en cuenta antes de habilitar una clave de bucket de S3
<a name="bucket-key-changes"></a>

Antes de habilitar una clave de bucket de S3, tenga en cuenta los siguientes cambios relacionados:

### Políticas de IAM o de claves de AWS KMS
<a name="bucket-key-policies"></a>

Si sus políticas de AWS Identity and Access Management (IAM) o sus políticas de clave de AWS KMS existentes utilizan el nombre de recurso de Amazon (ARN) del objeto como contexto de cifrado para ajustar o limitar el acceso a su clave de KMS, estas políticas no funcionarán con una clave de bucket de S3. Las claves de bucket de S3 utilizan el ARN del bucket como contexto de cifrado. Antes de habilitar una clave de bucket de S3, actualice las políticas de IAM o las políticas de clave de AWS KMS de manera que utilicen el ARN del bucket como contexto de cifrado.

Para obtener más información sobre el contexto de cifrado y las claves de bucket de S3, consulte [Contexto de cifrado](UsingKMSEncryption.md#encryption-context).

### Eventos de CloudTrail para AWS KMS
<a name="bucket-key-cloudtrail"></a>

Después de habilitar una clave de bucket de S3, los eventos de AWS KMS CloudTrail registran el ARN del bucket en lugar del ARN del objeto. Además, en sus registros verá menos eventos de KMS CloudTrail para objetos SSE-KMS. Dado que el material clave tiene un tiempo limitado en Amazon S3, se realizan menos solicitudes a AWS KMS.

## Uso de una clave de bucket de S3 con replicación
<a name="bucket-key-replication"></a>

Puede usar claves de bucket de S3 con replicación en la misma región (SRR) y replicación entre regiones (CRR).

Cuando Amazon S3 replica un objeto cifrado, generalmente conserva la configuración de cifrado del objeto replicado en el bucket de destino. Sin embargo, si el objeto de origen no está cifrado y el bucket de destino utiliza el cifrado predeterminado o una clave de bucket de S3, Amazon S3 cifra el objeto con la configuración del bucket de destino. 

Los siguientes ejemplos ilustran cómo funciona una clave de bucket de S3 con la replicación. Para obtener más información, consulte [Replicación de objetos cifrados (SSE-S3, SSE-KMS, DSSE-KMS, SSE-C)](replication-config-for-kms-objects.md). 

**Example Ejemplo 1: el objeto de origen utiliza claves de bucket de S3; el bucket de destino utiliza el cifrado predeterminado**  
Si el objeto de origen utiliza una clave de bucket de S3 pero el bucket de destino utiliza el cifrado predeterminado con SSE-KMS, el objeto de réplica mantiene su configuración de cifrado de clave de bucket de S3 en el bucket de destino. El bucket de destino sigue utilizando el cifrado predeterminado con SSE-KMS.   


**Example Ejemplo 2: el objeto de origen no está cifrado; el bucket de destino utiliza una clave de bucket de S3 con SSE-KMS**  
Si el objeto de origen no está cifrado y el bucket de destino utiliza una clave de bucket de S3 con SSE-KMS, el objeto de réplica se cifra con una clave de bucket de S3 que utiliza SSE-KMS en el bucket de destino. Esto hace que el elemento `ETag` del objeto de origen sea diferente al elemento `ETag` del objeto de réplica. Debe actualizar las aplicaciones que utilicen el elemento `ETag` para incluir esta diferencia.

## Trabajar con claves de bucket de S3
<a name="using-bucket-key"></a>

Para obtener más información sobre cómo habilitar claves de bucket de S3 y trabajar con ellas, consulte las siguientes secciones:
+ [Configuración del bucket para utilizar una clave de bucket de S3 con SSE-KMS para objetos nuevos](configuring-bucket-key.md)
+ [Configuración de una clave de bucket de S3 en el nivel de objeto](configuring-bucket-key-object.md)
+ [Visualización de la configuración de una clave de bucket de S3](viewing-bucket-key-settings.md)

# Configuración del bucket para utilizar una clave de bucket de S3 con SSE-KMS para objetos nuevos
<a name="configuring-bucket-key"></a>

Cuando configura el cifrado del lado del servidor con claves de AWS Key Management Service (AWS KMS) (SSE-KMS), puede configurar el bucket para utilizar una clave de bucket de S3 para SSE-KMS en los objetos nuevos. Las claves de bucket de S3 reducen el tráfico de solicitudes de Amazon S3 a AWS KMS, así como el costo de SSE-KMS. Para obtener más información, consulte [Reducción del costo de SSE-KMS con las claves de bucket de Amazon S3](bucket-key.md).

Puede configurar su bucket de manera que utilice una clave de bucket de S3 para SSE-KMS en los objetos nuevos mediante la consola de Amazon S3, la API de REST, los SDK de AWS, la AWS Command Line Interface (AWS CLI) o CloudFormation. Si desea habilitar o deshabilitar una clave de bucket de S3 para los objetos existentes, puede utilizar una operación `CopyObject`. Para obtener más información, consulte [Configuración de una clave de bucket de S3 en el nivel de objeto](configuring-bucket-key-object.md) y [Uso de Operaciones por lotes para habilitar claves de bucket de S3 para SSE-KMS](batch-ops-copy-example-bucket-key.md).

Cuando se habilita una clave de bucket de S3 para el bucket de origen o de destino, el contexto de cifrado será el nombre de recurso de Amazon (ARN) del bucket y no el ARN del objeto, por ejemplo, `arn:aws:s3:::bucket_ARN`. Debe actualizar las políticas de IAM para utilizar el ARN del bucket para el contexto de cifrado. Para obtener más información, consulte [Claves de bucket y replicación de S3](replication-config-for-kms-objects.md#bk-replication).

Los siguientes ejemplos ilustran cómo funciona una clave de bucket de S3 con la replicación. Para obtener más información, consulte [Replicación de objetos cifrados (SSE-S3, SSE-KMS, DSSE-KMS, SSE-C)](replication-config-for-kms-objects.md). 

**Requisitos previos**  
Antes de configurar el bucket para utilizar una clave de bucket de S3, consulte [Cambios para tener en cuenta antes de habilitar una clave de bucket de S3](bucket-key.md#bucket-key-changes).

**Topics**

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

En la consola de S3, puede habilitar o deshabilitar una clave de bucket de S3 para un bucket nuevo o uno existente. Los objetos en la consola de S3 hereda el ajuste de la clave de bucket de S3 de la configuración del bucket. Cuando habilita una clave de bucket de S3 para su bucket, los nuevos objetos que carga en el bucket utilizan una clave de bucket de S3 para SSE-KMS. 

**Cargar, copiar o modificar objetos en buckets que tienen habilitada una clave de bucket de S3**  
Si carga, modifica o copia un objeto en un bucket que tiene habilitada una clave de bucket de S3, el ajuste de la clave de bucket de S3 para ese objeto podría actualizarse para alinearse con la configuración del bucket.

Si un objeto ya tiene habilitada una clave de bucket de S3, el ajuste de la clave de bucket de S3 para ese objeto no cambia al copiar o modificar el objeto. Sin embargo, si modifica o copia un objeto que no tiene habilitada una clave de bucket de S3 y el bucket de destino tiene una configuración de clave de bucket de S3, el objeto hereda el ajuste de la clave de bucket de S3 del bucket de destino. Por ejemplo, si el objeto de origen no tiene habilitada una clave de bucket de S3 pero el bucket de destino tiene habilitada la clave de bucket de S3, se habilita una clave de bucket de S3 para el objeto.

**Para habilitar una clave de bucket de S3 al crear un nuevo bucket,**

1. Inicie sesión en la Consola de administración de AWS y abra 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 **Crear bucket**. 

1. Ingrese el nombre del bucket y elija la Región de AWS. 

1. En **Cifrado predeterminado**, en **Tipo de clave de cifrado**, elija **Clave de AWS Key Management Service (SSE-KMS)**.

1. En **Clave de AWS KMS**, siga una de las siguientes opciones para elegir su clave de KMS:
   + Para seleccionar en una lista de claves de KMS disponibles, marque **Elija entre sus claves de AWS KMS keys** y seleccione su **clave de KMS** en la lista de claves disponibles.

     En esta lista aparecen tanto la Clave administrada de AWS (`aws/s3`) como las claves administradas por el cliente. Para obtener más información acerca de las claves administradas por el cliente, consulte [Claves de cliente y claves de AWS](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#key-mgmt) en la *Guía para desarrolladores de AWS Key Management Service*.
   + Para introducir el ARN de la clave de KMS, elija **Introducir el ARN de la AWS KMS key** e introduzca el ARN de la clave de KMS en el campo que aparece. 
   + Para crear una nueva clave administrada por el cliente en la consola de AWS KMS, elija **Crear una clave de KMS**.

     Para obtener más información acerca de cómo crear una AWS KMS key, consulte [Creación de claves](https://docs.aws.amazon.com//kms/latest/developerguide/create-keys.html) en la *AWS Key Management Service Guía para desarrolladores*.

1. En **Bucket Key** (Clave de bucket), seleccione **Enable** (Habilitar). 

1. Elija **Create bucket (Crear bucket)**. 

   Amazon S3 crea el bucket con una clave de bucket de S3 habilitada. Los nuevos objetos que cargue en el bucket utilizarán una clave de bucket de S3. 

   Para deshabilitar una clave de bucket de S3, siga los pasos anteriores y elija **Disable (Deshabilitar)**.

**Para habilitar una clave de bucket de S3 para un bucket existente,**

1. Abra 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. En la lista **Buckets**, elija el bucket para el que desea habilitar una clave de bucket de S3.

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

1. En **Cifrado predeterminado**, elija **Editar**.

1. En **Cifrado predeterminado**, en **Tipo de clave de cifrado**, elija **Clave de AWS Key Management Service (SSE-KMS)**.

1. En **Clave de AWS KMS**, siga una de las siguientes opciones para elegir su clave de KMS:
   + Para seleccionar en una lista de claves de KMS disponibles, marque **Elija entre sus claves de AWS KMS keys** y seleccione su **clave de KMS** en la lista de claves disponibles.

     En esta lista aparecen tanto la Clave administrada de AWS (`aws/s3`) como las claves administradas por el cliente. Para obtener más información acerca de las claves administradas por el cliente, consulte [Claves de cliente y claves de AWS](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#key-mgmt) en la *Guía para desarrolladores de AWS Key Management Service*.
   + Para introducir el ARN de la clave de KMS, elija **Introducir el ARN de la AWS KMS key** e introduzca el ARN de la clave de KMS en el campo que aparece. 
   + Para crear una nueva clave administrada por el cliente en la consola de AWS KMS, elija **Crear una clave de KMS**.

     Para obtener más información acerca de cómo crear una AWS KMS key, consulte [Creación de claves](https://docs.aws.amazon.com//kms/latest/developerguide/create-keys.html) en la *AWS Key Management Service Guía para desarrolladores*.

1. En **Bucket Key (Clave de bucket)**, seleccione **Enable (Habilitar)**. 

1. Elija **Save changes**.

   Amazon S3 habilita una clave de bucket de S3 para los nuevos objetos agregados al bucket. Los objetos existentes no utilizan la clave de bucket de S3. Para configurar una clave de bucket de S3 para los objetos existentes, puede utilizar una operación `CopyObject`. Para obtener más información, consulte [Configuración de una clave de bucket de S3 en el nivel de objeto](configuring-bucket-key-object.md).

   Para deshabilitar una clave de bucket de S3, siga los pasos anteriores y elija **Disable (Deshabilitar)**.

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

Puede utilizar [PutBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html) para habilitar o desactivar una clave de bucket de S3 en su bucket. Para configurar una clave de bucket de S3 con `PutBucketEncryption`, especifique el tipo de dato [ServerSideEncryptionRule](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ServerSideEncryptionRule.html), que incluye el cifrado predeterminado con SSE-KMS. También puede utilizar una clave administrada por el cliente al especificar el ID de clave de KMS para la clave administrada por el cliente.  

Para obtener más información y sintaxis de ejemplo, consulte [PutBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html). 

## Uso de AWS SDK para Java
<a name="enable-bucket-key-sdk"></a>

En el siguiente ejemplo, se habilita el cifrado de bucket predeterminado con SSE-KMS y una clave de bucket de S3 mediante AWS SDK para Java.

------
#### [ Java ]

```
AmazonS3 s3client = AmazonS3ClientBuilder.standard()
    .withRegion(Regions.DEFAULT_REGION)
    .build();
    
ServerSideEncryptionByDefault serverSideEncryptionByDefault = new ServerSideEncryptionByDefault()
    .withSSEAlgorithm(SSEAlgorithm.KMS);
ServerSideEncryptionRule rule = new ServerSideEncryptionRule()
    .withApplyServerSideEncryptionByDefault(serverSideEncryptionByDefault)
    .withBucketKeyEnabled(true);
ServerSideEncryptionConfiguration serverSideEncryptionConfiguration =
    new ServerSideEncryptionConfiguration().withRules(Collections.singleton(rule));

SetBucketEncryptionRequest setBucketEncryptionRequest = new SetBucketEncryptionRequest()
    .withServerSideEncryptionConfiguration(serverSideEncryptionConfiguration)
    .withBucketName(bucketName);
            
s3client.setBucketEncryption(setBucketEncryptionRequest);
```

------

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

En el siguiente ejemplo, se habilita el cifrado de bucket predeterminado con SSE-KMS y una clave de bucket de S3 mediante AWS CLI. Sustituya `user input placeholders` por su propia información.

```
aws s3api put-bucket-encryption --bucket amzn-s3-demo-bucket --server-side-encryption-configuration '{
        "Rules": [
            {
                "ApplyServerSideEncryptionByDefault": {
                    "SSEAlgorithm": "aws:kms",
                    "KMSMasterKeyID": "KMS-Key-ARN"
                },
                "BucketKeyEnabled": true
            }
        ]
    }'
```

## Uso de CloudFormation
<a name="enable-bucket-key-cloudformation"></a>

Para obtener más información sobre cómo configurar una clave de bucket de S3 con CloudFormation, consulte [AWS::S3::Bucket ServerSideEncryptionRule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-serversideencryptionrule.html) en la *Guía del usuario de AWS CloudFormation*.

# Configuración de una clave de bucket de S3 en el nivel de objeto
<a name="configuring-bucket-key-object"></a>

Cuando realiza una operación PUT o COPY mediante la API de REST, los SDK de AWS o la AWS CLI, puede habilitar o desactivar una clave de bucket de S3 en el nivel de objeto agregando el encabezado de la solicitud `x-amz-server-side-encryption-bucket-key-enabled` con un valor `true` o `false`. Las claves de bucket de S3 permiten reducir el costo de cifrado del lado del servidor mediante AWS Key Management Service (AWS KMS) (SSE-KMS) al disminuir el tráfico de solicitudes de Amazon S3 a AWS KMS. Para obtener más información, consulte [Reducción del costo de SSE-KMS con las claves de bucket de Amazon S3](bucket-key.md). 

Cuando se configura una clave de bucket de S3 para un objeto mediante una operación PUT o COPY, Amazon S3 solo actualiza la configuración de ese objeto. El ajuste de la clave de bucket de S3 para el bucket de destino no cambia. Si envía una solicitud PUT o COPY para un objeto cifrado con KMS a un bucket con las claves de bucket de S3 habilitadas, la operación en el nivel de objeto utilizará automáticamente las claves de bucket de S3, a menos que desactive las claves del encabezado de la solicitud. Si no especifica una clave de bucket de S3 para el objeto, Amazon S3 aplica el ajuste de la clave de bucket de S3 para el bucket de destino al objeto.

**Requisito previo:**  
Antes de configurar el objeto para usar una clave de bucket de S3, consulte  [Cambios para tener en cuenta antes de habilitar una clave de bucket de S3](bucket-key.md#bucket-key-changes). 

**Topics**
+ [

## Herramienta de operaciones por lotes de Amazon S3
](#bucket-key-object-bops)
+ [

## Uso de la API de REST
](#bucket-key-object-rest)
+ [

## Uso de AWS SDK para Java (PutObject)
](#bucket-key-object-sdk)
+ [

## Uso de la AWS CLI (PutObject)
](#bucket-key-object-cli)

## Herramienta de operaciones por lotes de Amazon S3
<a name="bucket-key-object-bops"></a>

Para cifrar los objetos de Amazon S3 existentes, puede utilizar la herramienta de operaciones por lotes de Amazon S3. A las operaciones por lotes de S3 se les proporciona una lista de objetos en los que deben actuar. Las operaciones por lotes llaman a la API correspondiente para llevar a cabo la operación especificada. 

Puede utilizar la [operación de copia de la herramienta de operaciones por lotes de S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-copy-object.html) para copiar objetos existentes sin cifrar y escribirlos como objetos cifrados en el mismo bucket. Un solo trabajo de la herramienta de operaciones por lotes puede realizar la operación especificada en miles de millones de objetos. Para obtener más información, consulte [Realización de operaciones de objetos de forma masiva con Operaciones por lotes](batch-ops.md) y [Cifrado de objetos con la herramienta de operaciones por lotes de Amazon S3](https://aws.amazon.com/blogs/storage/encrypting-objects-with-amazon-s3-batch-operations/).

## Uso de la API de REST
<a name="bucket-key-object-rest"></a>

Si utiliza SSE-KMS, puede habilitar una clave de bucket de S3 para un objeto con las siguientes operaciones de la API: 
+ [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) : al cargar un objeto, puede especificar el encabezado de solicitud `x-amz-server-side-encryption-bucket-key-enabled` para habilitar o deshabilitar una clave de bucket de S3 en el nivel de objeto. 
+ [CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) : al copiar un objeto y configurar SSE-KMS, puede especificar el encabezado de solicitud `x-amz-server-side-encryption-bucket-key-enabled` para habilitar o deshabilitar una clave de bucket de S3 para el objeto. 
+ [POST Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html): al utilizar una operación `POST` para cargar un objeto y configurar SSE-KMS, puede utilizar el campo de formulario `x-amz-server-side-encryption-bucket-key-enabled` para habilitar o deshabilitar una clave de bucket de S3 para el objeto.
+ [CreateMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html): al cargar objetos grandes mediante la operación de la API `CreateMultipartUpload` y configurar SSE-KMS, puede usar el encabezado de solicitud `x-amz-server-side-encryption-bucket-key-enabled` para habilitar o deshabilitar una clave de bucket de S3 para el objeto.

Para habilitar una clave de bucket de S3 en el nivel de objeto, incluya el encabezado de solicitud `x-amz-server-side-encryption-bucket-key-enabled`. Para obtener más información sobre SSE-KMS y la API de REST, consulte [Uso de la API de REST](specifying-kms-encryption.md#KMSUsingRESTAPI).

## Uso de AWS SDK para Java (PutObject)
<a name="bucket-key-object-sdk"></a>

Puede utilizar el siguiente ejemplo para configurar una clave de bucket de S3 en el nivel de objeto mediante AWS SDK para Java.

------
#### [ Java ]

```
AmazonS3 s3client = AmazonS3ClientBuilder.standard()
    .withRegion(Regions.DEFAULT_REGION)
    .build();

String bucketName = "amzn-s3-demo-bucket1";
String keyName = "key name for object";
String contents = "file contents";

PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, keyName, contents)
    .withBucketKeyEnabled(true);
    
s3client.putObject(putObjectRequest);
```

------

## Uso de la AWS CLI (PutObject)
<a name="bucket-key-object-cli"></a>

Puede utilizar el siguiente ejemplo de la AWS CLI para configurar una clave de bucket de S3 en el nivel de objeto como parte de una solicitud `PutObject`.

```
aws s3api put-object --bucket amzn-s3-demo-bucket --key object key name --server-side-encryption aws:kms --bucket-key-enabled --body filepath
```

# Visualización de la configuración de una clave de bucket de S3
<a name="viewing-bucket-key-settings"></a>

Puede visualizar la configuración de una clave de bucket de S3 en el nivel de bucket o de objeto mediante la consola de Amazon S3, la API de REST, la AWS Command Line Interface (AWS CLI) o los SDK de AWS.

Las claves de bucket de S3 permiten reducir el tráfico de solicitudes de Amazon S3 a AWS KMS así como el costo del cifrado del lado del servidor mediante AWS Key Management Service (SSE-KMS). Para obtener más información, consulte [Reducción del costo de SSE-KMS con las claves de bucket de Amazon S3](bucket-key.md). 

Para ver el ajuste de la clave de bucket de S3 para un bucket o un objeto que ha heredado el ajuste de la clave de bucket de S3 de la configuración del bucket, necesita permiso para realizar la acción `s3:GetEncryptionConfiguration`. Para obtener más información, consulte [GetBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html) en la *Referencia de la API de Amazon Simple Storage Service*. 

## Uso de la consola de S3
<a name="bucket-key-settings"></a>

En la consola de S3, puede ver el ajuste de la clave de bucket de S3 para el bucket u objeto. El ajuste de la clave de bucket de S3 se hereda de la configuración del bucket a menos que los objetos de origen ya tengan configurada una clave de bucket de S3.

Los objetos y las carpetas del mismo bucket pueden tener diferentes ajustes de clave de bucket de S3. Por ejemplo, si carga un objeto con la API de REST y habilita una clave de bucket de S3 para el objeto, este último conservará el ajuste de la clave de bucket de S3 en el bucket de destino, aun cuando la clave de bucket de S3 esté deshabilitada en el bucket de destino. Como otro ejemplo, si habilita una clave de bucket de S3 para un bucket existente, los objetos que ya estén en el bucket no utilizan una clave de bucket de S3. Sin embargo, los objetos nuevos tienen habilitada una clave de bucket de S3. 

**Para ver el ajuste de la clave de bucket de S3 para su bucket**

1. Inicie sesión en la Consola de administración de AWS y abra 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. En la lista **Buckets** , elija el bucket para el que desea habilitar una clave de bucket de S3.

1. Seleccione **Properties (Propiedades)**.

1. En la sección **Default encryption** (Cifrado predeterminado), en **Bucket Key** (Clave de bucket), verá el ajuste de la clave de bucket de S3 para su bucket.

   Si no puede verlo, es posible que no tenga permiso para realizar la acción `s3:GetEncryptionConfiguration`. Para obtener más información, consulte [GetBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html) en la *Referencia de la API de Amazon Simple Storage Service*. 

**Para ver el ajuste de la clave de bucket de S3 para su objeto,**

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

1. En la lista **Buckets**, elija el bucket para el que desea habilitar una clave de bucket de S3. 

1. En la lista **Objects (Objetos)**, elija el nombre del objeto.

1. En la pestaña **Details (Detalles)**, en **Server-side encryption settings (Configuración de cifrado del lado del servidor)**, elija **Edit (Editar)**. 

   En **Clave de bucket**, verá el ajuste de la clave de bucket de S3 para su objeto. No puede editar esta configuración. 

## Uso de AWS CLI
<a name="bucket-key-settings-cli"></a>

**Para ver el ajuste de la clave de bucket de S3 de nivel de bucket,**  
Para utilizar este ejemplo, sustituya `user input placeholder` por su propia información.

```
aws s3api get-bucket-encryption --bucket amzn-s3-demo-bucket1
```

Para obtener más información, consulte [get-bucket-encryption](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/get-bucket-encryption.html) en la *Referencia de comandos de la AWS CLI*.

**Para devolver la configuración de clave de bucket de S3 de nivel de objeto**  
Para utilizar este ejemplo, sustituya `user input placeholder` por su propia información.

```
aws s3api head-object --bucket amzn-s3-demo-bucket1 --key my_images.tar.bz2
```

Para obtener más información, consulte [head-object](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/head-object.html) en la *Referencia de comandos de la AWS CLI*.

## Uso de la API de REST
<a name="bucket-key-settings-rest"></a>

**Para ver el ajuste de la clave de bucket de S3 de nivel de bucket,**  
Para ver lar información de cifrado de un bucket, incluida la configuración de una clave de bucket de S3, utilice la operación `GetBucketEncryption`. El ajuste de la clave de bucket de S3 se ve en el cuerpo de la respuesta del elemento `ServerSideEncryptionConfiguration` con la configuración `BucketKeyEnabled`. Para obtener más información, consulte [GetBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html) en la *Referencia de la API de Amazon S3*. 

**Para ver la configuración de objeto de una clave de bucket de S3,**  
Para ver el estado de la clave de bucket de S3 de un objeto, utilice la operación `HeadObject`. `HeadObject` devuelve el encabezado de respuesta `x-amz-server-side-encryption-bucket-key-enabled` para mostrar si una clave de bucket de S3 está habilitada o deshabilitada para el objeto. Para obtener más información, consulte [HeadObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html) en la *Referencia de la API de Amazon S3*. 

Las siguientes operaciones de API también devuelven el encabezado de respuesta `x-amz-server-side-encryption-bucket-key-enabled` si se configura una clave de bucket de S3 para un objeto: 
+ [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) 
+ [PostObject](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html) 
+ [CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) 
+ [CreateMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html) 
+ [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html) 
+ [UploadPart](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html) 
+ [CompleteMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html) 
+ [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html) 

# Uso del cifrado del servidor de doble capa con claves de AWS KMS (DSSE-KMS)
<a name="UsingDSSEncryption"></a>

Al utilizar el cifrado del servidor de doble capa con claves de AWS Key Management Service (AWS KMS) (DSSE-KMS), se aplican dos capas de cifrado a los objetos cuando se cargan en Amazon S3. El DSSE-KMS le ayuda a cumplir con mayor facilidad los estándares de conformidad que requieren que aplique un cifrado de varias capas a sus datos y tenga el control total de sus claves de cifrado.

El término “doble” en DSSE-KMS se refiere a dos capas independientes de cifrado AES-256 que se aplican a los datos:
+ *Primera capa:* los datos se cifran mediante una clave de cifrado de datos (DEK) única generada por AWS KMS
+ *Segunda capa:* los datos ya cifrados se cifran de nuevo mediante una clave de cifrado AES-256 administrada por Amazon S3

Esto difiere de SSE-KMS estándar, que aplica solo una capa de cifrado. El enfoque de doble capa proporciona una seguridad mejorada al garantizar que, incluso si una capa de cifrado se viera comprometida, los datos permanecerían protegidos por la segunda capa. Esta seguridad adicional viene acompañada de un aumento de la sobrecarga de procesamiento y de las llamadas a la API de AWS KMS, lo que supone un mayor costo en comparación con SSE-KMS estándar. Para obtener más información sobre los precios de DSSE-KMS, consulte [Conceptos de AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys) en la Guía para desarrolladores de AWS Key Management Service y [Precios de AWS KMS](https://aws.amazon.com/kms/pricing).

Al utilizar el DSSE-KMS con un bucket de Amazon S3, las claves de AWS KMS deben estar en la misma región que el bucket. Además, cuando se solicita el DSSE-KMS para el objeto, la suma de comprobación de S3 que forma parte de los metadatos del objeto se almacena cifrada. Para obtener más información acerca de las sumas de comprobación, consulte [Comprobación de la integridad de objetos en Amazon S3](checking-object-integrity.md).

**nota**  
Las claves de bucket de S3 no son compatibles con DSSE-KMS.

Las principales diferencias entre DSSE-KMS y SSE-KMS estándar son:
+ **Capas de cifrado:** DSSE-KMS aplica dos capas independientes de cifrado AES-256, mientras que SSE-KMS estándar aplica una capa
+ **Seguridad:** DSSE-KMS proporciona una protección mejorada contra posibles vulnerabilidades de cifrado
+ **Conformidad:** DSSE-KMS ayuda a cumplir los requisitos normativos que exigen cifrado multicapa
+ **Rendimiento:** DSSE-KMS tiene una latencia ligeramente superior debido al procesamiento de cifrado adicional
+ **Costo:** DSSE-KMS genera cargos más altos debido al aumento de la sobrecarga computacional y a las operaciones adicionales de AWS KMS

**Exigir el cifrado del servidor de doble capa con AWS KMS keys (DSSE-KMS)**  
Para exigir el cifrado del servidor de doble capa para todos los objetos en un bucket de Amazon S3 determinado, puede usar una política de bucket. Por ejemplo, la siguiente política de bucket deniega el permiso de carga de objeto (`s3:PutObject`) para todos, si la solicitud no incluye el encabezado `x-amz-server-side-encryption`, que solicita el cifrado del servidor con DSSE-KMS.

------
#### [ JSON ]

****  

```
{
             "Version":"2012-10-17",		 	 	 
             "Id": "PutObjectPolicy",
             "Statement": [{
                   "Sid": "DenyUnEncryptedObjectUploads",
                   "Effect": "Deny",
                   "Principal": {
                       "AWS": "arn:aws:iam::111122223333:root"
                   },
                   "Action": "s3:PutObject",
                   "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
                   "Condition": {
                      "StringNotEquals": {
                         "s3:x-amz-server-side-encryption": "aws:kms:dsse"
                      }
                   }
                }
             ]
          }
```

------

**Topics**
+ [

# Especificación del cifrado del servidor de doble capa con claves de AWS KMS (DSSE-KMS)
](specifying-dsse-encryption.md)

# Especificación del cifrado del servidor de doble capa con claves de AWS KMS (DSSE-KMS)
<a name="specifying-dsse-encryption"></a>

Puede aplicar cifrado cuando cargue un objeto nuevo o copie un objeto existente. 

Puede especificar DSSE-KMS con la consola de Amazon S3, la API de REST de Amazon S3 y la AWS Command Line Interface (AWS CLI). Para obtener más información, consulte los siguientes temas. 

**nota**  
Puede utilizar AWS KMS keys multirregionales en Amazon S3. No obstante, Amazon S3 trata las claves multirregionales como si fueran claves de una sola región y no utiliza las características multirregionales de la clave. Para obtener más información, consulte [Using multi-Region keys](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html) en la *AWS Key Management Service Developer Guide*.

**nota**  
Si desea utilizar una clave de KMS propiedad de una cuenta diferente, primero debe tener permiso para utilizar la clave. Para obtener más información sobre los permisos entre cuentas para las claves de KMS, consulte [Crear claves de KMS que otras cuentas puedan utilizar](https://docs.aws.amazon.com//kms/latest/developerguide/key-policy-modifying-external-accounts.html#cross-account-console) en la *Guía para desarrolladores de AWS Key Management Service*. 

## Uso de la consola de S3
<a name="add-object-encryption-dsse"></a>

En esta sección se describe cómo configurar o cambiar el tipo de cifrado de un objeto para utilizar el cifrado del servidor de doble capa con claves de AWS Key Management Service (AWS KMS) (DSSE-KMS) mediante la consola de Amazon S3.

**nota**  
Puede cambiar el cifrado de un objeto si el objeto es menor de 5 GB. Si el objeto es mayor de 5 GB, debe usar la [AWS CLI](mpu-upload-object.md#UsingCLImpUpload) o los [AWS SDK](CopyingObjectsMPUapi.md) para cambiar el cifrado de un objeto.
Para obtener una lista de los permisos adicionales necesarios para cambiar el cifrado de un objeto, consulte [Permisos necesarios para las operaciones de la API de Amazon S3](using-with-s3-policy-actions.md). Para ver políticas de ejemplo que conceden estos permisos, consulte [Ejemplos de políticas basadas en identidad para Amazon S3](example-policies-s3.md).
Si cambia el cifrado de un objeto, se crea un nuevo objeto para reemplazar el antiguo. Si el control de versiones de S3 está activado, se crea una nueva versión del objeto y el objeto existente se convierte en una versión anterior. El rol que cambia la propiedad también se convierte en el propietario del nuevo objeto o (versión del objeto). 

**Para añadir o cambiar el cifrado de un objeto**

1. Inicie sesión en la Consola de administración de AWS y abra 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, elija **Buckets** y, a continuación, la pestaña **Buckets de uso general**. Desplácese hasta el bucket o la carpeta de Amazon S3 que contiene los objetos que desea cambiar.

1. Seleccione la casilla de verificación de los objetos que desea cambiar.

1. En el menú **Acciones**, elija **Editar cifrado del servidor** en la lista de opciones que aparece.

1. Desplácese hasta la sección **Cifrado del servidor**.

1. En **Configuración del cifrado**, elija **Usar la configuración del bucket para el cifrado predeterminado** o **Anular la configuración del bucket para el cifrado predeterminado**.

1. Si elige **Anular la configuración del bucket para el cifrado predeterminado**, debe configurar los siguientes ajustes de cifrado.

   1. En **Tipo de cifrado**, seleccione **Cifrado del servidor de doble capa con claves de AWS Key Management Service (DSSE-KMS)**. 

   1. En **Clave de AWS KMS**, siga una de las siguientes opciones para elegir su clave de KMS:
      + Para seleccionar en una lista de claves de KMS disponibles, marque **Elija entre sus claves de AWS KMS keys** y seleccione su **clave de KMS** en la lista de claves disponibles.

        En esta lista aparecen tanto la Clave administrada de AWS (`aws/s3`) como las claves administradas por el cliente. Para obtener más información acerca de las claves administradas por el cliente, consulte [Claves de cliente y claves de AWS](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#key-mgmt) en la *Guía para desarrolladores de AWS Key Management Service*.
      + Para introducir el ARN de la clave de KMS, elija **Introducir el ARN de la clave de AWS KMS key** e introduzca el ARN de la clave de KMS en el campo que aparece. 
      + Para crear una nueva clave administrada por el cliente en la consola de AWS KMS, elija **Crear una clave de KMS**.

        Para obtener más información acerca de cómo crear una AWS KMS key, consulte [Creación de claves](https://docs.aws.amazon.com//kms/latest/developerguide/create-keys.html) en la *AWS Key Management Service Guía para desarrolladores*.
**importante**  
Solo puede utilizar las claves de KMS que estén disponibles en la misma Región de AWS del bucket. La consola de Amazon S3 solo muestra las primeras 100 claves de KMS de la misma región del bucket. Para utilizar una clave de KMS que no aparezca en la lista, debe introducir el ARN de la clave de KMS. Si desea utilizar una clave de KMS propiedad de una cuenta de diferente, primero debe tener permiso para utilizar la clave y, después, debe introducir el ARN de la clave de KMS.  
Amazon S3 admite solo claves de KMS de cifrado simétricas y no claves de KMS asimétricas. Para obtener más información, consulte [Identificación de claves de KMS asimétricas](https://docs.aws.amazon.com//kms/latest/developerguide/find-symm-asymm.html) en la *Guía para desarrolladores de AWS Key Management Service*.

1. En **Clave de bucket**, seleccione **Desactivar**. Las claves de bucket de S3 no son compatibles con DSSE-KMS.

1. En **Configuración de copia adicional**, elija si desea **Copiar la configuración de origen**, **No especificar la configuración** o **Especificar la configuración**. **Copiar la configuración de origen** es la opción predeterminada. Si solo desea copiar el objeto sin los atributos de configuración de origen, elija **No especificar la configuración**. Elija **Especificar la configuración** para especificar la configuración de la clase de almacenamiento, las ACL, las etiquetas de objetos, los metadatos, el cifrado del servidor y las sumas de comprobación adicionales.

1. Elija **Save changes**.

**nota**  
En esta acción se aplica el cifrado a todos los objetos especificados. Al cifrar carpetas, espere a que finalice la operación de guardado para agregar nuevos objetos a la carpeta.

## Uso de la API de REST
<a name="DSSEUsingRESTAPI"></a>

Cuando cree un objeto, es decir, cuando cargue un objeto nuevo o copie uno existente, podrá especificar el uso del cifrado del servidor de doble capa con AWS KMS keys (DSSE-KMS) para cifrar los datos. Para ello, añada el encabezado `x-amz-server-side-encryption` a la solicitud. Configure el valor del encabezado para el algoritmo de cifrado `aws:kms:dsse`. Amazon S3 confirma que su objeto se ha almacenado con cifrado DSSE-KMS al devolver el encabezado de respuesta `x-amz-server-side-encryption`. 

Si especifica el encabezado `x-amz-server-side-encryption` con un valor de `aws:kms:dsse`, también puede utilizar los siguientes encabezados de solicitud:
+ `x-amz-server-side-encryption-aws-kms-key-id: SSEKMSKeyId`
+ `x-amz-server-side-encryption-context: SSEKMSEncryptionContext`

**Topics**
+ [

### Operaciones de la API de REST de Amazon S3 que admiten DSSE-KMS
](#dsse-request-headers-kms)
+ [

### Contexto de cifrado (`x-amz-server-side-encryption-context`)
](#s3-dsse-encryption-context)
+ [

### ID de clave de AWS KMS (`x-amz-server-side-encryption-aws-kms-key-id`)
](#s3-dsse-key-id-api)

### Operaciones de la API de REST de Amazon S3 que admiten DSSE-KMS
<a name="dsse-request-headers-kms"></a>

Las siguientes operaciones de la API de REST aceptan los encabezados de solicitud `x-amz-server-side-encryption`, `x-amz-server-side-encryption-aws-kms-key-id` y `x-amz-server-side-encryption-context`.
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html): cuando cargue datos mediante la operación de la API `PUT`, puede especificar estos encabezados de solicitud. 
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) – al copiar un objeto, tiene un objeto de origen y otro de destino. Al pasar encabezados DSSE-KMS con la operación `CopyObject`, estos se aplican solo al objeto de destino. Cuando copie un objeto existente, independientemente de si el objeto de origen está cifrado o no, el objeto de destino no estará cifrado, a no ser que solicite explícitamente el cifrado del lado del servidor.
+ [Objeto POST](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html): cuando utilice una operación `POST` para cargar un objeto, en vez de proporcionar los encabezados de solicitud, debe proporcionar la misma información en los campos del formulario.
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html): cuando cargue objetos grandes mediante la carga multiparte, puede especificar estos encabezados en la solicitud `CreateMultipartUpload`.

Los encabezados de respuesta de las siguientes operaciones de API de REST devuelven el encabezado `x-amz-server-side-encryption` cuando un objeto se almacena con el cifrado del servidor.
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)
+ [POST Objeto](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html)

**importante**  
Todas las solicitudes `GET` y `PUT` para un objeto protegido por AWS KMS generarán un error si no las realiza con la capa de sockets seguros (SSL), la seguridad de la capa de transporte (TLS) o Signature Version 4.
Si su objeto utiliza DSSE-KMS, no envíe encabezados de solicitud de cifrado para solicitudes `GET` y `HEAD` porque, de lo contrario, obtendrá un error HTTP 400 (Bad Request).

### Contexto de cifrado (`x-amz-server-side-encryption-context`)
<a name="s3-dsse-encryption-context"></a>

Si especifica `x-amz-server-side-encryption:aws:kms:dsse`, la API de Amazon S3 admitirá un contexto de cifrado con el encabezado `x-amz-server-side-encryption-context`. Un contexto de cifrado es un conjunto definido de pares clave-valor que contienen información contextual adicional sobre los datos.

Amazon S3 utiliza automáticamente el nombre de recurso de Amazon (ARN) del objeto como par del contexto de cifrado; por ejemplo, `arn:aws:s3:::object_ARN`.

Si lo desea, puede proporcionar un par de contexto de cifrado adicional mediante el encabezado `x-amz-server-side-encryption-context`. No obstante, dado que el contexto de cifrado no está cifrado, asegúrese de no incluir información confidencial. Amazon S3 almacena este par de claves adicional junto con el contexto de cifrado predeterminado.

Para obtener información sobre el contexto de cifrado en Amazon S3, consulte [Contexto de cifrado](UsingKMSEncryption.md#encryption-context). Para obtener información general sobre el contexto de cifrado, consulte [Conceptos de AWS Key Management Service: contexto de cifrado](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) en la *Guía para desarrolladores de AWS Key Management Service*. 

### ID de clave de AWS KMS (`x-amz-server-side-encryption-aws-kms-key-id`)
<a name="s3-dsse-key-id-api"></a>

Puede utilizar el encabezado `x-amz-server-side-encryption-aws-kms-key-id` para especificar el ID de la clave administrada por el cliente utilizado para proteger los datos. Si especifica el encabezado `x-amz-server-side-encryption:aws:kms:dsse`, pero no proporciona el encabezado `x-amz-server-side-encryption-aws-kms-key-id`, Amazon S3 utiliza la Clave administrada de AWS (`aws/s3`) para proteger los datos. Si desea utilizar una clave administrada por el cliente, debe proporcionar el encabezado `x-amz-server-side-encryption-aws-kms-key-id` de dicha clave.

**importante**  
Cuando utilice una AWS KMS key para el cifrado en el lado del servidor en Amazon S3, debe elegir una clave de cifrado de KMS simétrica. Amazon S3 solo admite claves de KMS de cifrado simétricas. Para obtener más información sobre estas claves, consulte [Symmetric encryption KMS keys](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#symmetric-cmks) (Claves de KMS de cifrado simétricas) en la *Guía para desarrolladores de AWS Key Management Service*.

## Uso de AWS CLI
<a name="DSSEUsingCLI"></a>

Cuando se carga un objeto nuevo o se copia uno existente, puede especificar que se use DSSE-KMS para cifrar los datos. Para ello, añada el parámetro `--server-side-encryption aws:kms:dsse` a la solicitud. Utilice el parámetro `--ssekms-key-id example-key-id` para agregar la [clave de AWS KMS administrada de cliente](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#customer-cmk) que ha creado. Si especifica `--server-side-encryption aws:kms:dsse`, pero no proporciona un ID de clave de AWS KMS, Amazon S3 utilizará la clave administrada de AWS (`aws/s3`).

```
aws s3api put-object --bucket amzn-s3-demo-bucket --key example-object-key --server-side-encryption aws:kms:dsse --ssekms-key-id example-key-id --body filepath
```

Puede cifrar un objeto no cifrado para usar DSSE-KMS volviendo a copiar el objeto en su lugar.

```
aws s3api copy-object --bucket amzn-s3-demo-bucket --key example-object-key --copy-source amzn-s3-demo-bucket/example-object-key --server-side-encryption aws:kms:dsse --ssekms-key-id example-key-id
```

# Uso de cifrado en el lado del servidor con claves proporcionadas por el cliente (SSE-C)
<a name="ServerSideEncryptionCustomerKeys"></a>

El cifrado en el servidor consiste en proteger los datos en reposo. El cifrado en el servidor solo cifra los datos de objetos, no los metadatos de objetos. Puede usar el cifrado del servidor con claves proporcionadas por el cliente (SSE-C) en los buckets de propósito general para cifrar los datos con sus propias claves de cifrado. Con la clave de cifrado que proporcione como parte de su solicitud, Amazon S3 administra tanto el cifrado de datos, al escribir en los discos, como el descifrado de datos, al obtener acceso a los objetos. Por tanto, no ha de mantener ningún código para llevar a cabo el cifrado y el descifrado de los datos. Lo único que tiene que hacer es administrar las claves de cifrado que proporcione. 

En la mayoría de casos de uso modernos de Amazon S3 ya no se utiliza SSE-C porque no tiene la flexibilidad del cifrado del servidor con claves administradas por Amazon S3 (SSE-S3) o el cifrado del servidor con claves de AWS KMS (SSE-KMS). El requisito de SSE-C de proporcionar la clave de cifrado cada vez que interactúa con los datos cifrados de SSE-C hace que no sea práctico compartir la clave de SSE-C con otros usuarios, roles o servicios de AWS que leen datos de los buckets de S3 para poder operar en los datos. Debido a la amplia compatibilidad con SSE-KMS en todo AWS, la mayoría de las cargas de trabajo modernas no utilizan el cifrado SSE-C porque carece de la flexibilidad del SSE-KMS. Para obtener más información sobre SSE-KMS, consulte [Uso del cifrado del servidor con claves de AWS KMS (SSE-KMS)](UsingKMSEncryption.md).

Si quiere evitar que el cifrado SSE-C se utilice para los objetos escritos en el bucket, puede bloquear el cifrado SSE-C al cambiar la configuración de cifrado predeterminada del bucket. Cuando se bloquea SSE-C para un bucket de uso general, cualquier solicitud `PutObject`, `CopyObject`, `PostObject`, de carga o replicación multiparte que especifique el cifrado SSE-C se rechazará con un error `HTTP 403 AccessDenied`. Para obtener más información acerca de bloquear SSE-C, consulte [Bloqueo o desbloqueo de SSE-C para un bucket de uso general](blocking-unblocking-s3-c-encryption-gpb.md).

El uso de SSE-C no tiene costes adicionales. Sin embargo, las solicitudes de configuración y uso de SSE-C incurren en cargos estándar de solicitud de Amazon S3. Para obtener información acerca de los precios, consulte [Precios de Amazon S3](https://aws.amazon.com/s3/pricing/).

**importante**  
A partir de abril de 2026, AWS desactivará el cifrado del servidor con claves proporcionadas por el cliente (SSE-C) para todos los buckets nuevos. Además, el cifrado SSE-C se desactivará para todos los buckets existentes en Cuentas de AWS que no contengan datos cifrados con SSE-C. Con estos cambios, las pocas aplicaciones que necesitan el cifrado SSE-C deberán habilitar deliberadamente el uso de SSE-C a través de la API [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html) después de crear el bucket. En estos casos, es posible que deba actualizar los scripts de automatización, las plantillas de CloudFormation u otras herramientas de configuración de infraestructura para configurar estos ajustes. Para obtener más información, consulte la [publicación del Blog de almacenamiento de AWS](https://aws.amazon.com/blogs/storage/advanced-notice-amazon-s3-to-disable-the-use-of-sse-c-encryption-by-default-for-all-new-buckets-and-select-existing-buckets-in-april-2026/).

## Consideraciones antes de usar SSE-C
<a name="considerations-before-using-sse-c"></a>
+ S3 nunca almacena la clave de cifrado cuando se utiliza SSE-C. Debe proporcionar la clave de cifrado cada vez que desee que alguien descargue los datos cifrados con SSE-C de S3. 
  + Debe administrar el mapeo de qué clave de cifrado se utiliza para cifrar cada objeto. Usted debe responsabilizarse de realizar un seguimiento de qué clave de cifrado proporciona para cada objeto. Esto también implica que, si pierde la clave de cifrado, habrá perdido el objeto. 
  + Dado que es usted quien administra las claves de cifrado en el cliente, ha de administrar todas las garantías adicionales, como la rotación de claves, en el lado del cliente. 
  + Este diseño puede dificultar el intercambio de la clave de SSE-C con otros usuarios, roles o servicios de AWS que utilice con los datos. Debido a la amplia compatibilidad con SSE-KMS en todo AWS, la mayoría de las cargas de trabajo modernas no utilizan SSE-C porque carece de la flexibilidad del SSE-KMS. Para obtener más información sobre SSE-KMS, consulte [Uso del cifrado del servidor con claves de AWS KMS (SSE-KMS)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html). 
  + Esto significa que los objetos cifrados con SSE-C no se pueden descifrar de forma mediante servicios administrados por AWS. 
+ Debe usar HTTPS al especificar los encabezados de SSE-C en las solicitudes.
  + Amazon S3 rechaza cualquier solicitud que se realice por HTTP cuando use SSE-C. Por motivos de seguridad, le recomendamos que tenga en cuenta que cualquier clave que envíe por error sobre HTTP podría estar en peligro. Descarte la clave y practique la rotación apropiada. 
+ Si el bucket tiene habilitado el control de versiones, cada versión del objeto que cargue puede tener su propia clave de cifrado. Usted debe responsabilizarse de realizar un seguimiento de qué clave de cifrado se ha utilizado en cada versión del objeto. 
+ La consola de Amazon S3 no admite SSE-C. No es posible utilizar la consola de Amazon S3 para cargar un objeto y especificar el cifrado SSE-C. Tampoco puede usar la consola para actualizar (por ejemplo, cambiar la clase de almacenamiento o agregar metadatos) un objeto existente almacenado con SSE-C. 

**Topics**
+ [

## Consideraciones antes de usar SSE-C
](#considerations-before-using-sse-c)
+ [

# Especificación del cifrado del lado del servidor con claves proporcionadas por el cliente (SSE-C)
](specifying-s3-c-encryption.md)
+ [

# Bloqueo o desbloqueo de SSE-C para un bucket de uso general
](blocking-unblocking-s3-c-encryption-gpb.md)
+ [

# Configuración de SSE-C predeterminada para preguntas frecuentes de buckets nuevos
](default-s3-c-encryption-setting-faq.md)

# Especificación del cifrado del lado del servidor con claves proporcionadas por el cliente (SSE-C)
<a name="specifying-s3-c-encryption"></a>

Para utilizar el cifrado del servidor con claves proporcionadas por el cliente (SSE-C), primero asegúrese de que SSE-C no sea un tipo de cifrado bloqueado en la configuración de cifrado predeterminada del bucket de uso general de Amazon S3. Si está bloqueado, puede habilitar este tipo de cifrado actualizando la configuración de cifrado predeterminada del bucket. Luego, puede usar SSE-C en las solicitudes de carga pasando los encabezados necesarios. Consulte [Acciones de Amazon S3 que admiten la escritura de datos con SSE-C](#amazon-s3-actions-that-support-writing-data-with-sse-c) y asegúrese de incluir [Los encabezados de la API de S3 son necesarios para las solicitudes de cifrado y descifrado de objetos con SSE-C](#s3-api-headers-required-for-sse-c-object-encryption-and-decryption-requests). 

Cuando carga un objeto especificando SSE-C, Amazon S3 usa la clave de cifrado facilitada para aplicar un cifrado AES-256 a los datos. A continuación, Amazon S3 elimina la clave de cifrado de la memoria. Al recuperar un objeto, debe facilitar la misma clave de cifrado como parte de la solicitud. En primer lugar, Amazon S3 comprueba que la clave de cifrado proporcionada coincida, y a continuación descifra el objeto antes de devolverle los datos del mismo. 

Antes de usar SSE-C, asegúrese de haber revisado [Consideraciones antes de usar SSE-C](ServerSideEncryptionCustomerKeys.md#considerations-before-using-sse-c).

**nota**  
Amazon S3 no almacena la clave de cifrado que facilite. En su lugar, almacena un valor de código de autenticación de mensajes basado en hash (HMAC) discontinuo aleatorio de la clave de cifrado para validar las solicitudes futuras. El valor HMAC "salted" no se puede usar para derivar el valor de la clave de cifrado ni para descifrar los contenidos del objeto cifrado. Esto implica que, si pierde la clave de cifrado, habrá perdido el objeto.

**Topics**
+ [

## Acciones de SSE-C y encabezados obligatorios
](#sse-c-actions-and-required-headers)
+ [

## Ejemplo de política de bucket para aplicar el cifrado SSE-C
](#example-bucket-policy-to-enforce-sse-c-encryption)
+ [

## URL prefirmadas y SSE-C
](#ssec-and-presignedurl)
+ [

## Realización de solicitudes con SSE-C
](#making-requests-with-sse-c)
+ [

## Uso de la API de REST
](#using-rest-api-sse-c)
+ [

## Uso de los SDK de AWS para especificar SSE-C en las operaciones PUT, GET, Head y Copy
](#sse-c-using-sdks)
+ [

## Uso de los SDK de AWS para especificar SSE-C en las cargas multiparte
](#sse-c-using-sdks-multipart-uploads)

## Acciones de SSE-C y encabezados obligatorios
<a name="sse-c-actions-and-required-headers"></a>

Para especificar SSE-C en las API de S3 compatibles, es necesario pasar parámetros de solicitud específicos. 

**nota**  
La API de `PutBucketEncryption` de Amazon S3 se usa para configurar el cifrado predeterminado del servidor para un bucket. Sin embargo, `PutBucketEncryption` no admite la habilitación de SSE-C como método de cifrado predeterminado para un bucket. SSE-C es un método de cifrado por objeto en el que se proporciona la clave de cifrado a Amazon S3 con cada solicitud de carga o descarga de objetos. Amazon S3 utiliza esta clave para cifrar o descifrar el objeto durante la solicitud y, a continuación, descarta la clave. Esto significa que SSE-C se habilita para cada objeto, no como una configuración de bucket predeterminada. 

### Acciones de Amazon S3 que admiten la escritura de datos con SSE-C
<a name="amazon-s3-actions-that-support-writing-data-with-sse-c"></a>

Puede solicitar el cifrado del servidor con claves proporcionadas por el cliente (SSE-C) al escribir objetos en un bucket de uso general mediante las siguientes operaciones o acciones de la API: 
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html)

**nota**  
La replicación de S3 admite objetos cifrados con SSE-C. Para obtener más información sobre la replicación de objetos cifrados, consulte [Replicación de objetos cifrados (SSE-S3, SSE-KMS, DSSE-KMS, SSE-C)](replication-config-for-kms-objects.md). 

### Los encabezados de la API de S3 son necesarios para las solicitudes de cifrado y descifrado de objetos con SSE-C
<a name="s3-api-headers-required-for-sse-c-object-encryption-and-decryption-requests"></a>

Debe proporcionar los tres encabezados de API siguientes para cifrar o descifrar objetos con SSE-C: 
+ `x-amz-server-side-encryption-customer-algorithm` Use este encabezado para especificar el algoritmo de cifrado. El valor del encabezado ha de ser AES256.
+ `x-amz-server-side-encryption-customer-key` Use este encabezado para facilitar la clave de cifrado de 256 bits con codificación base64 para que Amazon S3 pueda usarla para cifrar o descifrar los datos.
+ `x-amz-server-side-encryption-customer-key-MD5` Use este encabezado para facilitar el resumen MD5 de 128 bits con codificación en base64 de la clave de cifrado, según la RFC 1321. Amazon S3 usa este encabezado para comprobar la integridad del mensaje y garantizar que la clave de cifrado se haya transmitido sin errores.

### Los encabezados de la API de S3 son necesarios para copiar objetos de origen cifrados con SSE-C
<a name="s3-api-headers-required-for-requests-to-copy-source-objects-encrypted-with-sse-c"></a>

Debe proporcionar los tres encabezados de API siguientes para copiar objetos de origen cifrados con SSE-C: 
+ `x-amz-copy-source-server-side-encryption-customer-algorithm` Incluya este encabezado para especificar el algoritmo que debe usar Amazon S3 para descifrar el objeto de origen. Este valor debe ser AES256.
+ `x-amz-copy-source-server-side-encryption-customer-key` Incluya este encabezado para facilitar la clave de cifrado con codificación base64 para que Amazon S3 la utilice para descifrar el objeto de origen. Esta clave de cifrado debe ser la que proporcionó a Amazon S3 al crear el objeto de origen. De lo contrario, Amazon S3 no puede descifrar el objeto.
+ `x-amz-copy-source-server-side-encryption-customer-key-MD5` Incluya este encabezado para facilitar el resumen MD5 de 128 bits con codificación en base64 de la clave de cifrado, según la RFC 1321.

## Ejemplo de política de bucket para aplicar el cifrado SSE-C
<a name="example-bucket-policy-to-enforce-sse-c-encryption"></a>

Para requerir SSE-C para todos los objetos escritos en un bucket de Amazon S3, puede usar una política de bucket. Por ejemplo, la siguiente política de bucket deniega la carga de objetos (`s3:PutObject`) para todas las solicitudes que no incluyan el encabezado `x-amz-server-side-encryption-customer-algorithm` que solicita SSE-C. 

```
{  
"Version":"2012-10-17",		 	 	                      
    "Id": "PutObjectPolicy",  
    "Statement": [  
        {  
"Sid": "RequireSSECObjectUploads",  
            "Effect": "Deny",  
            "Principal": "*",  
            "Action": "s3:PutObject",  
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",  
            "Condition": {  
            "Null": {  
              "s3:x-amz-server-side-encryption-customer-algorithm": "true"  
                }  
            }  
        }  
    ]  
}
```

**importante**  
Si utiliza una política de bucket para exigir SSE-C en `s3:PutObject`, debe incluir el encabezado `x-amz-server-side-encryption-customer-algorithm` en todas las solicitudes de carga multiparte (CreateMultipartUpload, UploadPart y CompleteMultipartUpload). 

## URL prefirmadas y SSE-C
<a name="ssec-and-presignedurl"></a>

Puede generar una URL prefirmada, que podrá utilizar para operaciones como la carga de un nuevo objeto, la recuperación de un objeto existente o la recuperación de metadatos de objetos. Las URL prefirmadas se usan con el SSE-C de la siguiente forma:
+ Al crear una URL prefirmada, debe especificar el algoritmo utilizando el encabezado `x-amz-server-side-encryption-customer-algorithm` en el cálculo de la firma.
+ Al usar la URL prefirmada para cargar un objeto nuevo, recuperar un objeto existente o recuperar solo metadatos de objetos, debe facilitar todos los encabezados de cifrado en su solicitud de aplicación cliente. 
**nota**  
Para objetos no SSE-C, puede generar una URL prefirmada y pegar dicha URL directamente en un navegador para acceder a los datos.   
No obstante, no puede hacer esto en objetos SSE-C porque además de la URL prefirmada también debe incluir encabezamientos de HTTP específicos de objetos SSE-C Por tanto, puede usar las URL prefirmadas para objetos SSE-C solo mediante programación.

Para obtener más información acerca de las URL prefirmadas, consulte [Descarga y carga de objetos con URL prefirmadas](using-presigned-url.md).

## Realización de solicitudes con SSE-C
<a name="making-requests-with-sse-c"></a>

 En el momento de la creación de objetos con la API de REST, puede especificar el cifrado del lado del servidor con claves proporcionadas por el cliente (SSE-C). Cuando utilice SSE-C, deberá proporcionar información sobre la clave de cifrado mediante [Los encabezados de la API de S3 son necesarios para copiar objetos de origen cifrados con SSE-C](#s3-api-headers-required-for-requests-to-copy-source-objects-encrypted-with-sse-c). Puede usar las bibliotecas de encapsulamiento del SDK de AWS para agregar estos encabezados a su solicitud. Si lo necesita, también puede realizar las llamadas a la API de REST de Amazon S3 directamente en su aplicación.

**importante**  
Antes de especificar el cifrado del servidor con claves proporcionadas por el cliente (SSE-C), asegúrese de que el cifrado SSE-C no esté bloqueado para el bucket de uso general. Para obtener más información, consulte [Bloqueo o desbloqueo de SSE-C para un bucket de uso general](blocking-unblocking-s3-c-encryption-gpb.md).

**nota**  
No puede usar la consola de Amazon S3 para cargar un objeto y solicitar SSE-C. Tampoco puede usar la consola para actualizar (por ejemplo, cambiar la clase de almacenamiento o agregar metadatos) un objeto existente almacenado con SSE-C. Para obtener más información, consulte [Los encabezados de la API de S3 son necesarios para las solicitudes de cifrado y descifrado de objetos con SSE-C](#s3-api-headers-required-for-sse-c-object-encryption-and-decryption-requests). 

## Uso de la API de REST
<a name="using-rest-api-sse-c"></a>

### API de REST de Amazon S3 que admiten SSE-C
<a name="sse-c-supported-apis"></a>

Las siguientes API de Amazon S3 admiten el cifrado del lado del servidor con claves de cifrado (SSE-C) proporcionadas por el cliente.
+ **Operación GET**: cuando recupera datos con la API GET (consulte [GET Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html)), puede especificar los encabezados de solicitud.
+ **Operación HEAD**: para recuperar metadatos de objetos con la API HEAD (consulte [HEAD Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectHEAD.html)), puede especificar estos encabezados de solicitud.
+ **Operación PUT**: cuando carga datos con la API de PUT Object (consulte [PUT Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html)), puede especificar estos encabezados de solicitud. 
+ **Carga multiparte**: al cargar objetos grandes mediante la API de carga multiparte, puede especificar estos encabezados. Debe especificar estos encabezados en la solicitud inicial (consulte [Iniciar carga multiparte](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadInitiate.html)) y en cada solicitud de carga de partes subsiguiente (consulte [Cargar parte](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadUploadPart.html) o [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadUploadPartCopy.html)). Para cada solicitud de carga de parte, la información de cifrado ha de ser la misma que la facilitada en la solicitud inicial de la carga multiparte.
+ **Operación POST**: cuando utiliza una operación POST para cargar un objeto (consulte [POST Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html)), en vez de proporcionar los encabezados de solicitud, debe proporcionar la misma información en los campos del formulario.
+ **Operación copia**: cuando copia un objeto (consulte [CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)), tiene un objeto de origen y uno de destino:
  + Si desea especificar el tipo de cifrado del objeto de destino, debe proporcionar el encabezado de solicitud `x-amz-server-side-encryption `.
  + Si quiere que el objeto de destino se cifre mediante SSE-C, debe facilitar información de cifrado mediante la API de S3 [Los encabezados de la API de S3 son necesarios para las solicitudes de cifrado y descifrado de objetos con SSE-C](#s3-api-headers-required-for-sse-c-object-encryption-and-decryption-requests).
  + Si el objeto de origen se cifra mediante SSE-C, debe proporcionar información clave de cifrado mediante los encabezados de la API de S3 [Los encabezados de la API de S3 son necesarios para copiar objetos de origen cifrados con SSE-C](#s3-api-headers-required-for-requests-to-copy-source-objects-encrypted-with-sse-c).

## Uso de los SDK de AWS para especificar SSE-C en las operaciones PUT, GET, Head y Copy
<a name="sse-c-using-sdks"></a>

En el siguiente ejemplo se muestra cómo solicitar el cifrado del lado del servidor con claves proporcionadas por el cliente (SSE-C) para objetos. En los ejemplos se realizan las siguientes operaciones. Cada operación muestra cómo especificar encabezados relacionados con el SSE-C en la solicitud:
+ **Put object:** carga un objeto y solicita el cifrado del lado del servidor mediante una clave de cifrado proporcionada por un cliente.
+ **Get object**: descarga el objeto que se cargó en el paso anterior. En la solicitud, proporciona la misma información de cifrado que proporcionó al cargar el objeto. Amazon S3 necesita esta información para descifrar el objeto de modo que pueda devolvérselo.
+ **Get object metadata**: recupera los metadatos del objeto. Proporciona la misma información de cifrado usada al crear el objeto.
+ **Copy object**: realiza una copia del objeto cargado previamente. Dado que el objeto de origen se almacena mediante SSE-C, usted debe proporcionar la información de cifrado en su solicitud de copia. De forma predeterminada, Amazon S3 cifra la copia del objeto solo si lo solicita explícitamente. En este ejemplo se indica a Amazon S3 que almacene una copia cifrada del objeto.

------
#### [ Java ]

**nota**  
Este ejemplo muestra cómo cargar un objeto en una operación única. Cuando utiliza la API de carga multiparte para cargar objetos grandes, brinda información de cifrado como se muestra en el siguiente ejemplo. Para ver ejemplos de cargas multiparte que utilizan AWS SDK para Java, consulte [Carga de un objeto con la carga multiparte](mpu-upload-object.md).

Para añadir la información de cifrado necesaria, incluya una `SSECustomerKey` en su solicitud. Para obtener más información sobre la clase `SSECustomerKey` , consulte la sección REST API (API de REST).

Para obtener instrucciones sobre cómo crear y probar una muestra funcional, consulte [Introducción](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/getting-started.html) en la Guía para desarrolladores de AWS SDK para Java.

**Example**  

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;

import javax.crypto.KeyGenerator;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

public class ServerSideEncryptionUsingClientSideEncryptionKey {
    private static SSECustomerKey SSE_KEY;
    private static AmazonS3 S3_CLIENT;
    private static KeyGenerator KEY_GENERATOR;

    public static void main(String[] args) throws IOException, NoSuchAlgorithmException {
        Regions clientRegion = Regions.DEFAULT_REGION;
        String bucketName = "*** Bucket name ***";
        String keyName = "*** Key name ***";
        String uploadFileName = "*** File path ***";
        String targetKeyName = "*** Target key name ***";

        // Create an encryption key.
        KEY_GENERATOR = KeyGenerator.getInstance("AES");
        KEY_GENERATOR.init(256, new SecureRandom());
        SSE_KEY = new SSECustomerKey(KEY_GENERATOR.generateKey());

        try {
            S3_CLIENT = AmazonS3ClientBuilder.standard()
                    .withCredentials(new ProfileCredentialsProvider())
                    .withRegion(clientRegion)
                    .build();

            // Upload an object.
            uploadObject(bucketName, keyName, new File(uploadFileName));

            // Download the object.
            downloadObject(bucketName, keyName);

            // Verify that the object is properly encrypted by attempting to retrieve it
            // using the encryption key.
            retrieveObjectMetadata(bucketName, keyName);

            // Copy the object into a new object that also uses SSE-C.
            copyObject(bucketName, keyName, targetKeyName);
        } catch (AmazonServiceException e) {
            // The call was transmitted successfully, but Amazon S3 couldn't process
            // it, so it returned an error response.
            e.printStackTrace();
        } catch (SdkClientException e) {
            // Amazon S3 couldn't be contacted for a response, or the client
            // couldn't parse the response from Amazon S3.
            e.printStackTrace();
        }
    }

    private static void uploadObject(String bucketName, String keyName, File file) {
        PutObjectRequest putRequest = new PutObjectRequest(bucketName, keyName, file).withSSECustomerKey(SSE_KEY);
        S3_CLIENT.putObject(putRequest);
        System.out.println("Object uploaded");
    }

    private static void downloadObject(String bucketName, String keyName) throws IOException {
        GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, keyName).withSSECustomerKey(SSE_KEY);
        S3Object object = S3_CLIENT.getObject(getObjectRequest);

        System.out.println("Object content: ");
        displayTextInputStream(object.getObjectContent());
    }

    private static void retrieveObjectMetadata(String bucketName, String keyName) {
        GetObjectMetadataRequest getMetadataRequest = new GetObjectMetadataRequest(bucketName, keyName)
                .withSSECustomerKey(SSE_KEY);
        ObjectMetadata objectMetadata = S3_CLIENT.getObjectMetadata(getMetadataRequest);
        System.out.println("Metadata retrieved. Object size: " + objectMetadata.getContentLength());
    }

    private static void copyObject(String bucketName, String keyName, String targetKeyName)
            throws NoSuchAlgorithmException {
        // Create a new encryption key for target so that the target is saved using
        // SSE-C.
        SSECustomerKey newSSEKey = new SSECustomerKey(KEY_GENERATOR.generateKey());

        CopyObjectRequest copyRequest = new CopyObjectRequest(bucketName, keyName, bucketName, targetKeyName)
                .withSourceSSECustomerKey(SSE_KEY)
                .withDestinationSSECustomerKey(newSSEKey);

        S3_CLIENT.copyObject(copyRequest);
        System.out.println("Object copied");
    }

    private static void displayTextInputStream(S3ObjectInputStream input) throws IOException {
        // Read one line at a time from the input stream and display each line.
        BufferedReader reader = new BufferedReader(new InputStreamReader(input));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
        System.out.println();
    }
}
```

------
#### [ .NET ]

**nota**  
Para ver ejemplos de cómo cargar objetos grandes con la API de carga multiparte, consulte [Carga de un objeto con la carga multiparte](mpu-upload-object.md) y [Uso de los SDK de AWS (API de bajo nivel)](mpu-upload-object.md#mpu-upload-low-level).

Para obtener información acerca de cómo configurar y ejecutar ejemplos de código, consulte [Introducción al SDK de AWS para .NET](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html) en la *Guía para desarrolladores del SDK de AWS para .NET*. 

**Example**  

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.IO;
using System.Security.Cryptography;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    class SSEClientEncryptionKeyObjectOperationsTest
    {
        private const string bucketName = "*** bucket name ***"; 
        private const string keyName = "*** key name for new object created ***"; 
        private const string copyTargetKeyName = "*** key name for object copy ***";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
        private static IAmazonS3 client;

        public static void Main()
        {
            client = new AmazonS3Client(bucketRegion);
            ObjectOpsUsingClientEncryptionKeyAsync().Wait();
        }
        private static async Task ObjectOpsUsingClientEncryptionKeyAsync()
        {
            try
            {
                // Create an encryption key.
                Aes aesEncryption = Aes.Create();
                aesEncryption.KeySize = 256;
                aesEncryption.GenerateKey();
                string base64Key = Convert.ToBase64String(aesEncryption.Key);

                // 1. Upload the object.
                PutObjectRequest putObjectRequest = await UploadObjectAsync(base64Key);
                // 2. Download the object and verify that its contents matches what you uploaded.
                await DownloadObjectAsync(base64Key, putObjectRequest);
                // 3. Get object metadata and verify that the object uses AES-256 encryption.
                await GetObjectMetadataAsync(base64Key);
                // 4. Copy both the source and target objects using server-side encryption with 
                //    a customer-provided encryption key.
                await CopyObjectAsync(aesEncryption, base64Key);
            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine("Error encountered ***. Message:'{0}' when writing an object", e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
            }
        }

        private static async Task<PutObjectRequest> UploadObjectAsync(string base64Key)
        {
            PutObjectRequest putObjectRequest = new PutObjectRequest
            {
                BucketName = bucketName,
                Key = keyName,
                ContentBody = "sample text",
                ServerSideEncryptionCustomerMethod = ServerSideEncryptionCustomerMethod.AES256,
                ServerSideEncryptionCustomerProvidedKey = base64Key
            };
            PutObjectResponse putObjectResponse = await client.PutObjectAsync(putObjectRequest);
            return putObjectRequest;
        }
        private static async Task DownloadObjectAsync(string base64Key, PutObjectRequest putObjectRequest)
        {
            GetObjectRequest getObjectRequest = new GetObjectRequest
            {
                BucketName = bucketName,
                Key = keyName,
                // Provide encryption information for the object stored in Amazon S3.
                ServerSideEncryptionCustomerMethod = ServerSideEncryptionCustomerMethod.AES256,
                ServerSideEncryptionCustomerProvidedKey = base64Key
            };

            using (GetObjectResponse getResponse = await client.GetObjectAsync(getObjectRequest))
            using (StreamReader reader = new StreamReader(getResponse.ResponseStream))
            {
                string content = reader.ReadToEnd();
                if (String.Compare(putObjectRequest.ContentBody, content) == 0)
                    Console.WriteLine("Object content is same as we uploaded");
                else
                    Console.WriteLine("Error...Object content is not same.");

                if (getResponse.ServerSideEncryptionCustomerMethod == ServerSideEncryptionCustomerMethod.AES256)
                    Console.WriteLine("Object encryption method is AES256, same as we set");
                else
                    Console.WriteLine("Error...Object encryption method is not the same as AES256 we set");

                // Assert.AreEqual(putObjectRequest.ContentBody, content);
                // Assert.AreEqual(ServerSideEncryptionCustomerMethod.AES256, getResponse.ServerSideEncryptionCustomerMethod);
            }
        }
        private static async Task GetObjectMetadataAsync(string base64Key)
        {
            GetObjectMetadataRequest getObjectMetadataRequest = new GetObjectMetadataRequest
            {
                BucketName = bucketName,
                Key = keyName,

                // The object stored in Amazon S3 is encrypted, so provide the necessary encryption information.
                ServerSideEncryptionCustomerMethod = ServerSideEncryptionCustomerMethod.AES256,
                ServerSideEncryptionCustomerProvidedKey = base64Key
            };

            GetObjectMetadataResponse getObjectMetadataResponse = await client.GetObjectMetadataAsync(getObjectMetadataRequest);
            Console.WriteLine("The object metadata show encryption method used is: {0}", getObjectMetadataResponse.ServerSideEncryptionCustomerMethod);
            // Assert.AreEqual(ServerSideEncryptionCustomerMethod.AES256, getObjectMetadataResponse.ServerSideEncryptionCustomerMethod);
        }
        private static async Task CopyObjectAsync(Aes aesEncryption, string base64Key)
        {
            aesEncryption.GenerateKey();
            string copyBase64Key = Convert.ToBase64String(aesEncryption.Key);

            CopyObjectRequest copyRequest = new CopyObjectRequest
            {
                SourceBucket = bucketName,
                SourceKey = keyName,
                DestinationBucket = bucketName,
                DestinationKey = copyTargetKeyName,
                // Information about the source object's encryption.
                CopySourceServerSideEncryptionCustomerMethod = ServerSideEncryptionCustomerMethod.AES256,
                CopySourceServerSideEncryptionCustomerProvidedKey = base64Key,
                // Information about the target object's encryption.
                ServerSideEncryptionCustomerMethod = ServerSideEncryptionCustomerMethod.AES256,
                ServerSideEncryptionCustomerProvidedKey = copyBase64Key
            };
            await client.CopyObjectAsync(copyRequest);
        }
    }
}
```

------

## Uso de los SDK de AWS para especificar SSE-C en las cargas multiparte
<a name="sse-c-using-sdks-multipart-uploads"></a>

En el ejemplo de la sección anterior se muestra cómo solicitar cifrado del lado del servidor con claves proporcionadas por el cliente (SSE-C) en operaciones PUT, GET, Head y Copy. En esta sección se describen otras API de Amazon S3 que admiten SSE-C.

------
#### [ Java ]

Para cargar objetos grandes, puede utilizar las API de carga multiparte. Para obtener más información, consulte [Carga y copia de objetos con la carga multiparte en Amazon S3](mpuoverview.md). Puede usar API de nivel alto o de nivel bajo para cargar objetos grandes. Estas API admiten los encabezados relacionados con el cifrado en la solicitud.
+ Cuando utiliza la API de `TransferManager` de alto nivel, proporciona los encabezados específicos del cifrado en la `PutObjectRequest`. Para obtener más información, consulte [Carga de un objeto con la carga multiparte](mpu-upload-object.md). 
+ Al usar la API de bajo nivel, proporcionará información relacionada con el cifrado en la `InitiateMultipartUploadRequest`, seguida por información de cifrado idéntica en cada `UploadPartRequest`. No necesita proporcionar encabezados específicos de cifrado en su `CompleteMultipartUploadRequest`. Para ver ejemplos, consulte [Uso de los SDK de AWS (API de bajo nivel)](mpu-upload-object.md#mpu-upload-low-level). 

En el siguiente ejemplo se usa `TransferManager` para crear objetos y se muestra cómo facilitar la información relacionada con SSE-C. En el ejemplo se realiza lo siguiente:
+ Crea un objeto mediante el método `TransferManager.upload()`. En la instancia de `PutObjectRequest`, proporciona la información de la clave de cifrado en la solicitud. Amazon S3 cifre el objeto utilizando la clave de facilitada por el cliente.
+ Realiza una copia del objeto llamando al método `TransferManager.copy()`. El ejemplo indica a Amazon S3 que cifre la copia del objeto con una nueva `SSECustomerKey`. Dado que el objeto de origen está cifrado con SSE-C, la `CopyObjectRequest` también facilita la clave de cifrado del objeto de origen, de modo que Amazon S3 puede descifrar el objeto antes de copiarlo. 

**Example**  

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.CopyObjectRequest;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.amazonaws.services.s3.model.SSECustomerKey;
import com.amazonaws.services.s3.transfer.Copy;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;
import com.amazonaws.services.s3.transfer.Upload;

import javax.crypto.KeyGenerator;
import java.io.File;
import java.security.SecureRandom;

public class ServerSideEncryptionCopyObjectUsingHLwithSSEC {

    public static void main(String[] args) throws Exception {
        Regions clientRegion = Regions.DEFAULT_REGION;
        String bucketName = "*** Bucket name ***";
        String fileToUpload = "*** File path ***";
        String keyName = "*** New object key name ***";
        String targetKeyName = "*** Key name for object copy ***";

        try {
            AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                    .withRegion(clientRegion)
                    .withCredentials(new ProfileCredentialsProvider())
                    .build();
            TransferManager tm = TransferManagerBuilder.standard()
                    .withS3Client(s3Client)
                    .build();

            // Create an object from a file.
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, keyName, new File(fileToUpload));

            // Create an encryption key.
            KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
            keyGenerator.init(256, new SecureRandom());
            SSECustomerKey sseCustomerEncryptionKey = new SSECustomerKey(keyGenerator.generateKey());

            // Upload the object. TransferManager uploads asynchronously, so this call
            // returns immediately.
            putObjectRequest.setSSECustomerKey(sseCustomerEncryptionKey);
            Upload upload = tm.upload(putObjectRequest);

            // Optionally, wait for the upload to finish before continuing.
            upload.waitForCompletion();
            System.out.println("Object created.");

            // Copy the object and store the copy using SSE-C with a new key.
            CopyObjectRequest copyObjectRequest = new CopyObjectRequest(bucketName, keyName, bucketName, targetKeyName);
            SSECustomerKey sseTargetObjectEncryptionKey = new SSECustomerKey(keyGenerator.generateKey());
            copyObjectRequest.setSourceSSECustomerKey(sseCustomerEncryptionKey);
            copyObjectRequest.setDestinationSSECustomerKey(sseTargetObjectEncryptionKey);

            // Copy the object. TransferManager copies asynchronously, so this call returns
            // immediately.
            Copy copy = tm.copy(copyObjectRequest);

            // Optionally, wait for the upload to finish before continuing.
            copy.waitForCompletion();
            System.out.println("Copy complete.");
        } catch (AmazonServiceException e) {
            // The call was transmitted successfully, but Amazon S3 couldn't process
            // it, so it returned an error response.
            e.printStackTrace();
        } catch (SdkClientException e) {
            // Amazon S3 couldn't be contacted for a response, or the client
            // couldn't parse the response from Amazon S3.
            e.printStackTrace();
        }
    }
}
```

------
#### [ .NET ]

Para cargar objetos grandes, puede utilizar la API de carga multiparte (consulte [Carga y copia de objetos con la carga multiparte en Amazon S3](mpuoverview.md)).AWS SDK para .NET proporciona API de nivel alto o bajo para cargar objetos de gran tamaño. Estas API admiten los encabezados relacionados con el cifrado en la solicitud.
+ Cuando utiliza la API de `Transfer-Utility ` de alto nivel, usted proporciona los encabezados específicos del cifrado en `TransferUtilityUploadRequest` como se muestra. Para ver ejemplos de código, consulte [Carga de un objeto con la carga multiparte](mpu-upload-object.md).

  ```
  TransferUtilityUploadRequest request = new TransferUtilityUploadRequest()
  {
      FilePath = filePath,
      BucketName = existingBucketName,
      Key = keyName,
      // Provide encryption information.
      ServerSideEncryptionCustomerMethod = ServerSideEncryptionCustomerMethod.AES256,
      ServerSideEncryptionCustomerProvidedKey = base64Key,
  };
  ```
+ Al usar la API de bajo nivel, proporcionará información relacionada con el cifrado en la solicitud de inicio de la carga multiparte, seguida por información de cifrado idéntica en las solicitudes de carga de partes subsiguientes. No necesita proporcionar encabezados específicos de cifrado en su solicitud de carga multiparte completa. Para ver ejemplos, consulte [Uso de los SDK de AWS (API de bajo nivel)](mpu-upload-object.md#mpu-upload-low-level).

  A continuación se muestra un ejemplo de carga multiparte de bajo nivel que hace una copia de un objeto grande existente. En el ejemplo, el objeto que se copiará se guarda en Amazon S3 mediante el SSE-C y usted también desea usar el SSE-C para guardar el objeto de destino. En el ejemplo, hará lo siguiente:
  + Inicie una solicitud de carga multiparte proporcionando una clave de cifrado y la información relacionada.
  + Proporcione las claves de cifrado del objeto de origen y de destino, y la información relacionada en `CopyPartRequest`.
  + Recupere los metadatos del objeto para obtener el tamaño del objeto de origen que se copiará.
  + Cargue los objetos en partes de 5 MB.  
**Example**  

  ```
  using Amazon;
  using Amazon.S3;
  using Amazon.S3.Model;
  using System;
  using System.Collections.Generic;
  using System.IO;
  using System.Security.Cryptography;
  using System.Threading.Tasks;
  
  namespace Amazon.DocSamples.S3
  {
      class SSECLowLevelMPUcopyObjectTest
      {
          private const string existingBucketName = "*** bucket name ***";
          private const string sourceKeyName      = "*** source object key name ***"; 
          private const string targetKeyName      = "*** key name for the target object ***";
          private const string filePath           = @"*** file path ***";
          // Specify your bucket region (an example region is shown).
          private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
          private static IAmazonS3 s3Client;
          static void Main()
          {
              s3Client = new AmazonS3Client(bucketRegion);
              CopyObjClientEncryptionKeyAsync().Wait();
          }
  
          private static async Task CopyObjClientEncryptionKeyAsync()
          {
              Aes aesEncryption = Aes.Create();
              aesEncryption.KeySize = 256;
              aesEncryption.GenerateKey();
              string base64Key = Convert.ToBase64String(aesEncryption.Key);
  
              await CreateSampleObjUsingClientEncryptionKeyAsync(base64Key, s3Client);
  
              await CopyObjectAsync(s3Client, base64Key);
          }
          private static async Task CopyObjectAsync(IAmazonS3 s3Client, string base64Key)
          {
              List<CopyPartResponse> uploadResponses = new List<CopyPartResponse>();
  
              // 1. Initialize.
              InitiateMultipartUploadRequest initiateRequest = new InitiateMultipartUploadRequest
              {
                  BucketName = existingBucketName,
                  Key = targetKeyName,
                  ServerSideEncryptionCustomerMethod = ServerSideEncryptionCustomerMethod.AES256,
                  ServerSideEncryptionCustomerProvidedKey = base64Key,
              };
  
              InitiateMultipartUploadResponse initResponse =
                  await s3Client.InitiateMultipartUploadAsync(initiateRequest);
  
              // 2. Upload Parts.
              long partSize = 5 * (long)Math.Pow(2, 20); // 5 MB
              long firstByte = 0;
              long lastByte = partSize;
  
              try
              {
                  // First find source object size. Because object is stored encrypted with
                  // customer provided key you need to provide encryption information in your request.
                  GetObjectMetadataRequest getObjectMetadataRequest = new GetObjectMetadataRequest()
                  {
                      BucketName = existingBucketName,
                      Key = sourceKeyName,
                      ServerSideEncryptionCustomerMethod = ServerSideEncryptionCustomerMethod.AES256,
                      ServerSideEncryptionCustomerProvidedKey = base64Key // " * **source object encryption key ***"
                  };
  
                  GetObjectMetadataResponse getObjectMetadataResponse = await s3Client.GetObjectMetadataAsync(getObjectMetadataRequest);
  
                  long filePosition = 0;
                  for (int i = 1; filePosition < getObjectMetadataResponse.ContentLength; i++)
                  {
                      CopyPartRequest copyPartRequest = new CopyPartRequest
                      {
                          UploadId = initResponse.UploadId,
                          // Source.
                          SourceBucket = existingBucketName,
                          SourceKey = sourceKeyName,
                          // Source object is stored using SSE-C. Provide encryption information.
                          CopySourceServerSideEncryptionCustomerMethod = ServerSideEncryptionCustomerMethod.AES256,
                          CopySourceServerSideEncryptionCustomerProvidedKey = base64Key, //"***source object encryption key ***",
                          FirstByte = firstByte,
                          // If the last part is smaller then our normal part size then use the remaining size.
                          LastByte = lastByte > getObjectMetadataResponse.ContentLength ?
                              getObjectMetadataResponse.ContentLength - 1 : lastByte,
  
                          // Target.
                          DestinationBucket = existingBucketName,
                          DestinationKey = targetKeyName,
                          PartNumber = i,
                          // Encryption information for the target object.
                          ServerSideEncryptionCustomerMethod = ServerSideEncryptionCustomerMethod.AES256,
                          ServerSideEncryptionCustomerProvidedKey = base64Key
                      };
                      uploadResponses.Add(await s3Client.CopyPartAsync(copyPartRequest));
                      filePosition += partSize;
                      firstByte += partSize;
                      lastByte += partSize;
                  }
  
                  // Step 3: complete.
                  CompleteMultipartUploadRequest completeRequest = new CompleteMultipartUploadRequest
                  {
                      BucketName = existingBucketName,
                      Key = targetKeyName,
                      UploadId = initResponse.UploadId,
                  };
                  completeRequest.AddPartETags(uploadResponses);
  
                  CompleteMultipartUploadResponse completeUploadResponse =
                      await s3Client.CompleteMultipartUploadAsync(completeRequest);
              }
              catch (Exception exception)
              {
                  Console.WriteLine("Exception occurred: {0}", exception.Message);
                  AbortMultipartUploadRequest abortMPURequest = new AbortMultipartUploadRequest
                  {
                      BucketName = existingBucketName,
                      Key = targetKeyName,
                      UploadId = initResponse.UploadId
                  };
                  s3Client.AbortMultipartUpload(abortMPURequest);
              }
          }
          private static async Task CreateSampleObjUsingClientEncryptionKeyAsync(string base64Key, IAmazonS3 s3Client)
          {
              // List to store upload part responses.
              List<UploadPartResponse> uploadResponses = new List<UploadPartResponse>();
  
              // 1. Initialize.
              InitiateMultipartUploadRequest initiateRequest = new InitiateMultipartUploadRequest
              {
                  BucketName = existingBucketName,
                  Key = sourceKeyName,
                  ServerSideEncryptionCustomerMethod = ServerSideEncryptionCustomerMethod.AES256,
                  ServerSideEncryptionCustomerProvidedKey = base64Key
              };
  
              InitiateMultipartUploadResponse initResponse =
                 await s3Client.InitiateMultipartUploadAsync(initiateRequest);
  
              // 2. Upload Parts.
              long contentLength = new FileInfo(filePath).Length;
              long partSize = 5 * (long)Math.Pow(2, 20); // 5 MB
  
              try
              {
                  long filePosition = 0;
                  for (int i = 1; filePosition < contentLength; i++)
                  {
                      UploadPartRequest uploadRequest = new UploadPartRequest
                      {
                          BucketName = existingBucketName,
                          Key = sourceKeyName,
                          UploadId = initResponse.UploadId,
                          PartNumber = i,
                          PartSize = partSize,
                          FilePosition = filePosition,
                          FilePath = filePath,
                          ServerSideEncryptionCustomerMethod = ServerSideEncryptionCustomerMethod.AES256,
                          ServerSideEncryptionCustomerProvidedKey = base64Key
                      };
  
                      // Upload part and add response to our list.
                      uploadResponses.Add(await s3Client.UploadPartAsync(uploadRequest));
  
                      filePosition += partSize;
                  }
  
                  // Step 3: complete.
                  CompleteMultipartUploadRequest completeRequest = new CompleteMultipartUploadRequest
                  {
                      BucketName = existingBucketName,
                      Key = sourceKeyName,
                      UploadId = initResponse.UploadId,
                      //PartETags = new List<PartETag>(uploadResponses)
  
                  };
                  completeRequest.AddPartETags(uploadResponses);
  
                  CompleteMultipartUploadResponse completeUploadResponse =
                      await s3Client.CompleteMultipartUploadAsync(completeRequest);
  
              }
              catch (Exception exception)
              {
                  Console.WriteLine("Exception occurred: {0}", exception.Message);
                  AbortMultipartUploadRequest abortMPURequest = new AbortMultipartUploadRequest
                  {
                      BucketName = existingBucketName,
                      Key = sourceKeyName,
                      UploadId = initResponse.UploadId
                  };
                  await s3Client.AbortMultipartUploadAsync(abortMPURequest);
              }
          }
      }
  }
  ```

------

# Bloqueo o desbloqueo de SSE-C para un bucket de uso general
<a name="blocking-unblocking-s3-c-encryption-gpb"></a>

En la mayoría de casos de uso modernos de Amazon S3 ya no se utiliza el cifrado del servidor con claves proporcionadas por el cliente (SSE-C) porque no tiene la flexibilidad del cifrado del servidor con claves administradas por Amazon S3 (SSE-S3) o el cifrado del servidor con claves de AWS KMS (SSE-KMS). El requisito de SSE-C de proporcionar la clave de cifrado cada vez que interactúa con los datos cifrados de SSE-C hace que no sea práctico compartir la clave de SSE-C con otros usuarios, roles o servicios de AWS que leen datos de los buckets de S3 para poder operar en los datos.

Para limitar los tipos de cifrado del servidor que puede utilizar en los buckets de uso general, tiene la opción de elegir bloquear las solicitudes de escritura de SSE-C actualizando la configuración de cifrado predeterminada de los buckets. Esta configuración por bucket bloquea las solicitudes de carga de objetos que especifican SSE-C. Cuando se bloquea SSE-C para un bucket, cualquier solicitud `PutObject`, `CopyObject`, `PostObject` o de replicación o carga multiparte que especifique el cifrado SSE-C se rechazará con un error HTTP 403 `AccessDenied`.

Esta configuración es un parámetro de la API de `PutBucketEncryption` y también se puede actualizar mediante la consola de S3, la AWS CLI y los AWS SDK, si tiene el permiso `s3:PutEncryptionConfiguration`.

Los valores válidos son `SSE-C`, que bloquea el cifrado SSE-C para el bucket de uso general y `NONE`, que permite usar SSE-C para escribir en el bucket.

**importante**  
A partir de abril de 2026, AWS desactivará el cifrado del servidor con claves proporcionadas por el cliente (SSE-C) para todos los buckets nuevos. Además, el cifrado SSE-C se desactivará para todos los buckets existentes en Cuentas de AWS que no contengan datos cifrados con SSE-C. Con estos cambios, las pocas aplicaciones que necesitan el cifrado SSE-C deberán habilitar deliberadamente el uso de SSE-C a través de la API [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html) después de crear el bucket. En estos casos, es posible que deba actualizar los scripts de automatización, las plantillas de CloudFormation u otras herramientas de configuración de infraestructura para configurar estos ajustes. Para obtener más información, consulte la [publicación del Blog de almacenamiento de AWS](https://aws.amazon.com/blogs/storage/advanced-notice-amazon-s3-to-disable-the-use-of-sse-c-encryption-by-default-for-all-new-buckets-and-select-existing-buckets-in-april-2026/).

## Permisos
<a name="bucket-encryption-permissions"></a>

Utilice la API de `PutBucketEncryption` o la consola de S3, los AWS SDK o la AWS CLI para bloquear o desbloquear los tipos de cifrado para un bucket de uso general. Debe tener el siguiente permiso:
+ `s3:PutEncryptionConfiguration`

Utilice la API de `GetBucketEncryption` o la consola de S3, los AWS SDK o la AWS CLI para ver los tipos de cifrado bloqueados para un bucket de uso general. Debe tener el siguiente permiso:
+ `s3:GetEncryptionConfiguration`

## Consideraciones antes de bloquear el cifrado SSE-C
<a name="considerations-before-blocking-sse-c"></a>

Después de bloquear SSE-C para cualquier bucket, se aplica el siguiente comportamiento de cifrado:
+ No hay ninguna variación en el cifrado de los objetos que existían en el bucket antes de que bloqueara el cifrado SSE-C.
+ Tras bloquear el cifrado SSE-C, puede seguir realizando solicitudes GetObject y HeadObject en objetos preexistentes cifrados con SSE-C siempre que proporcione los encabezados de SSE-C necesarios en las solicitudes.
+ Cuando se bloquea SSE-C para un bucket, cualquier solicitud `PutObject`, `CopyObject`, `PostObject` o de carga multiparte que especifique el cifrado SSE-C se rechazará con un error 403 `AccessDenied`.
+ Si un bucket de destino para la replicación tiene SSE-C bloqueado y los objetos de origen que se están replicando están cifrados con SSE-C, la replicación producirá un error HTTP 403 `AccessDenied`.

Si quiere comprobar si utiliza el cifrado SSE-C en alguno de los buckets antes de bloquear este tipo de cifrado, puede utilizar herramientas como [AWS CloudTrail](https://aws.amazon.com/cloudtrail/) para supervisar el acceso a los datos. En esta [entrada de blog](https://aws.amazon.com/blogs/storage/auditing-amazon-s3-server-side-encryption-methods-for-object-uploads/), se muestra cómo auditar los métodos de cifrado para la carga de objetos en tiempo real. También puede consultar este [artículo de re:Post](https://repost.aws/articles/ARhGC12rOiTBCKHcAe9GZXCA/how-to-detect-existing-use-of-sse-c-in-your-amazon-s3-buckets) como guía a la hora de consultar los informes de inventario de S3 para ver si tiene algún objeto cifrado con SSE-C.

### Steps
<a name="block-sse-c-gpb-steps"></a>

Puede bloquear o desbloquear el cifrado del servidor con claves proporcionadas por el cliente (SSE-C) para un bucket de uso general mediante la consola de Amazon S3, la AWS Command Line Interface (AWS CLI), la API de REST de Amazon S3 y los AWS SDK.

### Uso de la consola de S3
<a name="block-sse-c-gpb-console"></a>

Para bloquear o desbloquear el cifrado SSE-C de un bucket mediante la consola de Amazon S3:

1. Inicie sesión en la consola de administración de AWS y abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.

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

1. Seleccione el bucket para el que desea bloquear el cifrado SSE-C.

1. Seleccione la pestaña **Propiedades** del bucket.

1. Navegue hasta el panel de propiedades de **Cifrado predeterminado** del bucket y seleccione **Editar**.

1. En la sección **Tipos de cifrado bloqueados**, marque la casilla situada junto a **Cifrado del servidor con claves proporcionadas por el cliente (SSE-C)** para bloquear el cifrado SSE-C o desmarque esta casilla para permitir SSE-C.

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

### Uso de AWS CLI
<a name="block-sse-c-gpb-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 bloquear o desbloquear el cifrado SSE-C 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 para bloquear el cifrado SSE-C para un bucket de uso general:**

```
aws s3api put-bucket-encryption \
  --bucket amzn-s3-demo-bucket \
  --server-side-encryption-configuration '{
    "Rules": [{
      "BlockEncryptionTypes": {
        "EncryptionType": "SSE-C"
      }
    }]
  }'
```

**Solicitud para habilitar el uso del cifrado SSE-C en un bucket de uso general:**

```
aws s3api put-bucket-encryption \
  --bucket amzn-s3-demo-bucket \
  --server-side-encryption-configuration '{
    "Rules": [{
      "BlockEncryptionTypes": {
        "EncryptionType": "NONE"
      }
    }]
  }'
```

## Uso de los AWS SDK
<a name="block-sse-c-gpb-sdks"></a>

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

En los ejemplos siguientes, se muestra cómo bloquear o desbloquear las escrituras de cifrado SSE-C para los buckets de uso general mediante los AWS SDK.

**Ejemplo: solicitud PutBucketEncryption que establece la configuración de cifrado predeterminada en SSE-S3 y bloquea SSE-C**

```
S3Client s3Client = ...;
ServerSideEncryptionByDefault defaultSse = ServerSideEncryptionByDefault
        .builder()
        .sseAlgorithm(ServerSideEncryption.AES256)
        .build();
BlockedEncryptionTypes blockedEncryptionTypes = BlockedEncryptionTypes
        .builder()
        .encryptionType(EncryptionType.SSE_C)
        .build();
ServerSideEncryptionRule rule = ServerSideEncryptionRule.builder()
        .applyServerSideEncryptionByDefault(defaultSse)
        .blockedEncryptionTypes(blockedEncryptionTypes)
        .build();
s3Client.putBucketEncryption(be -> be
        .bucket(bucketName)
        .serverSideEncryptionConfiguration(c -> c.rules(rule)));
```

**Ejemplo: solicitud PutBucketEncryption que establece la configuración de cifrado predeterminada en SSE-S3 y desbloquea SSE-C**

```
S3Client s3Client = ...;
ServerSideEncryptionByDefault defaultSse = ServerSideEncryptionByDefault
        .builder()
        .sseAlgorithm(ServerSideEncryption.AES256)
        .build();
BlockedEncryptionTypes blockedEncryptionTypes = BlockedEncryptionTypes
        .builder()
        .encryptionType(EncryptionType.NONE)
        .build();
ServerSideEncryptionRule rule = ServerSideEncryptionRule.builder()
        .applyServerSideEncryptionByDefault(defaultSse)
        .blockedEncryptionTypes(blockedEncryptionTypes)
        .build();
s3Client.putBucketEncryption(be -> be
        .bucket(bucketName)
        .serverSideEncryptionConfiguration(c -> c.rules(rule)));
```

------
#### [ SDK for Python Boto3 ]

**Ejemplo: solicitud PutBucketEncryption que establece la configuración de cifrado predeterminada en SSE-S3 y bloquea SSE-C**

```
s3 = boto3.client("s3")
s3.put_bucket_encryption(
    Bucket="amzn-s3-demo-bucket",
    ServerSideEncryptionConfiguration={
        "Rules":[{
            "ApplyServerSideEncryptionByDefault": {
                "SSEAlgorithm": "AES256"
            },
            "BlockedEncryptionTypes": {
                "EncryptionType": ["SSE-C"]
            }
        }]
    }
)
```

**Ejemplo: solicitud PutBucketEncryption que establece la configuración de cifrado predeterminada en SSE-S3 y desbloquea SSE-C**

```
s3 = boto3.client("s3")
s3.put_bucket_encryption(
    Bucket="amzn-s3-demo-bucket",
    ServerSideEncryptionConfiguration={
        "Rules":[{
            "ApplyServerSideEncryptionByDefault": {
                "SSEAlgorithm": "AES256"
            },
            "BlockedEncryptionTypes": {
                "EncryptionType": ["NONE"]
            }
        }]
    }
)
```

------

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

Para obtener información sobre la compatibilidad con la API de REST de Amazon S3 para el bloqueo o desbloqueo del cifrado SSE-C para un bucket de uso general, consulte la siguiente sección en la *Referencia de la API de Amazon Simple Storage Service*:
+ Tipo de datos [BlockedEncryptionTypes](https://docs.aws.amazon.com/AmazonS3/latest/API/API_BlockedEncryptionTypes.html) usado en el tipo de datos [ServerSideEncryptionRule](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ServerSideEncryptionRule.html) de las operaciones de la API [PutBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html) y [GetBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html).

# Configuración de SSE-C predeterminada para preguntas frecuentes de buckets nuevos
<a name="default-s3-c-encryption-setting-faq"></a>

**importante**  
A partir de abril de 2026, AWS desactivará el cifrado del servidor con claves proporcionadas por el cliente (SSE-C) para todos los buckets nuevos. Además, el cifrado SSE-C se desactivará para todos los buckets existentes en Cuentas de AWS que no contengan datos cifrados con SSE-C. Con estos cambios, las pocas aplicaciones que necesitan el cifrado SSE-C deberán habilitar deliberadamente el uso de SSE-C a través de la API [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html) después de crear el bucket. En estos casos, es posible que deba actualizar los scripts de automatización, las plantillas de CloudFormation u otras herramientas de configuración de infraestructura para configurar estos ajustes. Para obtener más información, consulte la [publicación del Blog de almacenamiento de AWS](https://aws.amazon.com/blogs/storage/advanced-notice-amazon-s3-to-disable-the-use-of-sse-c-encryption-by-default-for-all-new-buckets-and-select-existing-buckets-in-april-2026/).

Las siguientes secciones responden a las preguntas sobre esta actualización.

**1. En abril de 2026, ¿entrará en vigor la nueva configuración de SSE-C para todos los buckets recién creados?**

Sí. Durante el mes de abril de 2026, la nueva configuración predeterminada se implementará gradualmente en todas las regiones de AWS.

**2. ¿Cuánto tiempo pasará antes de que esta implementación cubra todas las regiones de AWS?**

Esta actualización tardará varias semanas en lanzarse. Realizaremos una publicación sobre las novedades cuando empecemos a implementar esta actualización.

**3. Cómo sabré que la actualización se ha completado?**

Para determinar fácilmente si el cambio se ha realizado en la región de AWS, cree un nuevo bucket y llame a la operación de la API [GetBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html) para determinar si el cifrado SSE-C está desactivado. Una vez finalizada la actualización, todos los buckets de uso general desactivarán automáticamente el cifrado SSE-C de forma predeterminada. Puede ajustar esta configuración después de crear el bucket de S3 mediante la operación de la API [PutBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html).

**4. Amazon S3 actualizará las configuraciones de mis bucket existentes?**

Si la cuenta de AWS no tiene ningún objeto con cifrado SSE-C, AWS desactivará el cifrado SSE-C en todos los buckets existentes. Si algún bucket de la cuenta de AWS tiene objetos con cifrado SSE-C, AWS no cambiará la configuración del bucket de ninguno de los buckets de esa cuenta. Cuando se complete el cambio `CreateBucket` en la región de AWS, la nueva configuración predeterminada se aplicará a todos los nuevos buckets de uso general. 

 **5. Puedo desactivar el cifrado SSE-C para mis buckets antes de que se complete la actualización?** 

Sí. Para desactivar el cifrado SSE-C en cualquier bucket, llame a la operación de la API [PutBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html) y especifique el nuevo encabezado `BlockedEncryptionTypes`. 

**6. Puedo usar SSE-C para cifrar los datos de mis nuevos buckets?**

Sí. En la mayoría de casos de uso modernos de Amazon S3 ya no se utiliza SSE-C porque no tiene la flexibilidad del cifrado del servidor con claves administradas por Amazon S3 (SSE-S3) o el cifrado del servidor con claves de AWS KMS (SSE-KMS). Si necesita usar el cifrado SSE-C en un bucket nuevo, puede crear el nuevo bucket y, a continuación, habilitar el uso del cifrado SSE-C en una solicitud `PutBucketEncryption` independiente.

 **Ejemplo**

```
aws s3api create-bucket \  
bucket amzn-s3-demo-bucket \ 
region us-east-1 \ 
  
aws s3api put-bucket-encryption \  
-- bucket amzn-s3-demo-bucket \
-- server-side-encryption-configuration \
'{ \Rules\: [{   
   {   
   \ApplyServerSideEncryptionByDefault\: {   
     \SSEAlgorithm\: \AES256\,  
    },   
   \BlockedEncryptionTypes\: [  
     \EncryptionType\:\NONE\]   
   }   
   }]   
}'
```

**nota**  
Debe tener el permiso `s3:PutEncryptionConfiguration` para llamar a la API `PutBucketEncryption`. 

**7. Cómo afecta el bloqueo de SSE-C a las solicitudes a mi bucket?**

Cuando se bloquea SSE-C para un bucket, cualquier solicitud `PutObject`, `CopyObject`, `PostObject` o de replicación o carga multiparte que especifique el cifrado SSE-C se rechazará con un error HTTP 403 `AccessDenied`. 

# Protección de los datos con el cifrado del cliente
<a name="UsingClientSideEncryption"></a>

El *cifrado del cliente* es el acto de cifrar los datos de manera local para ayudar a garantizar su seguridad en tránsito y en reposo. Para cifrar los objetos antes de enviarlos a Amazon S3, utilice el cliente de cifrado de Amazon S3. Si cifra sus objetos de esta manera, no estarán expuestos a terceros, ni siquiera AWS. Amazon S3 recibe los objetos ya cifrados; Amazon S3 no interviene en el cifrado ni el descifrado de los objetos. Puede utilizar tanto el cliente de cifrado de Amazon S3 como el [cifrado del lado del servidor](serv-side-encryption.md) para cifrar sus datos. Cuando envía objetos cifrados a Amazon S3, Amazon S3 no reconoce los objetos como cifrados, solo detecta los objetos típicos.

El cliente de cifrado de Amazon S3 funciona como intermediario entre usted y Amazon S3. Tras crear una instancia del cliente de cifrado de Amazon S3, sus objetos se cifran y descifran automáticamente como parte de sus solicitudes `PutObject` y `GetObject` de Amazon S3. Todos sus objetos se cifran con una clave de datos única. El cliente de cifrado de Amazon S3 no usa claves de bucket ni interactúa con ellas, incluso si especifica una clave de KMS como clave de empaquetado.

La *Guía para desarrolladores del cliente de cifrado de Amazon S3* se centra en las versiones 3.0 y posteriores del cliente de cifrado de Amazon S3. Para obtener más información, consulte [¿Qué es el cifrado del cliente de Amazon S3?](https://docs.aws.amazon.com//amazon-s3-encryption-client/latest/developerguide/what-is-s3-encryption-client.html) en la *Guía para desarrolladores de cifrado del cliente de Amazon S3*.

Para obtener más información acerca de las versiones anteriores del cliente de cifrado de Amazon S3, consulte la Guía para desarrolladores del SDK de AWS de su lenguaje de programación.
+ [AWS SDK para Java](https://docs.aws.amazon.com//sdk-for-java/v1/developer-guide/examples-crypto.html)
+ [AWS SDK para .NET](https://docs.aws.amazon.com//sdk-for-net/v3/developer-guide/kms-keys-s3-encryption.html)
+ [AWS SDK para Go](https://docs.aws.amazon.com//sdk-for-go/v1/developer-guide/welcome.html)
+ [AWS SDK para PHP](https://docs.aws.amazon.com//sdk-for-php/v3/developer-guide/s3-encryption-client.html)
+ [AWS SDK para Ruby](https://docs.aws.amazon.com//sdk-for-ruby/v3/api/Aws/S3/Encryption.html)
+ [AWS SDK para C\$1\$1](https://docs.aws.amazon.com//sdk-for-cpp/v1/developer-guide/welcome.html)

# Protección de los datos en tránsito con cifrado
<a name="UsingEncryptionInTransit"></a>

Amazon S3 admite los protocolos HTTP y HTTPS para la transmisión de datos. HTTP transmite los datos en texto sin formato, mientras que HTTPS agrega una capa de seguridad al cifrar los datos mediante seguridad de la capa de transporte (TLS). TLS protege contra el espionaje, la manipulación de datos y los ataques de intermediarios. Aunque se acepta el tráfico HTTP, la mayoría de las implementaciones utilizan el cifrado en tránsito con HTTPS y TLS para proteger los datos cuando viajan entre los clientes y Amazon S3.

## Soporte de TLS 1.2 y TLS 1.3
<a name="UsingEncryptionInTransit.TLS-support"></a>

Amazon S3 admite TLS 1.2 y TLS 1.3 para las conexiones HTTPS en todos los puntos de conexión de la API para todas las Regiones de AWS. S3 negocia automáticamente la protección TLS más sólida compatible con el software de cliente y el punto de conexión de S3 al que está accediendo. Las herramientas de AWS actuales (de 2014 o posteriores), incluidos los AWS SDK y la AWS CLI pasan automáticamente a TLS 1.3 de forma predeterminada, sin que sea necesario que realice ninguna acción. Puede invalidar esta negociación automática mediante los ajustes de configuración del cliente para especificar una versión de TLS concreta si se necesita la compatibilidad con versiones anteriores de TLS 1.2. Si utiliza TLS 1.3, puede configurar opcionalmente el intercambio de claves poscuánticas híbrido (ML-KEM) para realizar solicitudes con resistencia cuántica a Amazon S3. Para obtener más información, consulte [Configuración del cifrado TLS poscuántico híbrido para el cliente](pqtls-how-to.md). 

**nota**  
TLS 1.3 se admite en todos los puntos de conexión de S3, excepto en AWS PrivateLink para Amazon S3 y los puntos de acceso multirregionales.

## Supervisión del uso de TLS
<a name="UsingEncryptionInTransit.monitoring"></a>

Puede utilizar los registros de acceso al servidor de Amazon S3 o AWS CloudTrail para supervisar las solicitudes a los buckets de Amazon S3. Ambas opciones de registro registran la versión de TLS y el conjunto de cifrado utilizados en cada solicitud.
+ **Registros de acceso del servidor de Amazon S3**: el registro de acceso del servidor brinda registros detallados para las solicitudes realizadas a un bucket. Por ejemplo, la información del registro de acceso puede ser útil en auditorías de acceso y seguridad. Para obtener más información, consulte [Formato de registro de acceso al servidor de Amazon S3](LogFormat.md).
+ **AWS CloudTrail**: [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) es un servicio que proporciona un registro de las acciones que realiza un usuario, un rol o un servicio de AWS. CloudTrail captura todas las llamadas a la API para Amazon S3 como eventos. Para obtener más información, consulte [Eventos de Amazon S3 CloudTrail](cloudtrail-logging-s3-info.md).

## Aplicación del cifrado en tránsito
<a name="UsingEncryptionInTransit.enforcement"></a>

Es una práctica recomendada de seguridad para aplicar el cifrado de los datos en tránsito a Amazon S3. Puede aplicar la comunicación solo mediante HTTPS o el uso de una versión de TLS específica a través de varios mecanismos de políticas. Estos incluyen políticas de IAM basadas en recursos para buckets de S3 ([políticas de bucket](bucket-policies.md)), [Políticas de control de servicios](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) (SCP), [Políticas de control de recursos](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html) (RCP) y [Políticas de punto de conexión de VPC](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html).

### Ejemplos de políticas de bucket para aplicar el cifrado en tránsito
<a name="UsingEncryptionInTransit.bucket-policy-example"></a>

Puede utilizar la [clave de condición de S3](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html#amazons3-policy-keys) `s3:TlsVersion` para restringir el acceso a buckets de Amazon S3 en función de la versión de TLS que utilice el cliente. Para obtener más información, consulte [Ejemplo 6: Necesidad de una versión mínima de TLS](amazon-s3-policy-keys.md#example-object-tls-version).

**Example política de bucket que aplica TLS 1.3 mediante la clave de condición `S3:TlsVersion`**  

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DenyInsecureConnections",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket1",
        "arn:aws:s3:::amzn-s3-demo-bucket1/*"
      ],
      "Condition": {
        "NumericLessThan": {
          "s3:TlsVersion": "1.3"
        }
      }
    }
  ]
}
```

Puede usar la [clave de condición global](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html) `aws:SecureTransport` de la política de bucket de S3 para comprobar si la solicitud se envió a través de HTTPS (TLS). A diferencia del ejemplo anterior, esta condición no comprueba la existencia de una versión de TLS específica. Para obtener más información, consulte [Restringir el acceso solo a las solicitudes HTTPS](example-bucket-policies.md#example-bucket-policies-use-case-HTTP-HTTPS-1).

**Example política de bucket que aplica HTTPS mediante la clave de condición global `aws:SecureTransport`**  

```
{
    "Version":"2012-10-17",		 	 	 		 	 	 
    "Statement": [
     {
        "Sid": "RestrictToTLSRequestsOnly",		 	 	 
        "Action": "s3:*",
        "Effect": "Deny",
        "Resource": [
            "arn:aws:s3:::amzn-s3-demo-bucket1",
            "arn:aws:s3:::amzn-s3-demo-bucket1/*"
        ],
        "Condition": {
            "Bool": {
                "aws:SecureTransport": "false"
            }
        },
        "Principal": "*"
    }
  ]
}
```

**Ejemplo de política basada en ambas claves y en más ejemplos**  
Puede usar los dos tipos de claves de condición de los ejemplos anteriores en una política. Para obtener más información y enfoques de cumplimiento adicionales, consulte el artículo del blog sobre almacenamiento de AWS [Aplicación del cifrado en tránsito con TLS 1.2 o superior con Amazon S3](https://aws.amazon.com/blogs/storage/enforcing-encryption-in-transit-with-tls1-2-or-higher-with-amazon-s3/).

# Uso de TLS poscuántico híbrido con Amazon S3
<a name="UsingEncryptionInTransit.PQ-TLS"></a>

Amazon S3 admite una opción de intercambio de claves poscuánticas híbrido para el protocolo de cifrado de red TLS. Puede utilizar esta opción de TLS cuando realice solicitudes a los puntos de conexión de Amazon S3 mediante TLS 1.3. Los conjuntos de cifrado clásicos que S3 admite para las sesiones de TLS convierten en inviables los ataques de fuerza bruta en los mecanismos de intercambio de claves con la tecnología actual. Sin embargo, si una computación cuántica relevante criptográficamente tiene efectos prácticos en el futuro, los conjuntos de cifrado clásicos utilizados en los mecanismos de intercambio de claves TLS serán susceptibles a estos ataques. En la actualidad, el sector está alineado con el intercambio de claves poscuánticas híbrido que combina elementos clásicos y poscuánticos para garantizar que la conexión TLS sea al menos tan sólida como con los conjuntos de cifrado clásicos. Amazon S3 es compatible con PQ-TLS híbrido, en cumplimiento de la especificación de IANA estándar del sector, en la actualidad

Si va a desarrollar aplicaciones que dependen de la confidencialidad a largo plazo de los datos transmitidos a través de una conexión TLS, debe considerar un plan para migrar a la criptografía poscuántica antes de que los equipos cuánticos a gran escala estén disponibles para su uso. Como parte del modelo de responsabilidad compartida, S3 permite la criptografía de seguridad cuántica en nuestros puntos de conexión de servicio. Como los navegadores y las aplicaciones utilizan PQ-TLS, S3 elegirá la configuración más sólida posible para proteger los datos en tránsito.

**Tipos de puntos de conexión compatibles y Regiones de AWS**

El TLS poscuántico para Amazon S3 está disponible en todas las Regiones de AWS. Para obtener la lista de puntos de conexión de S3 en cada Región de AWS, consulte [Puntos de conexión y cuotas de Amazon Simple Storage Service](https://docs.aws.amazon.com/general/latest/gr/s3.html) en la *Referencia general de Amazon Web Services*.

**nota**  
TLS poscuántico híbrido se admite para todos los puntos de conexión de S3, excepto para AWS PrivateLink para Amazon S3, los puntos de acceso multirregionales y S3 Vectors.

## Uso de TLS poscuántico híbrido con Amazon S3
<a name="pqtls-details"></a>

Debe configurar el cliente que realiza las solicitudes a Amazon S3 para que admita el TLS poscuántico híbrido. Cuando configure el entorno de prueba del cliente HTTP o entornos de producción, tenga en cuenta la siguiente información:

**Cifrado en tránsito**

El TLS poscuántico híbrido solo se utiliza para el cifrado en tránsito. Esto protege los datos mientras viajan desde el cliente hasta el punto de conexión de S3. Este nuevo soporte, combinado con el cifrado del servidor de Amazon S3, que utiliza algoritmos AES-256 de forma predeterminada, ofrece a los clientes un cifrado con resistencia cuántica en tránsito y en reposo. Para obtener más información sobre el cifrado del servidor en Amazon S3, consulte [Protección de datos con cifrado del servidor](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).

**Clientes compatibles**

El uso de el TLS poscuántico híbrido requiere el uso de un cliente que admita esta funcionalidad. AWS Los SDK y las herramientas tienen capacidades y configuraciones criptográficas que difieren según los lenguajes y los tiempos de ejecución. Para obtener más información sobre la criptografía poscuántica para herramientas específicas, consulte [Habilitación de TLS poscuántica híbrida](https://docs.aws.amazon.com/payment-cryptography/latest/userguide/pqtls-details.html).

**nota**  
Los detalles del intercambio de claves PQ-TLS para las solicitudes a Amazon S3 no están disponibles en los eventos de AWS CloudTrail ni en los registros de acceso al servidor de S3.

## Obtenga más información sobre el cifrado TLS poscuántico
<a name="pqtls-see-also"></a>

Para obtener más información acerca del uso de TLS poscuántico híbrido, consulte los siguientes recursos.
+ Para obtener información sobre la criptografía poscuántica en AWS, incluidos enlaces a publicaciones de blogs y artículos de investigación, consulte [Criptografía poscuántica para AWS](https://aws.amazon.com/security/post-quantum-cryptography/).
+ Para obtener información acerca de s2n-tls, consulte [Presentación de s2n-tls, una nueva implementación de TLS de código abierto](https://aws.amazon.com/blogs/security/introducing-s2n-a-new-open-source-tls-implementation/) y [Uso de s2n-tls](https://github.com/aws/s2n-tls/tree/main/docs/usage-guide).
+ Para obtener información sobre el cliente HTTP de AWS de tiempo de ejecución común, consulte [Configuración del cliente HTTP de AWS basado en CRT](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/http-configuration-crt.html) en la *Guía para AWS SDK for Java 2.x desarrolladores*.
+ Para obtener información sobre el proyecto de criptografía postcuántica del Instituto Nacional de Estándares y Tecnología (NIST), consulte [Post-Quantum Cryptography](https://csrc.nist.gov/Projects/Post-Quantum-Cryptography).
+ Para obtener información sobre la estandarización de la criptografía poscuántica de NIST, consulte [Estandarización de la criptografía poscuántica de NIST](https://csrc.nist.gov/Projects/post-quantum-cryptography/post-quantum-cryptography-standardization).

# Configuración del cifrado TLS poscuántico híbrido para el cliente
<a name="pqtls-how-to"></a>

Para usar PQ-TLS con Amazon S3, debe configurar el cliente para que admita algoritmos de intercambio de claves poscuánticas. Asegúrese también de que el cliente apoye el enfoque híbrido, que combina la criptografía tradicional de curva elíptica con algoritmos poscuánticos como ML-KEM (Module-Lattice-Based Key Encapsulation Mechanism).

La configuración específica depende de la biblioteca del cliente y del lenguaje de programación. Para obtener más información, consulte [Habilitación del TLS poscuántico híbrido](https://docs.aws.amazon.com/payment-cryptography/latest/userguide/pqtls-details.html).

## Ejemplo de configuración de cliente: AWS SDK para Java 2
<a name="UsingEncryptionInTransit.PQ-TLS.configuration.java2-sdk"></a>

En este procedimiento, agregue una dependencia de Maven para el cliente HTTP en tiempo de ejecución común de AWS. A continuación, configure un cliente HTTP que prefiera el TLS postcuántico. A continuación, cree un cliente de Amazon S3 que utilice el cliente HTTP.

**nota**  
El cliente HTTP de en tiempo de ejecución común de AWS, que estaba disponible como versión preliminar, pasó a estar disponible en febrero de 2023. En esa versión, la clase `tlsCipherPreference` y el parámetro del método `tlsCipherPreference()` se sustituyen por el parámetro del método `postQuantumTlsEnabled()`. Si utilizó este ejemplo durante la vista previa, debe actualizar el código.

1. Agregue el cliente del tiempo de ejecución común de AWS a sus dependencias de Maven. Le recomendamos que utilice la última versión disponible. 

   Por ejemplo, esta declaración agrega la versión `2.30.22` del cliente del tiempo de ejecución común de AWS a sus dependencias de Maven. 

   ```
   <dependency>
       <groupId>software.amazon.awssdk</groupId>
       <artifactId>aws-crt-client</artifactId>
       <version>2.30.22</version>
   </dependency>
   ```

1. Para habilitar los conjuntos de cifrado híbrido postcuántico, agregue AWS SDK for Java 2.x a su proyecto e inícielo. Luego habilite los conjuntos de cifrado postcuántico híbrido en su cliente HTTP como se muestra en el siguiente ejemplo.

   Este código usa el parámetro del método `postQuantumTlsEnabled()` para configurar un [cliente HTTP de AWS en tiempo de ejecución común](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/http-configuration-crt.html) que prefiera el conjunto de cifrado poscuántico híbrido recomendado, ECDH con ML-KEM. A continuación, utiliza el cliente HTTP configurado para crear una instancia del cliente de Amazon S3 asincrónico, [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3AsyncClient.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3AsyncClient.html). Cuando se complete este código, todas las solicitudes de la [API de Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/API/) de la instancia `S3AsyncClient` utilizarán un TLS poscuántico híbrido.
**importante**  
A partir de v2.35.11, las personas que llamen ya no tendrán que configurar `.postQuantumTlsEnabled(true)` para habilitar el TLS poscuántico híbrido para el cliente. Todas las versiones posteriores a v2.35.11 habilitan el TLS poscuántico de forma predeterminada.

   ```
   // Configure HTTP client
   SdkAsyncHttpClient awsCrtHttpClient = AwsCrtAsyncHttpClient.builder()
             .postQuantumTlsEnabled(true)
             .build();
   
   // Create the Amazon S3 async client
   S3AsyncClient s3Async = S3AsyncClient.builder()
            .httpClient(awsCrtHttpClient)
            .build();
   ```

1. Pruebe las llamadas de Amazon S3 con TLS poscuántico híbrido.

   Cuando llama a operaciones de la API de Amazon S3 en el cliente de Amazon S3 configurado, las llamadas se transmiten al punto de conexión de Amazon S3 mediante TLS poscuántico híbrido. Para probar la configuración, ejecute una llamada a la API de Amazon S3, como `[ListBuckets](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBuckets.html)`.

   ```
   ListBucketsResponse reponse = s3Async.listBuckets();
   ```

### Prueba de su configuración de TLS postcuántico híbrido
<a name="pqtls-testing"></a>

Considere la posibilidad de ejecutar las siguientes pruebas con conjuntos de cifrado híbridos en las aplicaciones que llaman a Amazon S3.
+ Ejecute pruebas de carga y pruebas de rendimiento. Los conjuntos de cifrado híbridos funcionan de manera diferente que los algoritmos tradicionales de intercambio de claves. Es posible que tenga que ajustar los tiempos de espera de conexión para permitir tiempos de negociación más prolongados. Si la ejecución se realiza dentro de una función AWS Lambda, amplíe la configuración del tiempo de espera de ejecución.
+ Intente conectarse desde diferentes ubicaciones. En función de la ruta de red que tome la solicitud, es posible que descubra que hosts intermedios, proxies o firewalls con inspección profunda de paquetes (DPI) bloquean la solicitud. Esto podría dar lugar a que se utilicen los nuevos conjuntos de cifrado en la parte [ClientHello](https://tools.ietf.org/html/rfc5246#section-7.4.1.2) del protocolo TLS o a mensajes de intercambio de claves más grandes. Si le resulta difícil resolver estos problemas, trabaje con su equipo de seguridad o con los administradores de TI para actualizar la configuración pertinente y desbloquear los nuevos conjuntos de cifrado TLS. 