

# Cifrado en reposo en DynamoDB
<a name="EncryptionAtRest"></a>

Todos los datos de usuario almacenados en Amazon DynamoDB están completamente cifrados en reposo. El cifrado en reposo de DynamoDB proporciona mayor seguridad, porque cifra todos sus datos en reposo mediante las claves de cifrado almacenadas en [AWS Key Management Service (AWS KMS)](https://aws.amazon.com/kms/). Esta funcionalidad ayuda a reducir la carga y la complejidad operativas que conlleva la protección de información confidencial. Con el cifrado en reposo, puede crear aplicaciones sensibles a la seguridad que necesitan cumplimiento estricto de cifrado y requisitos normativos.

El cifrado en reposo de DynamoDB proporciona una capa adicional de seguridad de los datos, porque los protege en una tabla cifrada que incluye su clave principal, los índices secundarios locales y globales, las transmisiones, las tablas globales, las copias de seguridad y los clústeres de DynamoDB Accelerator (DAX) siempre que los datos se almacenen en un soporte duradero. Las políticas de la organización, las normativas industriales o gubernamentales y los requisitos de conformidad suelen requerir el uso del cifrado en reposo para aumentar la seguridad de los datos de las aplicaciones. Para obtener más información sobre el cifrado de aplicaciones de bases de datos, consulte [AWS Database Encryption SDK](https://docs.aws.amazon.com/database-encryption-sdk/latest/devguide/what-is-database-encryption-sdk.html).

El cifrado en reposo se integra con AWS KMS para administrar las claves de cifrado que se utilizan para cifrar las tablas. Para obtener más información sobre los tipos y estados de las claves, consulte los [conceptos de AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html#key-state-cmk-type) en la *Guía para desarrolladores de AWS Key Management Service*.

Al crear una tabla nueva, puede elegir uno de los siguientes tipos de AWS KMS key para cifrarla. Puede cambiar entre estos tipos de claves en cualquier momento.
+ **Clave propiedad de AWS –** tipo de cifrado predeterminado. La clave es propiedad de DynamoDB (sin cargo adicional).
+ **Clave administrada de AWS:** la clave se almacena en la cuenta y la administra AWS KMS (se aplican los cargos de AWS KMS).
+ **Customer managed key** (Clave administrada por el cliente): la clave se almacena en la cuenta y usted la crea, posee y administra. Usted controla plenamente la clave KMS (se aplican los cargos de AWS KMS).

Para obtener más información sobre estos tipos de claves, consulte [ Customer keys and AWS keys](/kms/latest/developerguide/concepts.html#key-mgmt).

**nota**  
Al crear un nuevo clúster DAX con el cifrado en reposo habilitado, se utilizará una Clave administrada de AWS para cifrar datos en reposo en el clúster.
Si la tabla tiene una clave de clasificación, algunas de las claves de ordenación que marcan los límites del rango se almacenan en texto no cifrado en los metadatos de la tabla.

Cuando accede a una tabla cifrada, DynamoDB descifra los datos de la tabla de forma transparente. No es necesario que cambie sus aplicaciones o código para utilizar o administrar tablas cifradas. DynamoDB continúa proporcionando la misma latencia en milisegundos de un solo dígito que cabe esperar de nosotros y todas las consultas de DynamoDB funcionan sin inconvenientes con los datos cifrados.

Puede especificar una clave de cifrado al crear una tabla o cambiar las claves de cifrado en una tabla existente con la Consola de administración de AWS, la AWS Command Line Interface (AWS CLI) o la API de Amazon DynamoDB. Para aprender a hacerlo, consulte [Administración de tablas de cifrado en DynamoDB](encryption.tutorial.md).

El cifrado en reposo mediante la Clave propiedad de AWS se ofrece sin cargo adicional. Sin embargo, se aplicarán cargos de AWS KMS por una Clave administrada de AWS y por una clave administrada por el cliente. Para obtener más información acerca de los precios, consulte [Precios de AWS KMS](https://aws.amazon.com/kms/pricing).

El cifrado en reposo de DynamoDB está disponible en todas las regiones de AWSRegions, incluidas las regiones AWS China (Pekín) y AWS China (Ningxia), así como la región AWS GovCloud (EE. UU.). Para obtener más información, consulte [Cifrado de DynamoDB en reposo: funcionamiento](encryption.howitworks.md) y [Notas de uso del cifrado en reposo de DynamoDB](encryption.usagenotes.md).

# Cifrado de DynamoDB en reposo: funcionamiento
<a name="encryption.howitworks"></a>

El cifrado en reposo de Amazon DynamoDB cifra sus datos mediante cifrado estándar avanzado de 256 bits (AES-256), que ayuda a proteger sus datos del acceso no autorizado al almacenamiento subyacente.

El cifrado en reposo se integra con AWS Key Management Service (AWS KMS) para administrar las claves de cifrado que se utilizan para cifrar las tablas.

**nota**  
En mayo de 2022, AWS KMS ha cambiado la programación de rotación para Claves administradas por AWS de cada tres años (aproximadamente 1095 días) hasta cada año (aproximadamente 365 días).  
Las nuevas Claves administradas por AWS rotan automáticamente un año después de su creación y, aproximadamente, cada año a partir de entonces.  
Las Claves administradas por AWS existentes rotan automáticamente un año después de su rotación más reciente y cada año a partir de entonces.

## Claves propiedad de AWS
<a name="ddb-owned"></a>

 Las Claves propiedad de AWS no están almacenadas en su cuenta de AWS. Forman parte de una recopilación de claves KMS que AWS posee y administra para su uso en múltiples cuentas de AWS. Los servicios de AWS pueden usar las Claves propiedad de AWS para proteger los datos. Las Claves propiedad de AWS que usa DynamoDB se rotan cada año (aproximadamente 365 días). 

No puede ver, administrar o usar las Claves propiedad de AWS, ni auditar su uso. Sin embargo, no es necesario que realice ninguna acción ni que cambie programas para proteger las claves que cifran sus datos.

No se le cobra ninguna tarifa mensual ni tarifa de uso de las Claves propiedad de AWS y no se incluyen en los límites de AWS KMS de su cuenta.

## Claves administradas por AWS
<a name="managed-key-service-default-kms"></a>

Las Claves administradas por AWS son claves KMS de la cuenta que se crean, administran y utilizan en su nombre por un servicio de AWS integrado con AWS KMS. Puede ver las Claves administradas por AWS en su cuenta, ver sus políticas de claves y auditar su uso en los registros de AWS CloudTrail. Sin embargo, no puede administrar estas claves KMS ni modificar sus permisos.

El cifrado en reposo se integra automáticamente con AWS KMS para administrar las Claves administradas por AWS para DynamoDB (`aws/dynamodb`) que se utilizan para cifrar las tablas. Si no existe una Clave administrada de AWS al crear la tabla de DynamoDB cifrada, AWS KMS crea automáticamente una nueva clave. Esta clave se utilizará con las tablas cifradas que se creen en el futuro. AWS KMS combina hardware y software seguros de alta disponibilidad para ofrecer un sistema de administración de claves adaptado a la nube.

Para obtener más información acerca de la administración de permisos de las Clave administrada de AWS, consulte [Autorización del uso de Clave administrada de AWS](https://docs.aws.amazon.com/kms/latest/developerguide/services-dynamodb.html#dynamodb-authz) en la *Guía para desarrolladores de AWS Key Management Service*.

## Claves administradas por el cliente
<a name="managed-key-customer-managed"></a>

Las claves administradas por el cliente son claves KMS en su cuenta de AWS, que usted ha creado, posee y administra. Usted tiene un control total sobre estas claves KMS, incluyendo el establecimiento y mantenimiento de sus políticas de claves, políticas de IAM y concesiones, la habilitación y desactivación de las mismas, la rotación de su material criptográfico, la adición de etiquetas, la creación de alias que hacen referencia a ellas y la programación para su eliminación. Para obtener más información sobre la administración de permisos de una clave administrada por el cliente, consulte [Claves administradas por el cliente](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk).

Cuando se especifica una clave administrada por el cliente como clave de cifrado a nivel de tabla, la tabla de DynamoDB, los índices secundarios locales y globales y las transmisiones se cifran con la misma clave administrada por el cliente. Las copias de seguridad en diferido se cifran con la clave de cifrado de nivel de tabla que se especifica en el momento en que se crea la copia de seguridad. La actualización de la clave de cifrado de nivel de tabla no cambia la clave de cifrado asociada a las copias de seguridad en diferido existentes.

Configurar el estado de la clave administrada por el cliente como desactivado o programarlo para su eliminación impide que todos los usuarios y el servicio DynamoDB puedan cifrar o descifrar datos y realizar operaciones de lectura y escritura en la tabla. DynamoDB debe tener acceso a la clave de cifrado para asegurarse de que pueda seguir accediendo a la tabla y evitar la pérdida de datos.

Si desactiva la clave administrada por el cliente o la programa para que se elimine, el estado de la tabla se convierte en **Inaccesible**. Para asegurarse de que puede continuar trabajando con la tabla, debe darle a DynamoDB acceso a la clave de cifrado especificada en un plazo de siete días. Tan pronto como el servicio detecte que la clave de cifrado es inaccesible, DynamoDB le envía una notificación por correo electrónico para avisarle.

**nota**  
Si su clave administrada por el cliente permanece inaccesible para el servicio de DynamoDB durante más de siete días, la tabla se archiva y ya no podrá acceder a ella. DynamoDB crea una copia de seguridad en diferido de la tabla y se le emite una factura por ella. Puede utilizar esta copia de seguridad en diferido para restaurar los datos en una nueva tabla. Para iniciar la restauración, la última clave administrada por el cliente en la tabla debe estar habilitada y DynamoDB debe tener acceso a ella.
Si la clave administrada por el cliente que se utilizó para cifrar una réplica de tabla global es inaccesible, DynamoDB quitará esta réplica del grupo de replicación. La réplica no se eliminará y la replicación se detendrá desde y hacia esta región, 20 horas después de detectar que la clave administrada por el cliente es inaccesible.

Para obtener más información, consulte [Habilitar claves](/kms/latest/developerguide/enabling-keys.html) y [Eliminar claves](/kms/latest/developerguide/deleting-keys.html). 

## Notas sobre el uso de las Claves administradas por AWS
<a name="managed-key-notes"></a>

Amazon DynamoDB no puede leer los datos de la tabla a menos que tenga acceso a la clave KMS almacenada en su cuenta de AWS KMS. DynamoDB utiliza el cifrado de envoltura y la jerarquía de claves para cifrar los datos. Sus clave de cifrado AWS KMS se utiliza para cifrar la clave raíz de esta jerarquía de claves. Para obtener más información, 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*.

 DynamoDB no llama a AWS KMS por cada operación de DynamoDB. La clave se actualiza una vez cada 5 minutos por intermediario con tráfico activo.

Asegúrese de haber configurado el SDK para que reutilice las conexiones. De lo contrario, experimentará latencias de DynamoDB al tener que restablecer nuevas entradas de caché de AWS KMS por cada operación de DynamoDB. Además, es posible que tenga que enfrentarse a costes de AWS KMS y CloudTrail más altos. Por ejemplo, para hacer esto usando el SDK Node.js, puede crear un nuevo agente HTTPS con `keepAlive` activado. Para obtener más información, consulte [Configuración de keepAlive en Node.js](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/node-reusing-connections.html) en la *Guía para desarrolladores de AWS SDK para JavaScript*.

# Notas de uso del cifrado en reposo de DynamoDB
<a name="encryption.usagenotes"></a>

Es importante tener en cuenta lo siguiente cuando use el cifrado en reposo en Amazon DynamoDB.

## Todos los datos de la tabla están cifrados
<a name="encryption.usagenotes.tabledata"></a>

El cifrado en reposo en el lado del servidor está habilitado para los datos de todas las tablas de DynamoDB y no se puede desactivar. No puede cifrar sólo un subconjunto de elementos de una tabla.

El cifrado en reposo solo cifra los datos mientras están estáticos (en reposo) en un medio de almacenamiento persistente. Si le preocupa la seguridad de los datos cuando están en tránsito o en uso, puede ser conveniente adoptar medidas adicionales:
+ Datos en tránsito: todos los datos de DynamoDB se cifran en tránsito. De forma predeterminada, las comunicaciones de entrada y salida de DynamoDB usan el protocolo HTTPS, que protege el tráfico de la red mediante el uso del cifrado de Capa de conexión segura (SSL)/Transport Layer Security (TLS).
+ Datos en uso: proteja lo datos antes de enviarlos a DynamoDB mediante el cifrado del lado del cliente. Para obtener más información, consulte [Cifrado del lado del cliente y del lado del servidor](https://docs.aws.amazon.com/dynamodb-encryption-client/latest/devguide/client-server-side.html) en la *Guía para desarrolladores del Cliente de encriptación de Amazon DynamoDB*.

Puede usar transmisiones con tablas cifradas. Las transmisiones de DynamoDB siempre se cifran con una clave de cifrado de nivel de tabla. Para obtener más información, consulte [Captura de datos de cambios para DynamoDB Streams](Streams.md).

Las copias de seguridad de DynamoDB se cifran y el cifrado también se habilita para la tabla que se restaura a partir de la copia de seguridad. Puede usar la Clave propiedad de AWS, la Clave administrada de AWS o la clave administrada por el cliente para cifrar los datos de la copia de seguridad. Para obtener más información, consulte [Copia de seguridad y restauración para DynamoDB](Backup-and-Restore.md).

Los índices secundarios locales y globales se cifran usando la misma clave que la tabla base.

## Tipos de cifrado
<a name="encryption.usagenotes.encryptiontypes"></a>

**nota**  
Las claves administradas por el cliente no se admiten en la versión de 2017 de la tabla global. Si desea utilizar una clave administrada por el cliente en una tabla global de DynamoDB, debe actualizar la tabla a la versión de 2019 de la tabla global y, después, habilitarla.

En la Consola de administración de AWS, el tipo de cifrado es `KMS` cuando se usa la Clave administrada de AWS o la clave administrada por el cliente para cifrar los datos. El tipo de cifrado es `DEFAULT` cuando se usa la Clave propiedad de AWS. En la API de Amazon DynamoDB, el tipo de cifrado es `KMS` cuando se usa la Clave administrada de AWS o la clave administrada por el cliente. En caso de que no haya un tipo de cifrado, sus datos se cifran utilizando el formato de Clave propiedad de AWS. Puede alternar entre una Clave propiedad de AWS, una Clave administrada de AWS y una clave administrada por el cliente en cualquier momento. Puede utilizar la consola, la AWS Command Line Interface (AWS CLI) o la API de Amazon DynamoDB para alternar entre claves de cifrado.

Tenga en cuenta las siguientes limitaciones al utilizar claves administradas por el cliente:
+ No puede utilizar una clave administrada por el cliente con los clústeres de DynamoDB Accelerator (DAX). Para obtener más información, consulte [Cifrado en reposo de DAX](DAXEncryptionAtRest.md).
+ Puede utilizar una clave administrada por el cliente para cifrar tablas que utilizan transacciones. Sin embargo, para garantizar la durabilidad de la propagación de las transacciones, el servicio almacena temporalmente una copia de la solicitud de transacción y se cifra mediante una Clave propiedad de AWS. Los datos confirmados en sus tablas e los índices secundarios están siempre cifrados en reposo utilizando la clave administrada por el cliente.
+ Una clave administrada por el cliente se puede usar para cifrar tablas que utilizan Contributor Insights. Sin embargo, los datos que se transmiten a Amazon CloudWatch están cifrados con una Clave propiedad de AWS.
+ Cuando realice la transición a una nueva clave administrada por el cliente, asegúrese de mantener la clave original activada hasta que se complete el proceso. AWS seguirá necesitando la clave original para descifrar los datos antes de cifrarlos con la nueva clave. El proceso se completará cuando el estado de SSEDescription de la tabla sea ENABLED (HABILITADO) y se muestre el KMSMasterKeyArn de la nueva clave administrada por el cliente. A partir de este momento, la clave original se puede desactivar o programar para su eliminación.
+ Una vez que se muestra la nueva clave administrada por el cliente, la tabla y cualquier nueva copia de seguridad bajo demanda se cifran con la nueva clave.
+ Cualquier copia de seguridad bajo demanda existente permanece cifrada con la clave administrada por el cliente que se utilizó cuando se crearon esas copias de seguridad. Necesitarás esa misma clave para restaurar esas copias de seguridad. Puede identificar la clave del período en que se creó cada copia de seguridad mediante la API DescribeBackup para ver la SSEDescription de esa copia de seguridad.
+ Si desactiva su clave administrada por el cliente o la programa para que se elimine, todos los datos de DynamoDB Streams quedarán sujetos a una durabilidad de 24 horas. Todos los datos de actividad que no se hayan recuperado se podrán recortar cuando alcancen una antigüedad superior a 24 horas.
+ Si desactiva la clave administrada por el cliente o la programa para su eliminación, las eliminaciones de período de vida (TTL) continuarán durante 30 minutos. Estas eliminaciones de TTL seguirán emitiéndose a DynamoDB Streams y estarán sujetas al intervalo estándar de recorte/retención.

  Para obtener más información, consulte [Habilitar claves](/kms/latest/developerguide/enabling-keys.html) y [Eliminar claves](/kms/latest/developerguide/deleting-keys.html). 

## Uso de claves KMS y claves de datos
<a name="dynamodb-kms"></a>

La característica de cifrado en reposo de DynamoDB utiliza una AWS KMS key y una jerarquía de claves de datos para proteger los datos de su tabla. DynamoDB utiliza la misma jerarquía de claves para proteger las secuencias de DynamoDB, las tablas globales y las copias de seguridad cuando se escriben en soportes duraderos.

Le recomendamos que planifique la estrategia de cifrado antes de implementar la tabla en DynamoDB. Si almacena datos confidenciales en DynamoDB, considere incluir el cifrado del cliente en el plan. De esta forma, puede cifrar los datos lo más cerca posible del origen y garantizar la protección durante todo el ciclo de vida. Para obtener más información, consulte la documentación de [cliente de cifrado de DynamoDB](https://docs.aws.amazon.com/dynamodb-encryption-client/latest/devguide/what-is-ddb-encrypt.html).

**AWS KMS key**  
El cifrado en reposo protege las tablas de DynamoDB con una AWS KMS key. De forma predeterminada, DynamoDB utiliza una [Clave propiedad de AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk), una clave de cifrado de varios inquilinos que se crea y administra en una cuenta de servicio de DynamoDB. Pero puede cifrar las tablas de DynamoDB bajo una [clave administrada por el cliente](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) para DynamoDB (`aws/dynamodb`) en la Cuenta de AWS. Puede seleccionar una clave KMS diferente para cada tabla. La clave KMS que seleccione para una tabla también se utiliza para cifrar sus índices secundarios locales y globales, las secuencias y las copias de seguridad.  
Al crear o actualizar la tabla, seleccione la clave KMS para una tabla. Puede cambiar la clave KMS de una tabla en cualquier momento, ya sea en la consola de DynamoDB o utilizando la operación [UpdateTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateTable.html). El proceso de cambio de teclas es perfecto y no precisa tiempo de inactividad ni degradación del servicio.  
DynamoDB solo admite [claves KMS simétricas](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#symmetric-cmks). No puede utilizar una [clave KMS asimétrica](https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html#asymmetric-cmks) para cifrar las tablas de DynamoDB. 
Utilice una clave administrada por el cliente para obtener las siguientes características:  
+ Puede crear y administrar la clave KMS, incluida la configuración de [políticas de claves](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html),[políticas de IAM](https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies.html) y [concesiones](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html) para controlar el acceso a la clave KMS. Puede [habilitar y deshabilitar](https://docs.aws.amazon.com/kms/latest/developerguide/enabling-keys.html) la clave KMS, habilitar y deshabilitar la [rotación de claves automática](https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html) y [eliminar la clave KMS](https://docs.aws.amazon.com/kms/latest/developerguide/deleting-keys.html) cuando ya no esté en uso.
+ Puede utilizar una clave administrada por el cliente con [material de claves importado](https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html) o una clave administrada por el cliente en un [almacén de claves personalizado](https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html) que tenga y administre. 
+ Puede auditar el cifrado y descifrado de la tabla de DynamoDB examinando las llamadas de la API de DynamoDB a AWS KMS en los [registros de AWS CloudTrail](https://docs.aws.amazon.com/kms/latest/developerguide/services-dynamodb.html#dynamodb-cmk-trail).
Utilice la Clave administrada de AWS si necesita alguna de las siguientes características:  
+ Puede [ver la clave KMS](https://docs.aws.amazon.com/kms/latest/developerguide/viewing-keys.html) y [ver su política de claves](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-viewing.html). (La política de claves no se puede modificar).
+ Puede auditar el cifrado y descifrado de la tabla de DynamoDB examinando las llamadas de la API de DynamoDB a AWS KMS en los [registros de AWS CloudTrail](https://docs.aws.amazon.com/kms/latest/developerguide/services-dynamodb.html#dynamodb-cmk-trail).
Sin embargo, la Clave propiedad de AWS es gratuita y su uso no se contabiliza en las [cuotas de solicitudes o de recursos de AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html). Las claves administradas por el cliente y las Claves administradas por AWS [generan cargos](https://aws.amazon.com/kms/pricing/) por cada llamada a la API y se aplican cuotas de AWS KMS a estas claves KMS.

**Claves de tabla**  
DynamoDB utiliza la clave KMS de la tabla para [generar](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) y cifrar una [clave de datos](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys) única para la tabla, denominada *clave de tabla*. La clave de tabla se mantiene durante toda la vida útil de la tabla de cifrado.   
La clave de la tabla se utiliza como clave de cifrado de claves. DynamoDB utiliza esta clave de tabla para proteger las claves de cifrado de datos que se utilizan para cifrar los datos de la tabla. DynamoDB genera una clave de cifrado de datos única para cada estructura subyacente en una tabla, pero varios elementos de la tabla pueden protegerse mediante la misma clave de cifrado de datos.  

![\[Cifrado de una tabla de DynamoDB con cifrado en reposo\]](http://docs.aws.amazon.com/es_es/amazondynamodb/latest/developerguide/images/service-ddb-encrypt.png)

La primera vez que obtiene acceso a una tabla cifrada, DynamoDB envía una solicitud a AWS KMS para utilizar la clave KMS para descifrar la clave de tabla. A continuación, utiliza la clave de tabla de texto sin cifrar para descifrar las claves de cifrado de datos y utiliza las claves de cifrado de datos de texto sin cifrar para descifrar los datos de la tabla.  
DynamoDB almacena y utiliza la clave de la tabla y las claves de cifrado de datos fuera de AWS KMS. Protege todas las claves con cifrado [Advanced Encryption Standard](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) (AES) y claves de cifrado de 256 bits. A continuación, almacena las claves cifradas con los datos cifrados para que estén disponibles para descifrar los datos de la tabla bajo demanda.  
Si cambia la clave de su tabla, DynamoDB genera una nueva clave de tabla. A continuación, utiliza la nueva clave de tabla para volver a cifrar las claves de cifrado de los datos.

**Almacenamiento en caché de las claves de tabla**  
Para evitar llamar a AWS KMS para cada operación de DynamoDB, DynamoDB almacena en la memoria caché las claves de tabla de texto sin cifrar para cada intermediario. Si DynamoDB recibe una solicitud de la clave de tabla almacenada en caché tras cinco minutos de inactividad, envía una nueva solicitud a AWS KMS para descifrar la clave de tabla. Esta llamada capturará los cambios realizados en las políticas de acceso de la clave KMS en AWS KMS o AWS Identity and Access Management (IAM) desde la última solicitud para descifrar la clave de tabla.

## Autorizar el uso de su clave KMS
<a name="dynamodb-kms-authz"></a>

Si utiliza una [clave administrada por el cliente](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) o la [Clave administrada de AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) en su cuenta para proteger su tabla de DynamoDB, las políticas en esa clave KMS deben conceder permiso a DynamoDB para utilizarla en su nombre. El contexto de autorización de la Clave administrada de AWS para DynamoDB incluye su política de claves y concede a ese delegado los permisos para utilizarla. 

Tiene control total sobre las políticas y concesiones de una clave administrada por el cliente debido a que la Clave administrada de AWS está en su cuenta, puede ver sus políticas y concesiones. Sin embargo, como está administrada por AWS, no puede cambiar las políticas.

DynamoDB no necesita autorización adicional para utilizar la [Clave propiedad de AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys) predeterminada para proteger las tablas de DynamoDB de su cuenta de Cuenta de AWS.

**Topics**
+ [Política de claves para una Clave administrada de AWS](#dynamodb-policies)
+ [Política de claves para una clave administrada por el cliente](#dynamodb-customer-cmk-policy)
+ [Usar concesiones para autorizar a DynamoDB](#dynamodb-grants)

### Política de claves para una Clave administrada de AWS
<a name="dynamodb-policies"></a>

Cuando DynamoDB utiliza la [Clave administrada de AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) para DynamoDB (`aws/dynamodb`) en operaciones criptográficas, lo hace en nombre del usuario que obtiene acceso al [recurso de DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/access-control-overview.html). La política de claves de Clave administrada de AWS concede permiso a todos los usuarios de la cuenta para utilizar la Clave administrada de AWS para las operaciones especificadas. Sin embargo, el permiso solo se concede cuando DynamoDB realiza la solicitud en nombre del usuario. La [condición ViaService](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-via-service) de la política de claves no permite que ningún usuario pueda utilizar la Clave administrada de AWS, a menos que la solicitud se origine con el servicio DynamoDB.

Esta política de claves, como las políticas de todas las Claves administradas por AWS, la establece AWS. No puede cambiarla, pero puede verla en cualquier momento. Para obtener más detalles, consulte [Ver una política de clave](https://docs.aws.amazon.com//kms/latest/developerguide/key-policy-viewing.html).

Las declaraciones de política de la política de claves tienen el siguiente efecto:
+ Permite a los usuarios de la cuenta utilizar la Clave administrada de AWS para DynamoDB en operaciones criptográficas solo cuando la solicitud proviene de DynamoDB en su nombre. La política también permite a los usuarios [crear concesiones](https://docs.aws.amazon.com/kms/latest/developerguide/services-dynamodb.html#dynamodb-grants) para la clave KMS.
+ Permite que las identidades de IAM autorizadas en la cuenta vean las propiedades de la Clave administrada de AWS para DynamoDB y para [revocar la concesión](https://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html) que permite a DynamoDB utilizar la clave KMS. DynamoDB usa [concesiones](https://docs.aws.amazon.com/kms/latest/developerguide/services-dynamodb.html#dynamodb-grants) para las operaciones de mantenimiento en curso.
+ Permite a DynamoDB realizar operaciones de solo lectura para buscar la Clave administrada de AWS para DynamoDB en su cuenta.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Id" : "auto-dynamodb-1",
  "Statement" : [ {
    "Sid" : "Allow access through Amazon DynamoDB for all principals in the account that are authorized to use Amazon DynamoDB",
    "Effect" : "Allow",
    "Principal" : {
      "AWS" : "*"
    },
    "Action" : [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:DescribeKey" ],
    "Resource" : "*",
    "Condition" : {
      "StringEquals" : {
        "kms:CallerAccount" : "111122223333",
        "kms:ViaService" : "dynamodb.us-west-2.amazonaws.com"
      }
    }
  }, {
    "Sid" : "Allow direct access to key metadata to the account",
    "Effect" : "Allow",
    "Principal" : {
      "AWS" : "arn:aws:iam::111122223333:root"
    },
    "Action" : [ "kms:Describe*", "kms:Get*", "kms:List*", "kms:RevokeGrant" ],
    "Resource" : "*"
  }, {
    "Sid" : "Allow DynamoDB Service with service principal name dynamodb.amazonaws.com to describe the key directly",
    "Effect" : "Allow",
    "Principal" : {
      "Service" : "dynamodb.amazonaws.com"
    },
    "Action" : [ "kms:Describe*", "kms:Get*", "kms:List*" ],
    "Resource" : "*"
  } ]
}
```

------

### Política de claves para una clave administrada por el cliente
<a name="dynamodb-customer-cmk-policy"></a>

Cuando selecciona una [clave administrada por el cliente](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) para proteger una tabla de DynamoDB, DynamoDB obtiene permiso para utilizar la clave KMS en nombre de la entidad principal que realiza la selección. Esa entidad principal, un usuario o rol, debe tener los permisos en la clave KMS que precisa DynamoDB. Puede proporcionar estos permisos en una [política de claves](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html), una [política de IAM](https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies.html) o una [concesión](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html).

Como mínimo, DynamoDB precisa los siguientes permisos en una clave administrada por el cliente:
+ [kms:Encrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html)
+ [kms:Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)
+ [kms:ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html)\$1 (para kms:ReEncryptFrom y kms:ReEncryptTo)
+ kms:GenerateDataKey\$1 (para [kms:GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) y [kms:GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html))
+ [kms:DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)
+ [kms:CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)

Por ejemplo, la política de claves de ejemplo siguiente proporciona solo los permisos necesarios. La política tiene las siguientes consecuencias:
+ Permite a DynamoDB utilizar la clave KMS en operaciones criptográficas y crear concesiones, pero solo cuando actúa en nombre de las entidades principales de la cuenta que tienen permiso para usar DynamoDB. Si las entidades principales especificadas en la declaración de política no tienen permiso para utilizar DynamoDB, la llamada falla, incluso cuando proviene del servicio de DynamoDB. 
+ La clave de condición [kms:ViaService](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-via-service) concede los permisos solo cuando la solicitud proviene de DynamoDB en nombre de las entidades principales enumeradas en la declaración de política. Estas entidades principales no pueden llamar a estas operaciones directamente. Tenga en cuenta que el valor `kms:ViaService`, `dynamodb.*.amazonaws.com`, tiene un asterisco (\$1) en la posición Región. DynamoDB requiere el permiso para ser independiente de cualquier Región de AWS en particular para que pueda realizar llamadas entre regiones para admitir [tablas globales de DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GlobalTables.html).
+ Proporciona a los administradores de la clave KMS (usuarios que pueden asumir el rol de `db-team`) acceso de solo lectura a la clave KMS y permiso para revocar las concesiones, incluidas las [concesiones que DynamoDB precisa](#dynamodb-grants) para proteger la tabla.

Antes de utilizar una política de claves de ejemplo, sustituya las entidades principales de ejemplo por las entidades principales reales de su cuenta de Cuenta de AWS.

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

****  

```
{
  "Id": "key-policy-dynamodb",
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid" : "Allow access through Amazon DynamoDB for all principals in the account that are authorized to use Amazon DynamoDB",
      "Effect": "Allow",
      "Principal": {"AWS": "arn:aws:iam::111122223333:user/db-lead"},
      "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:DescribeKey",
        "kms:CreateGrant"
      ],
      "Resource": "*",      
      "Condition": { 
         "StringLike": {
           "kms:ViaService" : "dynamodb.*.amazonaws.com"
         }
      }
    },
    {
      "Sid":  "Allow administrators to view the KMS key and revoke grants",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/db-team"
       },
      "Action": [
        "kms:Describe*",
        "kms:Get*",
        "kms:List*",
        "kms:RevokeGrant"
      ],
      "Resource": "*"
    }
  ]
}
```

------

### Usar concesiones para autorizar a DynamoDB
<a name="dynamodb-grants"></a>

Además de las políticas de claves, DynamoDB utiliza concesiones para establecer permisos en una clave administrada por el cliente o la Clave administrada de AWS para DynamoDB (`aws/dynamodb`). Para ver las concesiones que tiene una clave KMS en su cuenta, utilice la operación [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html). DynamoDB no necesita concesiones ni permisos adicionales para utilizar la [Clave propiedad de AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk) para proteger su tabla.

DynamoDB utiliza los permisos de concesión cuando realiza el mantenimiento del sistema en segundo plano y en tareas de protección de datos continuas. También utiliza las concesiones para generar las [claves de la tabla](https://docs.aws.amazon.com/kms/latest/developerguide/services-dynamodb.html#dynamodb-encrypt).

Cada concesión es específica de una tabla. Si la cuenta incluye varias tablas cifradas con la misma clave KMS, habrá una concesión de cada tipo para cada tabla. La concesión está limitada por el [contexto de cifrado de DynamoDB](#dynamodb-encryption-context), que incluye el nombre de la tabla y el ID de la cuenta de Cuenta de AWS e incluye permiso para [retirar la concesión](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html) si ya no se necesita. 

Para crear las concesiones, DynamoDB debe tener permiso para llamar a `CreateGrant` en nombre del usuario que creó la tabla cifrada. Para Claves administradas por AWS, DynamoDB obtiene el permiso `kms:CreateGrant` de la [política de claves](#dynamodb-policies), que permite a los usuarios de la cuenta llamar a [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) en la clave KMS solo cuando DynamoDB realiza la solicitud en nombre de un usuario autorizado. 

La política de claves también puede permitir a la cuenta [revocar la concesión](https://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html) en la clave KMS. No obstante, si revoca la concesión en una tabla cifrada activa, DynamoDB no podrá proteger y mantener la tabla.

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

Un [contexto de cifrado](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) es un conjunto de pares de clave-valor que contienen datos no secretos arbitrarios. Cuando se incluye un contexto de cifrado en una solicitud para cifrar datos, AWS KMS vincula criptográficamente el contexto de cifrado a los datos cifrados. Para descifrar los datos, es necesario pasar el mismo contexto de cifrado. 

DynamoDB utiliza el mismo contexto de cifrado en todas las operaciones criptográficas de AWS KMS. Si utiliza una [clave administrada por el cliente](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) o una [Clave administrada de AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) para proteger la tabla de DynamoDB, puede utilizar el contexto de cifrado para identificar el uso de la clave KMS en los registros de auditoría. También aparece en texto no cifrado en los registros, como [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) y [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html). 

El contexto de cifrado también se puede utilizar como condición para la autorización en políticas y concesiones. DynamoDB utiliza el contexto de cifrado para restringir las [concesiones](#dynamodb-grants) que permiten el acceso a la clave administrada por el cliente o a Clave administrada de AWS en su cuenta y región.

En su solicitudes a AWS KMS, DynamoDB utiliza un contexto de cifrado con dos parejas de clave-valor.

```
"encryptionContextSubset": {
    "aws:dynamodb:tableName": "Books"
    "aws:dynamodb:subscriberId": "111122223333"
}
```
+ **Tabla**: el primer par de clave-valor identifica la tabla que está cifrando DynamoDB. La clave es `aws:dynamodb:tableName`. El valor es el nombre de la tabla.

  ```
  "aws:dynamodb:tableName": "<table-name>"
  ```

  Por ejemplo:

  ```
  "aws:dynamodb:tableName": "Books"
  ```
+ **Cuenta**: el segundo par de clave-valor identifica la cuenta de Cuenta de AWS. La clave es `aws:dynamodb:subscriberId`. El valor es el ID de la cuenta.

  ```
  "aws:dynamodb:subscriberId": "<account-id>"
  ```

  Por ejemplo:

  ```
  "aws:dynamodb:subscriberId": "111122223333"
  ```

## Supervisión de la interacción de DynamoDB con AWS KMS
<a name="dynamodb-cmk-trail"></a>

Si utiliza una [clave administrada por el cliente](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) o una [Clave administrada de AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) para proteger las tablas de DynamoDB, puede utilizar los registros de AWS CloudTrail para realizar un seguimiento de las solicitudes que DynamoDB envía a AWS KMS en su nombre.

Las solicitudes `GenerateDataKey`, `Decrypt` y `CreateGrant` se explican en esta sección. Además, DynamoDB utiliza una operación [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html) para determinar si la clave KMS que ha seleccionado existe en la cuenta y región. También utiliza una operación [RetireGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html) para quitar una concesión cuando se elimina una tabla. 

**GenerateDataKey**  
Al habilitar el cifrado en reposo en una tabla, DynamoDB crea una clave de tabla única. Envía una solicitud *[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)* a AWS KMS que especifica la clave KMS de la tabla.   
El evento que registra la operación `GenerateDataKey` es similar al siguiente evento de ejemplo. El usuario es la cuenta del servicio DynamoDB. Los parámetros incluyen el Nombre de recurso de Amazon (ARN) de la clave KMS, un especificador de clave que requiere una clave de 256 bits y el [contexto de cifrado](#dynamodb-encryption-context) que identifica la tabla y la cuenta de Cuenta de AWS.  

```
{
    "eventVersion": "1.05",
    "userIdentity": {
        "type": "AWSService", 
        "invokedBy": "dynamodb.amazonaws.com" 
    },
    "eventTime": "2018-02-14T00:15:17Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "GenerateDataKey",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "dynamodb.amazonaws.com",
    "userAgent": "dynamodb.amazonaws.com",
    "requestParameters": {
        "encryptionContext": {
            "aws:dynamodb:tableName": "Services",
            "aws:dynamodb:subscriberId": "111122223333"
        }, 
        "keySpec": "AES_256", 
        "keyId": "1234abcd-12ab-34cd-56ef-1234567890ab"
    }, 
    "responseElements": null,
    "requestID": "229386c1-111c-11e8-9e21-c11ed5a52190",
    "eventID": "e3c436e9-ebca-494e-9457-8123a1f5e979",
    "readOnly": true,
    "resources": [
        {
            "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "accountId": "111122223333",
            "type": "AWS::KMS::Key" 
        } 
    ],
    "eventType": "AwsApiCall",
    "recipientAccountId": "111122223333",
    "sharedEventID": "bf915fa6-6ceb-4659-8912-e36b69846aad"
}
```

**Decrypt**  
Cuando accede a una tabla de DynamoDB cifrada, DynamoDB necesita descifrar la clave de la tabla de manera que pueda descifrar las claves que hay debajo en la jerarquía. A continuación, descifra los datos de la tabla. Para descifrar la clave de la tabla. DynamoDB envía una solicitud [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) a AWS KMS que especifica la clave KMS para la tabla.  
El evento que registra la operación `Decrypt` es similar al siguiente evento de ejemplo. El usuario es la entidad principal en su cuenta de Cuenta de AWS que está accediendo a la tabla. Los parámetros incluyen la clave de la tabla cifrada (como blob de texto cifrado) y el [contexto de cifrado](#dynamodb-encryption-context) que identifica la tabla y la cuenta de Cuenta de AWS. AWS KMS deriva el ID de la clave KMS del texto cifrado.   

```
{
    "eventVersion": "1.05",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROAIGDTESTANDEXAMPLE:user01",
        "arn": "arn:aws:sts::111122223333:assumed-role/Admin/user01",
        "accountId": "111122223333",
        "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
        "sessionContext": {
            "attributes": {
                "mfaAuthenticated": "false", 
                "creationDate": "2018-02-14T16:42:15Z"
            },
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROAIGDT3HGFQZX4RY6RU",
                "arn": "arn:aws:iam::111122223333:role/Admin",
                "accountId": "111122223333",
                "userName": "Admin" 
            }
        },
        "invokedBy": "dynamodb.amazonaws.com"
    },
    "eventTime": "2018-02-14T16:42:39Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "Decrypt",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "dynamodb.amazonaws.com",
    "userAgent": "dynamodb.amazonaws.com",
    "requestParameters": 
    {
        "encryptionContext":
        {
            "aws:dynamodb:tableName": "Books",
            "aws:dynamodb:subscriberId": "111122223333" 
        }
    }, 
    "responseElements": null, 
    "requestID": "11cab293-11a6-11e8-8386-13160d3e5db5",
    "eventID": "b7d16574-e887-4b5b-a064-bf92f8ec9ad3", 
    "readOnly": true, 
    "resources": [ 
        {
            "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "accountId": "111122223333", 
            "type": "AWS::KMS::Key" 
        }
    ],
    "eventType": "AwsApiCall", 
    "recipientAccountId": "111122223333"
}
```

**CreateGrant**  
Cuando utiliza una [clave administrada por el cliente](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) o una [Clave administrada de AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) para proteger la tabla de DynamoDB, DynamoDB utiliza [concesiones](#dynamodb-grants) para permitir al servicio realizar la protección de datos continua y tareas de mantenimiento y durabilidad. Estas concesiones no son obligatorias en las [Clave propiedad de AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk).  
Las concesiones que crea DynamoDB son específicas de una tabla. El principal en la solicitud [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) es el usuario que creó la tabla.   
El evento que registra la operación `CreateGrant` es similar al siguiente evento de ejemplo. Los parámetros incluyen el nombre de recurso de Amazon (ARN) de la clave KMS para la tabla, la entidad principal beneficiaria, la entidad principal de retirada (el servicio de DynamoDB) y las operaciones que cubre la concesión. También incluye una restricción que requiere que toda operación de cifrado utilice el [contexto de cifrado](#dynamodb-encryption-context) especificado.  

```
{ 
    "eventVersion": "1.05", 
    "userIdentity": 
    { 
        "type": "AssumedRole", 
        "principalId": "AROAIGDTESTANDEXAMPLE:user01", 
        "arn": "arn:aws:sts::111122223333:assumed-role/Admin/user01", 
        "accountId": "111122223333", 
        "accessKeyId": "AKIAIOSFODNN7EXAMPLE", 
        "sessionContext": { 
            "attributes": { 
                "mfaAuthenticated": "false", 
                "creationDate": "2018-02-14T00:12:02Z" 
            }, 
            "sessionIssuer": { 
                "type": "Role", 
                "principalId": "AROAIGDTESTANDEXAMPLE", 
                "arn": "arn:aws:iam::111122223333:role/Admin", 
                "accountId": "111122223333", 
                "userName": "Admin" 
            }
        }, 
        "invokedBy": "dynamodb.amazonaws.com" 
    }, 
    "eventTime": "2018-02-14T00:15:15Z", 
    "eventSource": "kms.amazonaws.com", 
    "eventName": "CreateGrant", 
    "awsRegion": "us-west-2", 
    "sourceIPAddress": "dynamodb.amazonaws.com", 
    "userAgent": "dynamodb.amazonaws.com", 
    "requestParameters": { 
        "keyId": "1234abcd-12ab-34cd-56ef-1234567890ab", 
        "retiringPrincipal": "dynamodb.us-west-2.amazonaws.com", 
        "constraints": { 
            "encryptionContextSubset": {
                "aws:dynamodb:tableName": "Books",
                "aws:dynamodb:subscriberId": "111122223333" 
            } 
        }, 
        "granteePrincipal": "dynamodb.us-west-2.amazonaws.com", 
        "operations": [ 
            "DescribeKey", 
            "GenerateDataKey", 
            "Decrypt", 
            "Encrypt", 
            "ReEncryptFrom", 
            "ReEncryptTo", 
            "RetireGrant" 
        ] 
    }, 
    "responseElements": { 
        "grantId": "5c5cd4a3d68e65e77795f5ccc2516dff057308172b0cd107c85b5215c6e48bde" 
    }, 
    "requestID": "2192b82a-111c-11e8-a528-f398979205d8", 
    "eventID": "a03d65c3-9fee-4111-9816-8bf96b73df01", 
    "readOnly": false, 
    "resources": [ 
        { 
            "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "accountId": "111122223333", 
            "type": "AWS::KMS::Key" 
        } 
    ], 
    "eventType": "AwsApiCall",
    "recipientAccountId": "111122223333"
}
```

# Administración de tablas de cifrado en DynamoDB
<a name="encryption.tutorial"></a>

Puede usar la Consola de administración de AWS o la AWS Command Line Interface (AWS CLI) para especificar la clave de cifrado en las tablas nuevas y actualizar las claves de cifrado de las tablas existentes en Amazon DynamoDB.

**Topics**
+ [Especificación de la clave de cifrado para una tabla nueva](#encryption.tutorial-creating)
+ [Configuración de una clave de cifrado](#encryption.tutorial-update)

## Especificación de la clave de cifrado para una tabla nueva
<a name="encryption.tutorial-creating"></a>

Siga estos pasos para especificar la clave de cifrado en una tabla nueva mediante la consola de Amazon DynamoDB o la AWS CLI.

### Creación de una tabla cifrada (consola)
<a name="encryption.tutorial-console"></a>

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

1.  En el panel de navegación del lado izquierdo de la consola, elija **Tablas**.

1. Seleccione **Create Table (Crear tabla)**. En **Nombre de la tabla**, escriba **Music**. Como clave principal, introduzca **Artist** y como clave de ordenación, introduzca **SongTitle**, ambas como cadenas.

1. En **Settings** (Ajustes), asegúrese de que **Customize settings** (Personalizar ajustes) esté seleccionado.
**nota**  
Si selecciona **Use default settings** (Usar configuración predeterminada), las tablas se cifrarán en reposo con la Clave propiedad de AWS sin costo adicional.

1. En **Encryption at rest** (Cifrado en reposo), elija un tipo de cifrado: Clave propiedad de AWS, Clave administrada de AWS o una clave administrada por el cliente.
   +  **Owned by Amazon DynamoDB** (Propiedad de Amazon DynamoDB). Clave propiedad de AWS, propiedad y administrada específicamente por DynamoDB. No se cobrará ningún cargo adicional por el uso de esta clave.
   + **AWS Clave administrada por**. Alias de clave: `aws/dynamodb`. La clave se almacena en su cuenta y la administra AWS Key Management Service (AWS KMS). Se aplican los cargos de AWS KMS.
   +  **Además de estar almacenada en su cuenta, es de su propiedad y está administrada por usted.** Clave administrada por clientes. La clave se almacena en su cuenta y la administra AWS Key Management Service (AWS KMS). Se aplican los cargos de AWS KMS.
**nota**  
Si decide ser propietario y administrar su propia clave, asegúrese de que la política de claves KMS esté configurada correctamente. Para obtener más información, incluidos ejemplos, consulte [Política de claves para una clave administrada por el cliente](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk).

1. Elija **Create table** (Crear tabla) para crear la tabla cifrada. Para confirmar el tipo de cifrado, seleccione los detalles de la tabla en la pestaña **Overview** (Resumen) y revise la sección **Additional details** (Detalles adicionales).

### Creación de una tabla cifrada (AWS CLI)
<a name="encryption.tutorial-cli"></a>

Utilice la AWS CLI para crear una tabla con la Clave propiedad de AWS predeterminada, la Clave administrada de AWS o una clave administrada por el cliente para Amazon DynamoDB.

**Para crear una tabla cifrada mediante la predeterminada Clave propiedad de AWS**
+ Cree la tabla cifrada `Music` como sigue:

  ```
  aws dynamodb create-table \
    --table-name Music \
    --attribute-definitions \
        AttributeName=Artist,AttributeType=S \
        AttributeName=SongTitle,AttributeType=S \
    --key-schema \
        AttributeName=Artist,KeyType=HASH \
        AttributeName=SongTitle,KeyType=RANGE \
    --provisioned-throughput \
        ReadCapacityUnits=10,WriteCapacityUnits=5
  ```
**nota**  
Esta tabla está ahora cifrada utilizando la Clave propiedad de AWS predeterminada en la cuenta del servicio DynamoDB.

**Creación de una tabla cifrada mediante la Clave administrada de AWS para DynamoDB**
+ Cree la tabla cifrada `Music` como sigue:

  ```
  aws dynamodb create-table \
    --table-name Music \
    --attribute-definitions \
        AttributeName=Artist,AttributeType=S \
        AttributeName=SongTitle,AttributeType=S \
    --key-schema \
        AttributeName=Artist,KeyType=HASH \
        AttributeName=SongTitle,KeyType=RANGE \
    --provisioned-throughput \
        ReadCapacityUnits=10,WriteCapacityUnits=5 \
    --sse-specification Enabled=true,SSEType=KMS
  ```

   El estado `SSEDescription` de la descripción de la tabla se establece en `ENABLED` y `SSEType` es `KMS`. 

  ```
  "SSEDescription": {
    "SSEType": "KMS",
    "Status": "ENABLED",
    "KMSMasterKeyArn": "arn:aws:kms:us-east-1:123456789012:key/abcd1234-abcd-1234-a123-ab1234a1b234",
  }
  ```

**Creación de una tabla cifrada mediante la clave administrada por el cliente para DynamoDB**
+ Cree la tabla cifrada `Music` como sigue:

  ```
  aws dynamodb create-table \
    --table-name Music \
    --attribute-definitions \
        AttributeName=Artist,AttributeType=S \
        AttributeName=SongTitle,AttributeType=S \
    --key-schema \
        AttributeName=Artist,KeyType=HASH \
        AttributeName=SongTitle,KeyType=RANGE \
    --provisioned-throughput \
        ReadCapacityUnits=10,WriteCapacityUnits=5 \
    --sse-specification Enabled=true,SSEType=KMS,KMSMasterKeyId=abcd1234-abcd-1234-a123-ab1234a1b234
  ```
**nota**  
Para el `KMSMasterKeyId`, puede utilizar un ID de clave, un ARN de clave o un alias de clave. Si utiliza un alias de clave (por ejemplo, `alias/my-key`), DynamoDB resuelve el alias y asocia la clave de AWS KMS subyacente a la tabla. En la descripción de la tabla, el `KMSMasterKeyArn` siempre mostrará el ARN de la clave resuelta, no el alias. Para obtener más información sobre los identificadores clave, consulte [Identificadores de clave (KeyId)](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id) en la *Guía para desarrolladores de AWS Key Management Service*.

   El estado `SSEDescription` de la descripción de la tabla se establece en `ENABLED` y `SSEType` es `KMS`.

  ```
  "SSEDescription": {
    "SSEType": "KMS",
    "Status": "ENABLED",
    "KMSMasterKeyArn": "arn:aws:kms:us-east-1:123456789012:key/abcd1234-abcd-1234-a123-ab1234a1b234",
  }
  ```

## Configuración de una clave de cifrado
<a name="encryption.tutorial-update"></a>

También puede usar la consola de DynamoDB o la AWS CLI para actualizar las claves de cifrado de una tabla existente entre una Clave propiedad de AWS, una Clave administrada de AWS y una clave administrada por el cliente en cualquier momento.

### Actualización de una clave de cifrado (consola)
<a name="encryption.tutorial-update-console"></a>

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

1.  En el panel de navegación del lado izquierdo de la consola, elija **Tablas**.

1. Elija la tabla que desea actualizar.

1. Seleccione el menú desplegable **Actions** (Acciones) y, a continuación, seleccione la opción **Update settings** (Actualizar ajustes).

1. Vaya a la pestaña **Additional settings** (Ajustes adicionales).

1. En **Encryption** (Cifrado), elija **Manage encryption** (Administración del cifrado).

1. Elija un tipo de cifrado:
   +  **Propiedad de Amazon DynamoDB.** La clave AWS KMS es propiedad de DynamoDB y este servicio se encarga de su administración. No se cobrará ningún cargo adicional por el uso de esta clave.
   + **Clave administrada de AWS** Alias de clave: `aws/dynamodb`. La clave se almacena en su cuenta y la administra AWS Key Management Service. (AWS KMS). Se aplican los cargos de AWS KMS.
   +  **Además de estar almacenada en su cuenta, es de su propiedad y está administrada por usted.** La clave se almacena en su cuenta y la administra AWS Key Management Service. (AWS KMS). Se aplican los cargos de AWS KMS.
**nota**  
Si decide ser propietario y administrar su propia clave, asegúrese de que la política de claves KMS esté configurada correctamente. Para obtener más información, consulte [Política de claves para una clave administrada por el cliente](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk).

   A continuación, elija **Save (Guardar)** para actualizar la tabla cifrada. Para confirmar el tipo de cifrado, verifique los detalles de la tabla en la pestaña **Overview (Información general)**.

### Actualización de una clave de cifrado (AWS CLI)
<a name="encryption.tutorial-update-cli"></a>

Los siguientes ejemplos muestran cómo actualizar una tabla cifrada con la AWS CLI.

**Actualización de una tabla cifrada mediante la predeterminada Clave propiedad de AWS**
+ Actualice la tabla cifrada `Music`, como en el siguiente ejemplo.

  ```
  aws dynamodb update-table \
    --table-name Music \
    --sse-specification Enabled=false
  ```
**nota**  
Esta tabla está ahora cifrada utilizando la Clave propiedad de AWS predeterminada en la cuenta del servicio DynamoDB.

**Actualización de una tabla cifrada mediante la Clave administrada de AWS para DynamoDB**
+ Actualice la tabla cifrada `Music`, como en el siguiente ejemplo.

  ```
  aws dynamodb update-table \
    --table-name Music \
    --sse-specification Enabled=true
  ```

   El estado `SSEDescription` de la descripción de la tabla se establece en `ENABLED` y `SSEType` es `KMS`.

  ```
  "SSEDescription": {
    "SSEType": "KMS",
    "Status": "ENABLED",
    "KMSMasterKeyArn": "arn:aws:kms:us-east-1:123456789012:key/abcd1234-abcd-1234-a123-ab1234a1b234",
  }
  ```

**Actualización de una tabla cifrada con una clave administrada por el cliente para DynamoDB**
+ Actualice la tabla cifrada `Music`, como en el siguiente ejemplo.

  ```
  aws dynamodb update-table \
    --table-name Music \
    --sse-specification Enabled=true,SSEType=KMS,KMSMasterKeyId=abcd1234-abcd-1234-a123-ab1234a1b234
  ```
**nota**  
Para el `KMSMasterKeyId`, puede utilizar un ID de clave, un ARN de clave o un alias de clave. Si utiliza un alias de clave (por ejemplo, `alias/my-key`), DynamoDB resuelve el alias y asocia la clave de AWS KMS subyacente a la tabla. En la descripción de la tabla, el `KMSMasterKeyArn` siempre mostrará el ARN de la clave resuelta, no el alias.

   El estado `SSEDescription` de la descripción de la tabla se establece en `ENABLED` y `SSEType` es `KMS`. 

  ```
  "SSEDescription": {
    "SSEType": "KMS",
    "Status": "ENABLED",
    "KMSMasterKeyArn": "arn:aws:kms:us-east-1:123456789012:key/abcd1234-abcd-1234-a123-ab1234a1b234",
  }
  ```