Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

Llaves y bóvedas de claves

En esta guía, puedes aprender detalles sobre los siguientes componentes del cifrado a nivel de campo del lado del cliente (CSFLE):

  • 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 consultar guías paso a paso que demuestren cómo utilizar los componentes anteriores para configurar un cliente habilitado con CSFLE, consulta los siguientes recursos:

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.

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.

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:

1db.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]

Encadena cursor.firstBatch al comando listIndexes para devolver solo la información de índice, incluyendo las claves y opciones utilizadas para crear el índice. La salida muestra que el campo keyAltNames tiene un índice único denominado keyAltNames_1.

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

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 que detallan cómo su DEK, llave maestra de cliente y su Colección de Bóvedas de Llaves interactúan en todas las arquitecturas de proveedores de KMS con soporte, consulta CSFLE Proveedores de KMS.

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.

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 a tu aplicación acceso a tu llave maestra de cliente, consulta el tutorial Tutoriales CSFLE.

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 la Colección de Bóvedas de Llaves, utiliza el campo keyVaultClient del objeto MongoClient de tu cliente. Para aprender más acerca de las opciones de configuración específicas de CSFLE en el objeto MongoClient de tu cliente, consulta Opciones específicas de MongoClient para CSFLE.

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 rewrapManyDataKey

  • Standard 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

Para ver un tutorial que muestra cómo crear una DEK, consulta la Guía rápida.

Volver

cifrado explícito

En esta página