Docs Menu
Docs Home
/ /
Fundamentals

Gestión de colecciones cifradas

En esta guía, puedes aprender a gestionar tus colecciones cifradas y los costes de almacenamiento y escritura de Queryable Encryption.

El cifrado consultable presenta la capacidad de cifrar campos confidenciales en sus documentos mediante cifrado aleatorio, sin dejar de poder consultar los campos cifrados.

Con Queryable Encryption, un valor en texto sin formato dado siempre se cifra en un texto cifrado diferente, aunque sigue siendo consultable. Para habilitar esta funcionalidad, Queryable Encryption utiliza cuatro estructuras de datos:

  • Tres colecciones de metadatos

  • Un campo en cada documento de la colección cifrada llamado __safeContent__

Importante

Es fundamental que estas estructuras de datos no se modifiquen ni eliminen, o los resultados de la consulta serán incorrectos.

Cuando creas una colección cifrada usando Queryable Encryption, MongoDB crea tres colecciones de metadatos:

  • enxcol_.<collectionName>.esc, conocido como ESC

  • enxcol_.<collectionName>.ecc, conocido como ECC

  • enxcol_.<collectionName>.ecoc, conocido como ECOC

Ejemplo

Si crea una colección llamada "pacientes", MongoDB crea las siguientes colecciones de metadatos:

  • enxcol_.patients.esc

  • enxcol_.patients.ecc

  • enxcol_.patients.ecoc

Al insertar documentos con campos cifrados que desea consultar, MongoDB actualiza las colecciones de metadatos para mantener un índice que le permita realizar consultas. MongoDB lo denomina "campo indexado". Esto implica un consumo de almacenamiento y velocidad de escritura.

Los costos de almacenamiento y escritura aumentan según la cantidad de campos indexados por documento.

Importante

Vista previa técnica

La recomendación de MongoDB durante la vista previa técnica es esperar de dos a tres veces el requisito de almacenamiento para una colección de Queryable Encryption y las colecciones de metadatos asociadas. Por ejemplo, una colección de 1 GB puede requerir entre 2 y 3 GB de almacenamiento para las colecciones de metadatos asociadas.

Esta orientación será ajustada en una futura actualización.

Al insertar un documento, cada campo indexado requiere dos escrituras en colecciones de metadatos.

  • Uno escribe a ESC

  • Uno escribe a ECOC

Ejemplo

Para insertar un documento con dos campos indexados se requiere:

  • Un guardado en la colección cifrada.

  • Cuatro escrituras en las colecciones de metadatos.

Al actualizar un documento, cada campo indexado requiere cuatro escrituras en colecciones de metadatos.

  • Uno escribe a ESC

  • Uno escribe a ECC

  • Dos escrituras a ECOC

Ejemplo

Para actualizar un documento con dos campos indexados se requiere:

  • Un guardado en la colección cifrada.

  • Ocho escrituras en las colecciones de metadatos.

Al eliminar un documento, cada campo indexado requiere dos escrituras en las colecciones de metadatos.

  • Uno escribe a ECC

  • Uno escribe a ECOC

Ejemplo

Para eliminar un documento con dos campos indexados se requiere:

  • Una escritura en la colección cifrada.

  • Cuatro escrituras en las colecciones de metadatos.

Importante

Vista previa técnica

Es necesario ejecutar la compactación de índice durante la vista previa técnica. MongoDB planea ejecutar la compactación de índice automáticamente en una versión futura.

A medida que se insertan, actualizan y eliminan documentos, las colecciones de metadatos cambian y crecen. La compactación de índices es un proceso que reduce las colecciones de metadatos y su tamaño.

Debe ejecutar la compactación de índice cuando el tamaño de ECOC exceda 1 GB.

Puede comprobar el tamaño de sus colecciones utilizando y emitiendo mongosh el db.collection.totalSize() comando.

Ejemplo

En este ejemplo, la colección cifrada se llama "pacientes".

db.enxcol_.patients.ecoc.totalSize()
1407960328

Importante

Debe configurar su cliente para cifrado consultable para ejecutar la compactación de índice.

Para ejecutar la compactación de índice, utilice y ejecute mongosh el db.collection.compactStructuredEncryptionData() comando para reducir el tamaño de las colecciones de metadatos.

Ejemplo

const eDB = "encryption"
const eKV = "__keyVault"
const secretDB = "records"
const secretCollection = "patients"
const localKey = fs.readFileSync("master-key.txt")
const localKeyProvider = { key: localKey }
const queryableEncryptionOpts = {
kmsProviders: { local: localKeyProvider },
keyVaultNamespace: `${eDB}.${eKV}`,
}
const encryptedClient = Mongo("localhost:27017", queryableEncryptionOpts)
const encryptedDB = encryptedClient.getDB(secretDB)
const encryptedCollection = encryptedDB.getCollection(secretCollection)
encryptedCollection.compactStructuredEncryptionData()
{
"stats": {
...
},
"ok": 1,
...
}

Volver

Campos y consultas

En esta página