Overview
En esta guía, puede obtener información detallada sobre los siguientes componentes del cifrado consultable:
Claves de cifrado de datos (DEK)s
Llaves maestras del cliente (CMK)
Colecciones de Bóvedas de Llaves
Sistemade gestión de claves (KMS)
Para ver guías paso a paso que demuestran cómo usar los componentes anteriores para configurar un cliente habilitado para cifrado consultable, consulte los siguientes recursos:
Claves de cifrado de datos y clave maestra del cliente
El cifrado en uso utiliza una jerarquía de claves de varios niveles para proteger sus datos, a menudo denominada "cifradodesobre" o "claves de envoltura".
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 elimina una DEK, todos los campos cifrados con ella se vuelven ilegibles permanentemente. Si elimina una CMK, todos los campos cifrados con una DEK que la utilice se vuelven ilegibles permanentemente.
Advertencia
La Clave Maestra del Cliente es la clave más sensible en el Cifrado Consultable. Si su CMK se ve comprometida, todos sus datos cifrados pueden descifrarse. Utilice un Sistema de Gestión de Claves remoto para almacenar su CMK.
Importante
Utilice un proveedor de servicios de administración remota de claves
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é debería utilizar un KMS remoto, consulte Razones para utilizar un sistema de administración de claves remotas.
Para ver una lista de todos los proveedores de KMS compatibles, consulte la página Proveedores de 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. Reencapsula las claves sin problemas con la nueva CMK especificada, sin interrumpir la aplicación. Las DEK se mantienen intactas tras reencapsularlas con la nueva CMK.
Para obtener detalles sobre la rotación de claves, consulte Rotar claves de cifrado.
Colecciones de Key Vault
Su colección Key Vault es la colección de MongoDB que utiliza para almacenar documentos de clave de cifrado de datos(DEK) cifrados. Los documentosDEK son documentos BSON que contienen DEK 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 a crear una colección MongoDB, consulte Bases de datos y colecciones.
Tip
Característica de mongosh
El mongosh KeyVault.createKey() El método crea automáticamente un índice único en el keyAltNames campo si no existe ninguno.
Para ver diagramas que detallan cómo interactúan su colección DEK, CMK y Key Vault en todas las arquitecturas de proveedores de KMS compatibles, consulte Proveedores de KMS.
Nombre de la colección Key Vault
Puede usar cualquier espacio de nombres que no sea de administrador para almacenar su colección de Key Vault. Por convención, los ejemplos de esta documentación usan el encryption.__keyVault espacio de nombres.
Advertencia
No utilice la base de datos admin para almacenar colecciones relacionadas con el cifrado. Si utiliza la base de datos de administración para esta colección, es posible que su cliente MongoDB no pueda acceder ni descifrar sus datos por falta de permisos.
Permisos
Las aplicaciones con acceso a la colección read Key Vault pueden recuperar claves de cifrado de datos (DEK) cifradas consultando la colección. Sin embargo, solo las aplicaciones con acceso a la clave maestra del cliente (CMK) utilizadapara cifrar una DEK pueden usarla para cifrar o descifrar. Debe conceder a su aplicación acceso tanto a la colección Key Vault como a su CMK 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 a su aplicación acceso a su clave maestra de cliente, consulte el tutorial Tutoriales de cifrado consultable.
Clúster de bóveda de claves
De forma predeterminada, MongoDB almacena la colección de Key Vault en el clúster conectado. MongoDB también permite alojar la colección de Key Vault en una implementación de MongoDB distinta a la del clúster conectado. Las aplicaciones deben tener acceso tanto al clúster que aloja la colección de Key Vault como al clúster de conexión para realizar operaciones de cifrado consultable.
Para especificar el clúster que aloja su colección de Key Vault, utilice el keyVaultClient campo del objeto de su MongoClient cliente. Para obtener más información sobre las opciones de configuración específicas del cifrado consultable en el MongoClient objeto de su cliente, consulte Opciones de MongoClient para el cifrado consultable.
Actualizar una colección de Key Vault
Para agregar un DEK a su colección de Key Vault, utilice el createKey método de un ClientEncryption objeto.
Para eliminar o actualizar una DEK, utilice uno de los siguientes mecanismos:
El método
rewrapManyDataKeyOperaciones CRUD estándar
Para obtener más información sobre el método rewrapManyDataKey, consulte la documentación del método para su cliente o controlador:
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, consulte el Inicio rápido de cifrado consultable o el Inicio rápido de CSFLE.