Overview
En esta guía, puedes aprender detalles acerca de los siguientes componentes de la Encriptación en Uso:
llave de cifrado de datos (DEK)s
Llaves maestras de cliente (CMK)
Colecciones de Bóvedas de Llaves
Sistema de gestión de claves (KMS)
Para ver guías paso a paso que demuestren cómo usar los componentes anteriores para configurar un cliente con Queryable Encryption o Cifrado en el lado del cliente a nivel de campo, consulta los siguientes recursos:
llaves de cifrado de datos y la llave maestra de cliente
El cifrado en uso utiliza una jerarquía de llaves multinivel para proteger tus datos, a menudo llamada "cifrado de sobre" o "llaves de envolvimiento".
Una clave maestra de cliente (CMK), que a veces se denomina clave de sistema de gestión de claves (KMS), es la clave de nivel superior que creas en tu proveedor de claves aprovisionado por el cliente, como una KMS en la nube. La llave maestra de cliente encripta las llaves de cifrado de datos (DEK), que a su vez encriptan los campos de tus documentos. Sin acceso a una llave maestra de cliente, tu aplicación cliente no puede desencriptar los DEK asociados.
MongoDB almacena los DEK, cifrados con su llave maestra de cliente, en la Colección de Bóvedas de Llaves como documentos BSON. MongoDB nunca podrá descifrar los DEK, ya que la gestión de claves se realiza del lado del cliente y está controlada por el cliente.
Si se elimina una DEK, todos los campos cifrados con esa DEK se vuelven permanentemente ilegibles. Si se borra una llave maestra de cliente, todos los campos cifrados con una DEK mediante esa llave maestra de cliente se vuelven permanentemente ilegibles.
Advertencia
La llave maestra de cliente es la clave más sensible en Queryable Encryption. Si tu llave maestra de cliente se ve comprometida, todos tus datos cifrados pueden ser desencriptados. Utiliza un sistema remoto de gestión de claves para almacenar tu llave maestra de cliente.
Importante
Utilizar un proveedor de Key Management Service remoto
Almacena tu clave maestra de cliente en un sistema de gestión de claves remoto (KMS).
Para obtener más información sobre por qué debe utilizar un KMS remoto, consulte Razones para usar un sistema de gestión de claves remoto.
Para ver una lista de todos los proveedores admitidos de KMS, consulta la página de Proveedores KMS.
Rotación de claves
Rotea tu llave maestra de cliente de forma manual o automática en el proveedor de claves aprovisionado. MongoDB no tiene visibilidad sobre este proceso. Una vez que rotes la llave maestra de cliente, MongoDB la usará para envolver todos los nuevos DEK. No vuelve a envolver los DEK cifrados existentes. Estos continúan envueltos con la llave maestra de cliente anterior.
Para rotar algunas o todas las DEK cifradas en su almacén de claves, utilice el KeyVault.rewrapManyDataKey() método. Vuelve a envolver sin problemas las claves con la nueva llave maestra de cliente especificada, sin interrumpir tu aplicación. Los DEKs en sí mismos se dejan sin cambios después de envolverlos nuevamente con la nueva llave maestra de cliente.
Para obtener detalles sobre la rotación de llaves, consulta Rotar llaves de cifrado.
Colección de Bóvedas de Llaves
Tu Colección de Bóvedas de Llaves es la colección MongoDB que utilizas para almacenar los documentos de llave de cifrado de datos (DEK) cifrados. Los documentos DEK son documentos BSON que contienen DEKs y tienen la siguiente estructura:
{ "_id" : UUID(<string>), "status" : <int>, "masterKey" : {<object>}, "updateDate" : ISODate(<string>), "keyMaterial" : BinData(0,<string>), "creationDate" : ISODate(<string>), "keyAltNames" : <array> }
Cree su Colección de Bóvedas de Llaves como lo haría con una colección estándar de MongoDB. Tu Colección de Bóvedas de Llaves debe tener un índice único en el campo keyAltNames. Para verificar si el índice único existe, ejecuta el comando listIndexes en la Colección de Bóvedas de Llaves:
1 db.runCommand({ 2 listIndexes: "__keyVault", 3 });
1 { 2 cursor: { 3 id: Long("0"), 4 ns: 'encryption.__keyVault', 5 firstBatch: [ 6 { v: 2, key: { _id: 1 }, name: '_id_' } 7 ] 8 }, 9 ok: 1, 10 }
Si el índice único no existe, tu aplicación debe crearlo antes de realizar la gestión del DEK.
Para aprender cómo crear una colección en MongoDB, consulta Bases de datos y colecciones.
Tip
Funcionalidad de mongosh
El método mongosh KeyVault.createKey() crea automáticamente un índice único en el campo keyAltNames si no existe uno.
Para ver los diagramas con información detallada de cómo interactúan tu DEK, llave maestra de cliente y la Colección de Bóvedas de Llaves en todas las arquitecturas de KMS soportadas por los proveedores, consulta Proveedores de KMS.
Nombre de la Colección de Bóvedas de Llaves
Puedes usar cualquier namespace que no sea de administrador para almacenar tu Colección de Bóvedas de Llaves. Por convención, los ejemplos a lo largo de esta documentación utilizan el encryption.__keyVault namespace.
Advertencia
No utilices la base de datos admin para almacenar colecciones relacionadas con el cifrado. Si utilizas la base de datos admin para esta colección, es posible que tu cliente de MongoDB no pueda acceder ni descifrar tus datos debido a la falta de permisos.
Permisos
Las aplicaciones con read acceso a la Colección de Bóvedas de Llaves pueden recuperar las claves de cifrado de datos cifradas (DEK) consultando la colección. No obstante, solo las aplicaciones con acceso a la clave principal del cliente (CMK) utilizada para cifrar una DEK pueden utilizar esa DEK para el cifrado o el descifrado. Debes conceder a tu aplicación acceso tanto a la Colección de Bóvedas de Llaves como a tu llave maestra de cliente para cifrar y descifrar documentos con una DEK.
Para aprender cómo otorgar acceso a una colección de MongoDB, consulta Gestionar usuarios y roles en el manual de MongoDB.
Para aprender cómo otorgar acceso a tu aplicación a tu llave maestra de cliente, consulta el Tutorial de cifrado automático con Queryable Encryption o el Tutorial de cifrado automático CSFLE.
clúster del Key Vault
Por defecto, MongoDB almacena la Colección de Bóvedas de Llaves en el clúster conectado. MongoDB también es compatible con el alojamiento de la Colección de Bóvedas de Llaves en una implementación distinta de MongoDB que el clúster conectado. Las aplicaciones deben tener acceso tanto al clúster que aloja su Colección de Bóvedas de Llaves como al clúster de conexión para realizar operaciones de Queryable Encryption.
Para especificar el clúster que aloja tu Colección de Bóvedas de Llaves, utiliza el campo keyVaultClient del objeto MongoClient de tu cliente. Para obtener más información sobre las opciones de configuración específicas en el objeto MongoClient de tu cliente, consulta Opciones de MongoClient para Queryable Encryption u Opciones de MongoClient para CSFLE.
Actualizar una Colección de Bóvedas de Llaves
Para agregar un DEK a su Colección de Bóvedas de Llaves, use el método createKey de un objeto ClientEncryption.
Para eliminar o actualizar un DEK, utiliza uno de los siguientes mecanismos:
El método
rewrapManyDataKeyStandard CRUD operations
Para obtener más información sobre el método rewrapManyDataKey, consulta la documentación del método para tu cliente o driver:
Tip
Funcionalidades específicas de mongosh
mongosh proporciona los siguientes métodos adicionales para trabajar con tu Colección de Bóvedas de Llaves:
Para ver un tutorial que muestra cómo crear una clave de cifrado de datos, consulta el Inicio rápido de Queryable Encryption o el Inicio rápido de CSFLE.