Proveedor más reciente - 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 más reciente

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 más reciente es un proveedor de materiales criptográficos (CMP) que se ha diseñado para funcionar con un almacén de proveedores. Obtiene CMP del almacén de proveedores y obtiene los materiales criptográficos que devuelve desde los CMP. Normalmente utiliza cada CMP para satisfacer varias solicitudes para materiales criptográficos. Pero puede utilizar las características de su almacén de proveedores para controlar hasta qué punto se reutilizan los materiales, determinar la frecuencia con la que se rota su CMP e, incluso, cambiar el tipo de CMP que utiliza sin cambiar el proveedor más reciente.

nota

El código asociado al símbolo MostRecentProvider del proveedor más reciente puede almacenar materiales criptográficos en la memoria durante todo el proceso. Podría permitir a la persona que llama usar claves que ya no está autorizada a usar.

El símbolo MostRecentProvider está obsoleto en las versiones anteriores compatibles del cliente de cifrado de DynamoDB y se eliminó de la versión 2.0.0. Se sustituye por el símbolo CachingMostRecentProvider. Para obtener más información, consulte Actualizaciones del proveedor más reciente.

El proveedor más reciente es una buena opción para aplicaciones que necesitan minimizar las llamadas al almacén de proveedores y su origen criptográfico y para aplicaciones que pueden reutilizar algunos materiales criptográficos sin infringir sus requisitos de seguridad. Por ejemplo, le permite proteger sus materiales criptográficos con un AWS KMS key en AWS Key Management Service (AWS KMS) sin tener que llamar a AWS KMS cada vez que cifra o descifra un elemento.

El almacén de proveedores que elija determina el tipo de CMP que utiliza el proveedor más reciente y la frecuencia con la que obtiene un CMP nuevo. Puede utilizar cualquier almacén de proveedores compatible con el proveedor más reciente, incluidos los almacenes de proveedor personalizados que diseñe.

El cliente de cifrado de DynamoDB incluye un MetaStore que crea y devuelve proveedores de materiales encapsulados (CMP encapsulados). El MetaStore guarda varias versiones de los CMP encapsulados que genera en una tabla de DynamoDB interna y los protege con un cifrado del cliente mediante una instancia interna del cliente de cifrado de DynamoDB.

Puede configurar el MetaStore para utilizar cualquier tipo de CMP interno para proteger los materiales de la tabla, incluido un proveedor de KMS directo que genera materiales criptográficos protegidos por su AWS KMS key, un CMP encapsulado que usa las claves de encapsulación y de firma que proporcione o un CMP personalizado compatible que diseñe.

Para ver código de ejemplo, consulte:

Modo de uso

Para crear un proveedor más reciente, tiene que crear y configurar un almacén de proveedores y, a continuación, crear un proveedor más reciente que utiliza el almacén de proveedores.

En estos ejemplos, se muestra cómo crear un proveedor más reciente que utiliza un MetaStore y protege las versiones en su tabla interna de DynamoDB con materiales criptográficos de un proveedor directo de KMS. Estos ejemplos utilizan el símbolo CachingMostRecentProvider.

Cada proveedor más reciente tiene un nombre que identifica sus CMP en la tabla Metastore, una configuración de tiempo de vida (TTL) y una configuración de tamaño de caché que determina cuántas entradas puede contener la caché. En estos ejemplos, se establece el tamaño de la caché en 1000 entradas y un TTL de 60 segundos.

Java
// Set the name for MetaStore's internal table final String keyTableName = 'metaStoreTable' // Set the Region and AWS KMS key final String region = 'us-west-2' final String keyArn = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' // Set the TTL and cache size final long ttlInMillis = 60000; final long cacheSize = 1000; // Name that identifies the MetaStore's CMPs in the provider store final String materialName = 'testMRP' // Create an internal DynamoDB client for the MetaStore final AmazonDynamoDB ddb = AmazonDynamoDBClientBuilder.standard().withRegion(region).build(); // Create an internal Direct KMS Provider for the MetaStore final AWSKMS kms = AWSKMSClientBuilder.standard().withRegion(region).build(); final DirectKmsMaterialProvider kmsProv = new DirectKmsMaterialProvider(kms, keyArn); // Create an item encryptor for the MetaStore, // including the Direct KMS Provider final DynamoDBEncryptor keyEncryptor = DynamoDBEncryptor.getInstance(kmsProv); // Create the MetaStore final MetaStore metaStore = new MetaStore(ddb, keyTableName, keyEncryptor); //Create the Most Recent Provider final CachingMostRecentProvider cmp = new CachingMostRecentProvider(metaStore, materialName, ttlInMillis, cacheSize);
Python
# Designate an AWS KMS key kms_key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' # Set the name for MetaStore's internal table meta_table_name = 'metaStoreTable' # Name that identifies the MetaStore's CMPs in the provider store material_name = 'testMRP' # Create an internal DynamoDB table resource for the MetaStore meta_table = boto3.resource('dynamodb').Table(meta_table_name) # Create an internal Direct KMS Provider for the MetaStore kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=kms_key_id) # Create the MetaStore with the Direct KMS Provider meta_store = MetaStore( table=meta_table, materials_provider=kms_cmp ) # Create a Most Recent Provider using the MetaStore # Sets the TTL (in seconds) and cache size (# entries) most_recent_cmp = MostRecentProvider( provider_store=meta_store, material_name=material_name, version_ttl=60.0, cache_size=1000 )

Cómo funciona

El proveedor más reciente obtiene los CMP desde un almacén de proveedores. A continuación, utiliza el CMP para generar los materiales criptográficos que devuelve al encriptador de elementos.

Acerca del proveedor más reciente

El proveedor más reciente obtiene un proveedor de materiales criptográficos (CMP) desde un almacén de proveedores. A continuación, utiliza el CMP para generar los materiales criptográficos que devuelve. Cada proveedor más reciente está asociado a un almacén de proveedores, pero un almacén de proveedores puede suministrar CMP a múltiples proveedores en varios hosts.

El proveedor más reciente puede funcionar con cualquier CMP compatible desde cualquier almacén de proveedores. El encriptador de elementos solicita materiales de cifrado o descifrado al CMP y los devuelve al encriptador de elementos. No realiza ninguna operación criptográfica.

Para solicitar un CMP desde su almacén de proveedores, el proveedor más reciente proporciona su nombre de material y la versión de un CMP existente que desea utilizar. Para los materiales de cifrado, el proveedor más reciente solicita siempre la versión máxima ("más reciente"). Para los materiales de descifrado, solicita la versión del CMP que se utilizó para crear los materiales de cifrado, tal como se muestra en el diagrama siguiente.

Un proveedor más reciente

El proveedor más reciente guarda versiones de los CMP que el almacén de proveedores devuelve en una caché de elementos menos usados recientemente (LRU) local en memoria. La caché permite que el proveedor más reciente reciba los CMP que necesita sin llamar al almacén de proveedores para cada elemento. Puede borrar la caché bajo demanda.

El proveedor más reciente utiliza un valor de tiempo de vida configurable que se puede ajustar en función de las características de la aplicación.

Acerca del MetaStore

Puede utilizar un proveedor más reciente con cualquier almacén de proveedores, incluido un almacén de proveedores personalizado compatible. El cliente de cifrado de DynamoDB incluye un MetaStore, una implementación segura que puede configurar y personalizar.

Un MetaStore es un almacén de proveedores que crea y devuelve CMP encapsulados que se configuran con la clave de encapsulación, la clave de desencapsulación y la clave de firma que requieren los CMP encapsulados. Un MetaStore es una opción segura para un proveedor más reciente, ya que los CMP encapsulados siempre generan claves de cifrado de elemento únicas para cada elemento. Solo se reutilizan la clave de encapsulación que protege la clave de cifrado del elemento y las claves de firma.

En el siguiente diagrama se muestran los componentes del MetaStore y cómo interactúa con el proveedor más reciente.

Un MetaStore

MetaStore genera los CMP empaquetados y, a continuación, los almacena (en forma cifrada) en una tabla interna de DynamoDB. La clave de partición es el nombre del material del proveedor más reciente; la clave de clasificación es el número de versión. Los materiales de la tabla están protegidos mediante un cliente de cifrado interno de DynamoDB, incluido un encriptador de elementos y un proveedor de materiales criptográficos (CMP) interno.

Puede utilizar cualquier tipo de CMP interno en su MetaStore, incluido un proveedor de KMS directo, un CMP encapsulado con materiales criptográficos que proporcione o un CMP personalizado compatible. Si el CMP interno de su MetaStore es un proveedor de KMS directo, sus claves de empaquetado y firma reutilizables están protegidas con un AWS KMS key en AWS Key Management Service (AWS KMS). El MetaStore llama a AWS KMS cada vez que añade una nueva versión de CMP a su tabla interna u obtiene una versión de CMP desde su tabla interna.

Establecer un valor de tiempo de vida

Puede establecer un valor de tiempo de vida (TTL) para cada proveedor más reciente que cree. En general, utilice el valor TTL más bajo que resulte práctico para su aplicación.

El uso del valor de TTL se cambia en el símbolo CachingMostRecentProvider del proveedor más reciente.

nota

El MostRecentProvider símbolo del proveedor más reciente quedó obsoleto en las versiones anteriores compatibles del cliente de cifrado de DynamoDB y se eliminó de la versión 2.0.0. Se sustituye por el símbolo CachingMostRecentProvider. Se recomienda que actualice el código lo antes posible. Para obtener más información, consulte Actualizaciones del proveedor más reciente.

CachingMostRecentProvider

El CachingMostRecentProvider utiliza el valor de TTL de dos maneras diferentes.

  • El TTL determina la frecuencia con la que el proveedor más reciente busca en la tienda del proveedor una nueva versión del CMP. Si hay una nueva versión disponible, el proveedor más reciente reemplaza su CMP y actualiza sus materiales criptográficos. De lo contrario, seguirá utilizando su CMP y sus materiales criptográficos actuales.

  • El TTL determina durante cuánto tiempo se pueden usar los CMP de la memoria caché. Antes de utilizar un CMP almacenado en caché para el cifrado, el proveedor más reciente evalúa el tiempo que permanece en la memoria caché. Si el tiempo de caché de un CMP supera el TTL, el CMP se expulsa de la memoria caché y el proveedor más reciente obtiene una nueva versión del CMP de la última versión de la tienda de su proveedor.

MostRecentProvider

En el MostRecentProvider, el TTL determina la frecuencia con la que el proveedor más reciente busca en la tienda del proveedor una nueva versión del CMP. Si hay una nueva versión disponible, el proveedor más reciente reemplaza su CMP y actualiza sus materiales criptográficos. De lo contrario, seguirá utilizando su CMP y sus materiales criptográficos actuales.

El TTL no determina la frecuencia con la que se crea una nueva versión del CMP. Las nuevas versiones de CMP se crean rotando los materiales criptográficos.

Un valor de TTL ideal varía según la aplicación y sus objetivos de latencia y disponibilidad. Un TTL menor mejora el perfil de seguridad al reducir el tiempo que los materiales criptográficos se almacenan en la memoria. Además, un TTL menor actualiza la información crítica con más frecuencia. Por ejemplo, si su CMP interno es un proveedor de KMS directo, verificará con más frecuencia que la persona que llama siga estando autorizada a utilizar un AWS KMS key.

Sin embargo, si el TTL es demasiado breve, las llamadas frecuentes a la tienda del proveedor pueden aumentar los costos y hacer que la tienda del proveedor limite las solicitudes de su aplicación y de otras aplicaciones que comparten su cuenta de servicio. También podría resultarle útil coordinar el TTL con la velocidad de rotación de los materiales criptográficos.

Durante las pruebas, varíe el TTL y el tamaño de la caché según las distintas cargas de trabajo hasta que encuentre una configuración que se adapte a su aplicación y a sus estándares de seguridad y rendimiento.

Rotación de materiales criptográficos

Cuando un proveedor más reciente necesita materiales de cifrado, siempre utiliza la versión más reciente que conozca de su CMP. La frecuencia con la que comprueba si hay una versión más reciente viene determinada por el valor de tiempo de vida (TTL) que se establece al configurar el proveedor más reciente.

Cuando el TTL caduca, el proveedor más reciente busca en la tienda del proveedor una versión más reciente del CMP. Si hay alguna disponible, el proveedor más reciente la obtiene y reemplaza el CMP en su caché. Utiliza este CMP y sus materiales criptográficos hasta que descubre que la tienda del proveedor tiene una versión más reciente.

Para indicarle al almacén de proveedores que cree una nueva versión de un CMP para un proveedor más reciente, llame a la operación Crear nuevo proveedor del almacén de proveedores con el nombre del material del proveedor más reciente. El almacén de proveedores crea un nuevo CMP y guarda una copia cifrada en su almacén interno con un número de versión mayor. (También devuelve un CMP, pero puede descartarlo). En consecuencia, la próxima vez que el proveedor más reciente consulta al almacén de proveedores para conocer el número de versión máximo de sus CMP, obtiene el nuevo número de la versión superior y lo utiliza en posteriores solicitudes al almacén para ver si se creó una nueva versión del CMP.

Puede programar sus llamadas a Crear nuevo proveedor en función de la hora, del número de elementos o de los atributos procesados o de cualquier otra métrica que tenga sentido para su aplicación.

Obtener los materiales de cifrado

El proveedor más reciente utiliza el siguiente proceso, mostrado en este diagrama, para obtener los materiales de cifrado que devuelve al encriptador de elementos. La salida depende del tipo de CMP que el almacén de proveedores devuelve. El proveedor más reciente puede utilizar cualquier almacén de proveedores compatible, incluso el MetaStore que se incluye en el cliente de cifrado de DynamoDB.

Entrada, procesamiento y salida del proveedor más reciente en el cliente de cifrado de DynamoDB

Al crear un proveedor más reciente con el CachingMostRecentProvidersímbolo, se especifica un almacén de proveedores, un nombre para el proveedor más reciente y un valor de tiempo de vida (TTL). Si lo desea, también puede especificar un tamaño de caché, que determina la cantidad máxima de materiales criptográficos que pueden existir en la caché.

Cuando el encriptador de elementos solicita al proveedor más reciente materiales de cifrado, el proveedor más reciente empieza buscando en su caché la versión más reciente de su CMP.

  • Si encuentra el CMP con la versión más reciente en su caché y el CMP no ha excedido el valor de TTL, el proveedor más reciente utiliza el CMP para generar materiales de cifrado. A continuación, devuelve los materiales de cifrado al encriptador de elementos. Esta operación no requiere una llamada al almacén de proveedores.

  • Si la última versión del CMP no está en su caché, o si está en la caché, pero excedió su valor de TTL, el proveedor más reciente solicita un CMP desde su almacén de proveedores. La solicitud incluye el nombre del material del proveedor más reciente y el número de versión máximo que conoce.

    1. El almacén de proveedores devuelve un CMP desde su almacenamiento persistente. Si el almacén de proveedores es un MetaStore, obtiene un CMP encapsulado cifrado desde su tabla de DynamoDB interna utilizando el nombre del material del proveedor más reciente como clave de partición y el número de la versión como la clave de clasificación. El MetaStore utiliza su encriptador de elementos interno y el CMP interno para descifrar el CMP encapsulado. A continuación, devuelve el CMP de texto no cifrado al proveedor más reciente. Si el CMP interno es un proveedor de KMS directo, este paso incluye una llamada al AWS Key Management Service (AWS KMS).

    2. El CMP agrega el campo amzn-ddb-meta-id a la descripción de material real. Su valor es el nombre de material y la versión del CMP en su tabla interna. El almacén del proveedor devuelve el CMP al proveedor más reciente.

    3. El proveedor más reciente almacena en la memoria caché el CMP.

    4. El proveedor más reciente utiliza el CMP para generar materiales de cifrado. A continuación, devuelve los materiales de cifrado al encriptador de elementos.

Obtener los materiales de descifrado

Cuando el encriptador de elementos solicita al proveedor más reciente los materiales de descifrado, el proveedor más reciente utiliza el proceso siguiente para obtenerlos y devolverlos.

  1. El proveedor más reciente solicita al almacén de proveedores el número de la versión de los materiales criptográficos que se utilizaron para cifrar el elemento. Transfiere la descripción de material real desde el atributo de descripción de material del elemento.

  2. El almacén de proveedores obtiene el número de versión de CMP de cifrado desde el campo amzn-ddb-meta-id en la descripción de material real y lo devuelve al proveedor más reciente.

  3. El proveedor más reciente busca en la caché la versión del CMP que se utilizó para cifrar y firmar el elemento.

  • Si encuentra que la versión coincidente del CMP está en su caché y el CMP no excedió el valor del tiempo de vida (TTL), el proveedor más reciente utiliza el CMP para generar materiales de descifrado. A continuación, devuelve los materiales de descifrado al encriptador de elementos. Esta operación no requiere una llamada al almacén de proveedores o cualquier otro CMP.

  • Si la versión coincidente del CMP no está en su caché, o si la caché AWS KMS key excedió su valor de TTL, el proveedor más reciente solicita un CMP desde su almacén de proveedores. Envía el nombre del material y el número de versión de CMP de cifrado en la solicitud.

    1. El almacén de proveedores busca su almacenamiento persistente para el CMP utilizando el nombre del proveedor más reciente como clave de partición y el número de la versión como la clave de clasificación.

      • Si el nombre y el número de versión no están en su almacenamiento persistente, el almacén de proveedores genera una excepción. Si el almacén de proveedores se utilizó para generar el CMP, el CMP se debería almacenar en su almacenamiento persistente, a menos que se haya eliminado de forma intencionada.

      • Si el CMP con el nombre y número de versión coincidentes están en el almacenamiento persistente del almacén de proveedores, este devuelve el CMP especificado al proveedor más reciente.

        Si el almacén de proveedores es una MetaStore, obtiene el CMP cifrado desde su tabla de DynamoDB. A continuación, utiliza materiales criptográficos desde su CMP interno para descifrar el CMP cifrado antes de devolver el CMP al proveedor más reciente. Si el CMP interno es un proveedor de KMS directo, este paso incluye una llamada al AWS Key Management Service (AWS KMS).

    2. El proveedor más reciente almacena en la memoria caché el CMP.

    3. El proveedor más reciente utiliza el CMP para generar materiales de descifrado. A continuación, devuelve los materiales de descifrado al encriptador de elementos.

Actualizaciones del proveedor más reciente

El símbolo del proveedor más reciente cambia de MostRecentProvider a CachingMostRecentProvider.

nota

El símbolo MostRecentProvider, que representa al proveedor más reciente, está obsoleto en la versión 1.15 del cliente de cifrado de DynamoDB para Java y en la versión 1.3 del cliente de cifrado de DynamoDB para Python, y se eliminó de las versiones 2.0.0 del cliente de cifrado de DynamoDB en las implementaciones de ambos lenguajes. En su lugar, utilice el CachingMostRecentProvider.

El CachingMostRecentProvider implementa los siguientes cambios:

  • El CachingMostRecentProvider elimina periódicamente los materiales criptográficos de la memoria cuando su tiempo en la memoria supera el valor del tiempo de vida (TTL) configurado.

    Es posible que MostRecentProvider almacene materiales criptográficos en la memoria durante el tiempo de vida del proceso. Como resultado, es posible que el proveedor más reciente no esté al tanto de los cambios de autorización. Es posible que utilice claves de cifrado una vez revocados los permisos de uso de la persona que llama.

    Si no puede actualizar a esta nueva versión, puede obtener un efecto similar si llama periódicamente al clear() método de la memoria caché. Este método vacía manualmente el contenido de la caché y requiere que el proveedor más reciente solicite un nuevo CMP y nuevos materiales criptográficos.

  • El CachingMostRecentProvider también incluye una configuración de tamaño de la caché que le da más control sobre la caché.

Para actualizar el CachingMostRecentProvider, debe cambiar el nombre del símbolo en el código. En todos los demás aspectos, el CachingMostRecentProvider es totalmente compatible con versiones anteriores del MostRecentProvider. No es necesario volver a cifrar ningún elemento de la mesa.

Sin embargo, CachingMostRecentProvider genera más llamadas a la infraestructura clave subyacente. Llama a la tienda del proveedor al menos una vez en cada intervalo de vida (TTL, tiempo de vida). Lo más probable es que las aplicaciones con numerosos CMP activos (debido a la rotación frecuente) o las aplicaciones con grandes flotas sean más sensibles a este cambio.

Antes de publicar el código actualizado, pruébelo minuciosamente para asegurarse de que las llamadas más frecuentes no perjudiquen la aplicación ni provoquen una limitación por parte de los servicios de los que depende su proveedor, como AWS Key Management Service (AWS KMS) o Amazon DynamoDB. Para mitigar cualquier problema de rendimiento, ajuste el tamaño de la caché y el tiempo de vida de CachingMostRecentProvider en función de las características de rendimiento que observe. Para obtener instrucciones, consulte Establecer un valor de tiempo de vida.