

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