Proveedor de materiales de KMS directo - AWS SDK de cifrado de bases de datos

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Proveedor de materiales de KMS directo

nota

Nuestra biblioteca de cifrado del cliente pasó a llamarse SDK de cifrado de bases de datos de AWS. En el siguiente tema, se presenta información sobre las versiones 1.x—2.x del cliente de cifrado de DynamoDB para Java y versiones 1.x—3.x del cliente de cifrado de DynamoDB para Python. Para obtener más información, consulte el SDK de cifrado de bases de datos de AWS para la compatibilidad de la versión de DynamoDB.

El proveedor de materiales de Direct KMS (proveedor de Direct KMS) protege los elementos de la tabla con un AWS KMS keyque nunca deja AWS Key Management Service (AWS KMS) sin cifrar. Este proveedor de materiales criptográficos devuelve una clave de cifrado y una clave de firma únicas para cada elemento de la tabla. Para ello, llama a AWS KMS cada vez que cifra o descifra un elemento.

Si procesa elementos de DynamoDB con una frecuencia alta y a gran escala, podría superar los AWS KMS límites de solicitudes por segundo y provocar demoras en el procesamiento. Si necesita superar estos límites, cree un caso en el AWS SupportCentro. También podría considerar la posibilidad de utilizar un proveedor de materiales criptográficos con una reutilización de claves limitada, como el proveedor más reciente.

Para utilizar el proveedor de KMS directo, el proveedor de llamadas debe tener una Cuenta de AWS, al menos una AWS KMS key y permiso para llamar a las operaciones GenerateDataKey y Decrypt en la AWS KMS key. La AWS KMS key debe ser una clave de cifrado simétrica; el cliente de cifrado de DynamoDB no admite el cifrado asimétrico. Si utiliza una tabla global de DynamoDB, posiblemente desee especificar una AWS KMS clave de múltiples regiones. Para obtener más información, consulte Modo de uso.

nota

Cuando se utiliza el proveedor de KMS directo, los nombres y los valores de los atributos de clave principal aparecen en texto no cifrado en el AWS KMScontexto de cifrado y en los AWS CloudTrail en los registros de las operaciones AWS KMS relacionadas. Sin embargo, el cliente de cifrado de DynamoDB nunca expone el texto no cifrado de ningún valor de atributo cifrado.

El proveedor de KMS directo es uno de los diversos proveedores de materiales criptográficos (CMP) que admite el cliente de cifrado de DynamoDB. Para obtener información acerca de otros CMP, consulte Proveedor de materiales criptográficos.

Para ver código de ejemplo, consulte:

Modo de uso

Para crear un proveedor de KMS directo, utilice el parámetro de ID de clave para especificar una clave KMS de cifrado simétrico en su cuenta. El valor del parámetro ID de clave puede ser el ID de clave, el ARN de clave, el nombre de alias o el ARN de alias de AWS KMS key. Para obtener más información sobre los identificadores clave en la Guía para desarrolladores de AWS Key Management Service.

El proveedor de KMS directo necesita una clave KMS de cifrado simétrica. No puede utilizar una clave KMS asimétrica. Sin embargo, puede utilizar una clave KMS de múltiples regiones, una clave KMS con material de claves importado o una clave KMS en un almacén de claves personalizado. Debe tener los permisos kms:GenerateDataKey y kms:Decrypt en la clave KMS. Por lo tanto, debe utilizar una clave administrada por el cliente, no una clave KMS administrada por AWS o de la propiedad de AWS.

El cliente de cifrado de DynamoDB para Python determina la región a la que se debe llamar AWS KMS desde la región en el valor del parámetro de ID de clave, si incluye alguna. De lo contrario, utiliza la región en el cliente de AWS KMS, si se especifica una, o la región que se configura en el AWS SDK for Python (Boto3). Para obtener información acerca de la selección de regiones en Python, consulte Configuración en la Referencia de la API del SDK de AWS para Python (Boto3).

El cliente de cifrado de DynamoDB para Java determina la región a la que se debe llamar AWS KMS desde la región del cliente de AWS KMS, si el cliente que especifique incluye una región. De lo contrario, utiliza la región que usted configure en la AWS SDK for Java. Para obtener información sobre la selección de la región en el AWS SDK for Java, consulte Selección de Región de AWS en la Guía para desarrolladores de AWS SDK for Java.

Java
// Replace the example key ARN and Region with valid values for your application final String keyArn = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' final String region = 'us-west-2' final AWSKMS kms = AWSKMSClientBuilder.standard().withRegion(region).build(); final DirectKmsMaterialProvider cmp = new DirectKmsMaterialProvider(kms, keyArn);
Python

En el siguiente ejemplo, se utiliza la clave ARN para especificar el AWS KMS key. Si su identificador de clave no incluye una Región de AWS, el cliente de cifrado de DynamoDB obtiene la región de la sesión de Botocore configurada, si la hay, o de los valores predeterminados de Boto.

# Replace the example key ID with a valid value kms_key = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=kms_key)

Si utiliza tablas globales de Amazon DynamoDB, le recomendamos que cifre los datos con una clave de múltiples regiones AWS KMS. Las claves de múltiples regiones son AWS KMS keys en diferentes Regiones de AWS que se pueden utilizar indistintamente porque tienen el mismo ID de clave y el mismo material de claves. Para obtener más detalles, consulte Uso de claves de múltiples regiones en la Guía para desarrolladores de AWS Key Management Service.

nota

Si utiliza las tablas globales de la versión 2017.11.29, debe configurar las acciones de los atributos para que los campos de replicación reservados no estén cifrados ni firmados. Para obtener más información, consulte Problemas con las tablas globales de versiones anteriores.

Para usar una clave de múltiples regiones con el cliente de cifrado de DynamoDB, cree una clave de múltiples regiones y replíquela en las regiones en las que se ejecuta la aplicación. A continuación, configure el proveedor de Direct KMS para que utilice la clave de múltiples regiones en la región a la que llama el cliente de cifrado de DynamoDB AWS KMS.

En el siguiente ejemplo, se configura el cliente de cifrado de DynamoDB para que cifre datos en la región Este de EE. UU. (Norte de Virginia) (us-east-1) y los descifra en la región Oeste de EE. UU. (Oregón) (us-west-2) mediante una clave de múltiples regiones.

Java

En este ejemplo, el cliente de cifrado de DynamoDB obtiene la región para llamar a AWS KMS desde la región del AWS KMS cliente. El valor keyArn identifica una clave de múltiples regiones en la misma región.

// Encrypt in us-east-1 // Replace the example key ARN and Region with valid values for your application final String usEastKey = 'arn:aws:kms:us-east-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab' final String region = 'us-east-1' final AWSKMS kms = AWSKMSClientBuilder.standard().withRegion(region).build(); final DirectKmsMaterialProvider cmp = new DirectKmsMaterialProvider(kms, usEastKey);
// Decrypt in us-west-2 // Replace the example key ARN and Region with valid values for your application final String usWestKey = 'arn:aws:kms:us-west-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab' final String region = 'us-west-2' final AWSKMS kms = AWSKMSClientBuilder.standard().withRegion(region).build(); final DirectKmsMaterialProvider cmp = new DirectKmsMaterialProvider(kms, usWestKey);
Python

En este ejemplo, el cliente de cifrado de DynamoDB obtiene la región para llamar a AWS KMS desde la región en la ARN clave.

# Encrypt in us-east-1 # Replace the example key ID with a valid value us_east_key = 'arn:aws:kms:us-east-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab' kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=us_east_key)
# Decrypt in us-west-2 # Replace the example key ID with a valid value us_west_key = 'arn:aws:kms:us-west-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab' kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=us_west_key)

Cómo funciona

El proveedor de KMS directo devuelve las claves de cifrado y firma protegidas por una AWS KMS key que especifique, tal como se muestra en el diagrama siguiente.

La entrada, el procesamiento y la salida del proveedor de KMS directo en el cliente de cifrado de DynamoDB.
  • Para generar materiales de cifrado, el proveedor de KMS directo solicita al AWS KMS que genere una clave de datos única para cada elemento utilizando una AWS KMS key que especifique. Deriva las claves de cifrado y de firma para el elemento desde la copia de texto no cifrado de la clave de datos y, a continuación, devuelve las claves de cifrado y de firma, junto con la clave de datos cifrada, que está almacenada en el atributo de descripción de material del elemento.

    El encriptador de elementos utiliza las claves de cifrado y de firma y las elimina de la memoria lo antes posible. En el sistema cifrado solo se guarda la copia cifrada de la clave de datos desde la que se derivaron.

  • Para generar materiales de descifrado, el proveedor de KMS directo pide a AWS KMS que descifre la clave de datos cifrada. A continuación, deriva las claves de verificación y firma desde la clave de datos de texto no cifrado y los devuelve al encriptador de elementos.

    El encriptador de elementos verifica el elemento y, si la verificación se realiza correctamente, descifra los valores cifrados. A continuación, elimina las claves de la memoria lo antes posible.

Obtener los materiales de cifrado

En esta sección se describen en detalle las entradas, las salidas y el procesamiento del proveedor de KMS directo cuando recibe una solicitud para materiales de cifrado desde el encriptador de elementos.

Entrada (desde la aplicación)

  • El ID de clave de una AWS KMS key.

Entrada (desde el encriptador de elementos)

Salida (al encriptador de elementos)

  • Clave de cifrado (texto no cifrado)

  • Clave de firma

  • En la descripción de material real: estos valores se guardan en el atributo de descripción de material que el cliente agrega al elemento.

    • amzn-ddb-env-key: clave de datos cifrada en Base64 cifrada por la AWS KMS key

    • amzn-ddb-env-alg: algoritmo de cifrado, de forma predeterminada AES/256

    • amzn-ddb-sig-alg: algoritmo de firma, de forma predeterminada, HmacSHA256/256

    • amzn-ddb-wrap-alg: kms

Processing

  1. El proveedor de KMS directo envía a AWS KMS una solicitud para utilizar la AWS KMS key especificada para generar una clave de datos única para el elemento. La operación devuelve una clave de texto no cifrado y una copia que está cifrada con la AWS KMS key. Esto se conoce como el material de claves inicial.

    La solicitud incluye los siguientes valores en texto no cifrado en contexto de cifrado de AWS KMS. Estos valores no secretos están vinculados criptográficamente al objeto cifrado, de modo que se requiere el mismo contexto de cifrado para el descifrado. Puede utilizar estos valores para identificar la llamada a AWS KMS en registros de AWS CloudTrail.

    • amzn-ddb-env-alg: algoritmo de cifrado, de forma predeterminada AES/256

    • amzn-ddb-sig-alg: algoritmo de firma, de forma predeterminada, HmacSHA256/256

    • (Opcional) aws-kms-table: nombre de la tabla

    • (Opcional) nombre de la clave de partición: valor de la clave de partición (los valores binarios están codificados en Base64)

    • (Opcional) nombre de la clave de clasificación: valor de la clave de clasificación (los valores binarios están codificados en Base64)

    El proveedor de KMS directo obtiene los valores para el AWS KMScontexto de cifrado desde el contexto de cifrado de DynamoDB para el elemento. Si el contexto de cifrado de DynamoDB no incluye un valor como el nombre de tabla, el par nombre-valor se omite desde el AWS KMS contexto de cifrado.

  2. El proveedor de KMS directo deriva una clave de cifrado simétrica y una clave de firma de la clave de datos. De forma predeterminada, utiliza algoritmo hash seguro (SHA) 256 y función de derivación de clave basada en HMAC RFC5869 para derivar una clave de cifrado simétrica AES de 256 bits y una clave de firma HMAC-SHA-256 de 256 bits.

  3. El proveedor de KMS directo devuelve la salida al encriptador de elementos.

  4. El encriptador de elementos utiliza la clave de cifrado para cifrar los atributos especificados y la clave de firma para firmarlos, utilizando los algoritmos especificados en la descripción de material real. Elimina las claves de texto no cifrado de la memoria lo antes posible.

Obtener los materiales de descifrado

En esta sección se describen en detalle las entradas, las salidas y el procesamiento del proveedor de KMS directo cuando recibe una solicitud para materiales de descifrado desde el encriptador de elementos.

Entrada (desde la aplicación)

  • El ID de clave de una AWS KMS key.

    El valor del ID de clave puede ser el ID de clave, el ARN de clave, el nombre de alias o el ARN de alias del AWS KMS key. Los valores que no se especifiquen en el ID de clave, como la región, deben estar disponibles en el perfil nombrado AWS. El ARN de clave proporciona todos los valores que necesita AWS KMS.

Entrada (desde el encriptador de elementos)

Salida (al encriptador de elementos)

  • Clave de cifrado (texto no cifrado)

  • Clave de firma

Processing

  1. El proveedor de KMS directo obtiene la clave de datos cifrados desde el atributo de descripción del material en el elemento cifrado.

  2. Solicita AWS KMS utilizar la AWS KMS key especificada para descifrar la clave de datos cifrados. La operación devuelve una clave de texto no cifrado.

    Esta solicitud debe usar el mismo contexto de cifrado de AWS KMS que se utilizó para generar y cifrar la clave de datos.

    • aws-kms-table: nombre de la tabla

    • nombre de la clave de partición: valor de la clave de partición (los valores binarios están codificados en Base64)

    • (Opcional) nombre de la clave de clasificación: valor de la clave de clasificación (los valores binarios están codificados en Base64)

    • amzn-ddb-env-alg: algoritmo de cifrado, de forma predeterminada AES/256

    • amzn-ddb-sig-alg: algoritmo de firma, de forma predeterminada, HmacSHA256/256

  3. El proveedor de KMS directo utiliza algoritmo hash seguro (SHA) 256 y función de derivación de clave basada en HMAC RFC5869 para derivar una clave de cifrado simétrica AES de 256 bits y una clave de firma HMAC-SHA-256 de 256 bits.

  4. El proveedor de KMS directo devuelve la salida al encriptador de elementos.

  5. El encriptador de elementos utiliza la clave de firma para verificar el elemento. Si se realiza correctamente, utiliza la clave de cifrado simétrica para descifrar los valores de atributo cifrados. Estas operaciones utilizan los algoritmos de cifrado y firma especificados en la descripción de material real. El encriptador de elementos elimina las claves de texto no cifrado de la memoria lo antes posible.