

# 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) 