Overview
En esta guía, puedes aprender detalles sobre los siguientes componentes de Queryable Encryption:
llave de cifrado de datos (DEK)s
Llaves maestras de cliente (CMK)
Colecciones de Bóvedas de Llaves
Sistemade gestión de claves (KMS)
Para ver guías paso a paso que demuestren cómo usar los componentes anteriores para configurar un cliente habilitado para Queryable Encryption, consulta los siguientes recursos:
Claves de cifrado de datos y clave maestra del 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 las DEK, cifradas con su CMK, en la colección Key Vault como documentos BSON. MongoDB nunca puede descifrar las DEK, ya que la gestión de claves se realiza en el lado del cliente y está controlada por este.
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 claves, consulte Rotar claves 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> }
Crea tu colección de Key Vault como si fuera una colección estándar de MongoDB. Tu colección de Key Vault debe tener un índice único en el keyAltNames campo. Para comprobar si existe dicho índice, ejecuta el listIndexes comando en la colección de Key Vault:
1 db.runCommand({ 2 listIndexes: "keyVault" 3 }).cursor.firstBatch;
1 [ 2 { v: 2, key: { _id: 1 }, name: '_id_' }, 3 { 4 v: 2, 5 key: { keyAltNames: 1 }, 6 name: 'keyAltNames_1', 7 unique: true 8 } 9 ]
Encadene cursor.firstBatch al comando para devolver únicamente la información del índice, incluyendo las claves y opciones utilizadas para crearlo. El resultado muestra que listIndexes el keyAltNames campo tiene un índice único keyAltNames_1 llamado.
Si el índice único no existe, su aplicación debe crearlo antes de realizar la administración de DEK.
Para aprender cómo crear una colección en MongoDB, consulta Bases de datos y colecciones.
Tip
Característica de mongosh
La 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 conceder acceso a tu aplicación a tu clave maestra de cliente, consulta el tutorial Queryable Encryption Tutorials.
Clúster de bóveda de claves
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, usa el campo keyVaultClient del objeto MongoClient de tu cliente. Para obtener más información sobre las opciones de configuración específicas de Queryable Encryption en el objeto MongoClient de tu cliente, consulta Opciones de MongoClient para Queryable Encryption.
Actualizar una colección de Key Vault
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 una DEK, utilice 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
Características específicas de mongosh
mongosh proporciona los siguientes métodos adicionales para trabajar con su colección de Key Vault:
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.