Nota
Característica de la empresa
La función automática de cifrado a nivel de campo solo está disponible en los clústeres MongoDB Enterprise 4.2 o posterior y MongoDB Atlas 4.2 o posterior.
El cifrado automático a nivel de campo del lado del cliente requiere reglas especificadas por el usuario que identifican qué campos deben cifrarse y cómo hacerlo. Las aplicaciones deben especificar las reglas de cifrado automático utilizando un subconjunto estricto de la sintaxis estándar del borrador del esquema JSON.4 y las siguientes palabras clave específicas de cifrado:
encryptPalabra clave de esquema: especifica las opciones de cifrado a utilizar al cifrar el campo actual.encryptMetadataPalabra clave de esquema: especifica opciones de cifrado heredables.
Considere una base de datos MongoDB donde la colección employees en la base de datos hr contiene documentos que se parecen a los siguientes:
{ "fname" : "Jo", "lname" : "Doe", "taxid" : "123-45-6789", "taxid-short" : "6789" }
Los taxid taxid-short campos y contienen información de identificación personal (PII) que debe protegerse contra la visualización no autorizada tanto en el cliente como en el servidor. Las siguientes reglas de cifrado automático para la hr.employees colección marcan los taxid taxid-short campos y para el cifrado automático a nivel de campo del lado del cliente.4.2Compatible oficialmente con MongoDB +. Loscontroladores, mongosh 4.2 mongo y el shell heredado o posterior configurados con estas reglas cifran automáticamente los taxid taxid-short campos y para operaciones de escritura o lectura en la hr.employees colección.
{ "hr.employees": { "bsonType": "object", "properties": { "taxid": { "encrypt": { "keyId": [UUID("11d58b8a-0c6c-4d69-a0bd-70c6d9befae9")], "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512_Random", "bsonType" : "string" } }, "taxid-short": { "encrypt": { "keyId": [UUID("2ee77064-5cc5-45a6-92e1-7de6616134a8")], "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", "bsonType": "string" } } } } }
Para el shell de MongoDB, use el
Mongo()constructor para crear la conexión a la base de datos con las reglas de cifrado automático incluidas en el objeto de configuración de cifrado a nivel de campo del lado del cliente. Consulte "Conectarse a un clúster con el cifrado automático del lado del cliente habilitado" para ver un ejemplo.Para los controladores oficiales de MongoDB, utilice el constructor de conexión de base de datos específico del controlador (p. ej.,)
MongoClientpara crear la conexión con las reglas de cifrado automático incluidas en el objeto de configuración de cifrado a nivel de campo del lado del cliente. Consulte la referencia de la API del controlador para obtener documentación y tutoriales más completos.
Importante
El cifrado automático a nivel de campo del lado del cliente admite un subconjunto estricto de la sintaxis del esquema JSON únicamente para definir el comportamiento del cifrado.No especifique palabras clave de validación de documentos en las reglas de cifrado automático. Para definir reglas de validación de documentos, configure la validación del esquema del lado del servidor.
encrypt Schema Keyword
"bsonType" : "object", "properties" : { "<fieldName>" : { "encrypt" : { "algorithm" : "<string>", "bsonType" : "<string>" | [ "<string>" ], "keyId" : [ <UUID> ] } } }
encryptObjeto
Indica que
<fieldName>debe estar cifrado. El objetoencryptcumple los siguientes requisitos:encryptno puede haber ningún campo hermano en el objeto<fieldName>.encryptdebe ser el único hijo del objeto<fieldName>.encryptNo se puede especificar dentro de ningún subesquema de las palabras claveitemsoadditionalItems. En concreto, el cifrado automático a nivel de campo del lado del cliente no admite el cifrado de elementos individuales de una matriz.
El
encryptobjeto solo puede contener los siguientes campos:Incluir cualquier otro campo en el objeto
encryptgenera errores al emitir operaciones de lectura o escritura cifradas automáticamente.Si se omiten
keyIdoalgorithm, la biblioteca compartida de cifrado automático verifica el árbol completo de campos principales e intenta construir esas opciones a partir del objetoencryptMetadatamás cercano que especifique la opción.bsonTypeno se puede heredar y puede ser necesario según el valor dealgorithm.Si la biblioteca compartida de cifrado automático no puede construir el objeto
encryptcompleto utilizando los campos especificados para el objeto y cualquier clave heredadaencryptMetadatarequerida, el cifrado automático falla y devuelve un error.
encrypt.algorithmString
Indica el algoritmo de cifrado que se debe usar al cifrar valores
<fieldName>de.Solo admite los siguientes algoritmos:AEAD_AES_256_CBC_HMAC_SHA_512-RandomAEAD_AES_256_CBC_HMAC_SHA_512-Deterministic
Para obtener documentación completa sobre los algoritmos de cifrado, consulte Algoritmos de cifrado.
Si se omite, la biblioteca compartida de cifrado automático busca en el árbol completo de campos principales la clave más cercana
encryptMetadata.algorithmy hereda ese valor. Si no existe una clavealgorithmprincipal, el cifrado automático a nivel de campo falla y devuelve un error.Si
encrypt.algorithmo su valor heredadoAEAD_AES_256_CBC_HMAC_SHA_512-Deterministices, elencryptobjeto requiere elencrypt.bsonTypecampo.Si
encrypt.algorithmo su valor heredadoAEAD_AES_256_CBC_HMAC_SHA_512-Randomes, elencryptobjeto puede incluir elencrypt.bsonTypecampo.
encrypt.bsonTypeCadena | Matriz de cadenas
El tipo BSON del campo que se va a cifrar. Obligatorio si
encrypt.algorithmAEAD_AES_256_CBC_HMAC_SHA_512-Deterministices.Si o su valor
encrypt.algorithmheredadoAEAD_AES_256_CBC_HMAC_SHA_512-Deterministices,bsonTypedebe especificar un solo tipo.bsonTypeno admite ninguno de los siguientes tipos BSON con el algoritmo de cifrado determinista:doubledecimal128boolobjectarray
Si o su valor
encrypt.algorithmheredadoAED_AES_256_CBC_HMAC_SHA_512-Randomes,bsonTypees opcional y puede especificar una matriz de tipos bson compatibles. Para los campos con,bsonTypearrayobjectu, el cliente cifra la matriz u objeto completo, no sus elementos individuales.encrypt.bsonTypeno admite los siguientes tipos independientemente de o su valorencrypt.algorithmheredado:minKeymaxKeynullundefined
encrypt.keyIdMatriz de UUID único
El UUID de la clave de cifrado de datos que se usará para cifrar los valores de campo. El UUID es un elemento de datos binarios BSON del
4subtipo.Especifique una cadena dentro de la matriz.
Si se omite, la Biblioteca Compartida de Cifrado Automático busca en el árbol completo de campos principales la clave más cercana
encryptMetadata.keyIdy hereda ese valor. Si no existe una clavekeyIdprincipal, el cifrado automático a nivel de campo falla y devuelve un error.El valor o
keyIdsu valor heredado debe existir en el almacén de claves especificado como parte de las opciones de configuración del cifrado automático. Si la clave de cifrado de datos especificada no existe, el cifrado automático falla.Los controladores oficiales de MongoDB tienen requisitos específicos del lenguaje para especificar el UUID. Consulte la documentación del controlador para obtener información completa sobre la implementación del cifrado a nivel de campo del lado del cliente.
encryptMetadata Schema Keyword
{ "bsonType" : "object", "encryptMetadata" : { "algorithm" : "<string>", "keyId" : [ <UUID> ] }, "properties" : { "encrypt" : {} } }
encryptMetadataObjeto
Define las opciones de cifrado que un
encryptobjeto anidado en su hermanopropertiespuede heredar. Si a unencryptle falta una opción necesaria para el cifrado, la Biblioteca Compartida de Cifrado Automático busca en todo el árbol de objetos padre para encontrar un objeto que especifique la opción queencryptMetadatafalta.encryptMetadatadebe especificarse en subschemas conbsonType: "object".encryptMetadatano puede especificarse a ningún subschema de las palabras claveitemsoadditionalItems. En concreto, el cifrado automático a nivel de campo del lado del cliente no admite cifrar elementos individuales de un arreglo.El
encryptMetadataobjeto solo puede contener los siguientes campos. Incluir cualquier otro campo en elencryptobjeto genera errores al ejecutar operaciones de lectura o escritura cifradas automáticamente:
encryptMetadata.algorithmString
El algoritmo de cifrado que se utiliza para cifrar un campo determinado. Si
encrypta un objeto le falta el campo, la Biblioteca Compartida de Cifrado Automático buscaalgorithmencryptMetadataenencryptMetadata.algorithmtodo el árbolde objetos principales para encontrar un objeto que especifique.Admite únicamente los siguientes algoritmos:
AEAD_AES_256_CBC_HMAC_SHA_512-RandomAEAD_AES_256_CBC_HMAC_SHA_512-Deterministic
Para obtener documentación completa sobre los algoritmos de cifrado, consulte Algoritmos de cifrado.
Si se
AEAD_AES_256_CBC_HMAC_SHA_512-Deterministicespecifica, cualquierencryptobjeto que herede ese valor debeencrypt.bsonTypeespecificar.
encryptMetadata.keyIdMatriz de UUID único
El UUID de una clave de cifrado de datos. El UUID es un elemento BSON datos binarios de subtipo
4.Especifique una cadena dentro de la matriz.
Si a un objeto
encryptle falta el campo, la biblioteca compartida de cifrado automático buscakeyIdencryptMetadataenencryptMetadata.keyIdtodo el árbolde objetos principales para localizar un objeto que especifique.La clave de cifrado de datos debe existir en el almacén de claves especificado como parte de las opciones de configuración del cifrado automático. Estas opciones también deben incluir el acceso adecuado al Servicio de administración de claves (KMS) y a la Clave maestra del cliente (CMK) utilizados para crear la clave de datos. El cifrado automático falla si la clave de cifrado de datos no existe o si el cliente no puede descifrarla con el KMS y la CMK especificados.
Los controladores oficiales de MongoDB tienen requisitos específicos del lenguaje para especificar el UUID. Consulte la documentación del controlador para obtener información completa sobre la implementación del cifrado a nivel de campo del lado del cliente.
Ejemplos
Cifrar automáticamente varios campos
Considere una colección MedCo.patients donde cada documento tiene la siguiente estructura:
{ "fname" : "<String>", "lname" : "<String>", "passportId" : "<String>", "bloodType" : "<String>", "medicalRecords" : [ {<object>} ], "insurance" : { "policyNumber" : "<string>", "provider" : "<string>" } }
Los siguientes campos contienen información de identificación personal (PII) que puede consultarse:
passportIdbloodTypeinsurance.policyNumberinsurance.provider
Los siguientes campos contienen información de identificación personal (PII) protegida legalmente que nunca podrá ser consultada:
medicalRecords
El algoritmo de cifrado aleatorio garantiza que la salida cifrada de un valor sea siempre única. Esto evita que las consultas de un valor de campo específico devuelvan resultados significativos, a la vez que garantiza la máxima protección del contenido del campo. Por lo tanto, el algoritmo de cifrado aleatorio cumple con los requisitos de cifrado y consultabilidad de los datos.
El siguiente esquema especifica reglas de cifrado automático que cumplen los requisitos anteriores para la colección MedCo.patients:
{ "MedCo.patients" : { "bsonType" : "object", "properties" : { "passportId" : { "encrypt" : { "keyId" : [UUID("bffb361b-30d3-42c0-b7a4-d24a272b72e3")], "algorithm" : "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", "bsonType" : "string" } }, "bloodType" : { "encrypt" : { "keyId" : [UUID("bffb361b-30d3-42c0-b7a4-d24a272b72e3")], "algorithm" : "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", "bsonType" : "string" } }, "medicalRecords" : { "encrypt" : { "keyId" : [UUID("f3821212-e697-4d65-b740-4a6791697c6d")], "algorithm" : "AEAD_AES_256_CBC_HMAC_SHA_512-Random", "bsonType" : "array" } }, "insurance" : { "bsonType" : "object", "properties" : { "policyNumber" : { "encrypt" : { "keyId" : [UUID("bffb361b-30d3-42c0-b7a4-d24a272b72e3")], "algorithm" : "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", "bsonType" : "string" } }, "provider" : { "encrypt" : { "keyId" : [UUID("bffb361b-30d3-42c0-b7a4-d24a272b72e3")], "algorithm" : "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", "bsonType" : "string" } } } } } } }
Las reglas de cifrado automático anteriores marcan los campos passportId, bloodType, insurance.policyNumber, insurance.provider y medicalRecords para el cifrado.
Los campos
passportId,bloodType,insurance.policyNumberyproviderrequieren cifrado determinista utilizando la clave especificada.El campo
medicalRecordsrequiere cifrado aleatorio utilizando la clave especificada.
Aunque el cifrado en el lado del cliente a nivel de campo no soporta el cifrado de elementos individuales de un arreglo, el cifrado aleatorio admite el cifrado de todo el campo de arreglo en lugar de elementos individuales del campo. Las reglas de cifrado automático de ejemplo especifican el cifrado aleatorio para el campo medicalRecords para cifrar todo el arreglo. Si las reglas de cifrado automático especifican encrypt o encryptMetadata dentro de medicalRecords.items o medicalRecords.additionalItems, el cifrado automático a nivel de campo falla y devuelve errores.
Los 4.2controladores oficiales compatibles conmongosh MongoDB +,, y el 4.2 shell heredado o posterior mongo requieren la especificación de las reglas de cifrado automático como parte de la creación del objeto de conexión de base de datos:
mongoshPara, use el constructor para crear una conexión a la base de datos. Especifique las reglas de cifrado automático enMongo()laschemaMapclave del parámetro. Consulte "Conectarse a un clúster conClientSideFieldLevelEncryptionOptionsel cifrado automático del lado del cliente habilitado" para ver un ejemplo completo.Para los 4.2controladores oficiales compatibles con MongoDB +, utilice el constructor de conexión de base de datos específico del controlador (p. ej.,)
MongoClientpara crear la conexión con las reglas de cifrado automático incluidas en el objeto de configuración de cifrado a nivel de campo del lado del cliente. Consulte la referencia de la API del controlador para obtener documentación y tutoriales más completos.
Para todos los clientes, los keyVault y kmsProviders especificados en el parámetro de cifrado a nivel de campo del lado del cliente deben otorgar acceso tanto a las claves de cifrado de datos especificadas en las reglas de cifrado automático como a la clave maestra del cliente utilizada para cifrar las claves de cifrado de datos.
Cifrar automáticamente varios campos con herencia
Considere una colección MedCo.patients donde cada documento tiene la siguiente estructura:
{ "fname" : "<String>", "lname" : "<String>", "passportId" : "<String>", "bloodType" : "<String>", "medicalRecords" : [ {<object>} ], "insurance" : { "policyNumber" : "<string>", "provider" : "<string>" } }
Los siguientes campos contienen datos privados que se pueden consultar:
passportIdbloodTypeinsurance.policyNumberinsurance.provider
Los siguientes campos contienen datos privados que nunca podrán ser consultados:
medicalRecords
El algoritmo de cifrado aleatorio garantiza que la salida cifrada de un valor sea siempre única. Esto evita que las consultas de un valor de campo específico devuelvan resultados significativos, a la vez que garantiza la máxima protección del contenido del campo. Por lo tanto, el algoritmo de cifrado aleatorio cumple con los requisitos de cifrado y consultabilidad de los datos.
El siguiente esquema especifica reglas de cifrado automático que cumplen los requisitos de cifrado para la colección MedCo.patients:
{ "MedCo.patients" : { "bsonType" : "object", "encryptMetadata" : { "keyId" : [UUID("6c512f5e-09bc-434f-b6db-c42eee30c6b1")], "algorithm" : "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" }, "properties" : { "passportId" : { "encrypt" : { "bsonType" : "string" } }, "bloodType" : { "encrypt" : { "bsonType" : "string" } }, "medicalRecords" : { "encrypt" : { "keyId" : [UUID("6c512f5e-09bc-434f-b6db-c42eee30c6b1")], "algorithm" : "AEAD_AES_256_CBC_HMAC_SHA_512-Random", "bsonType" : "array" } }, "insurance" : { "bsonType" : "object", "properties" : { "policyNumber" : { "encrypt" : { "bsonType" : "string" } }, "provider" : { "encrypt" : { "bsonType" : "string" } } } } } } }
Las reglas de cifrado automático anteriores marcan los campos passportId, bloodType, insurance.policyNumber, insurance.provider y medicalRecords para el cifrado.
Los
passportIdbloodTypeinsurance.policyNumberprovidercampos,, y heredan su configuración de cifrado delencryptMetadatacampo principal. En concreto, estos campos heredan losalgorithmvalores y que especifican el cifrado determinista con la clave de cifrado de datos especificada.keyIdEl campo
medicalRecordsrequiere cifrado aleatorio con la clave especificada. Las opcionesencryptanulan las especificadas en el campo principalencryptMetadata.
Aunque el cifrado en el lado del cliente a nivel de campo no soporta el cifrado de elementos individuales de un arreglo, el cifrado aleatorio admite el cifrado de todo el campo de arreglo en lugar de elementos individuales del campo. Las reglas de cifrado automático de ejemplo especifican el cifrado aleatorio para el campo medicalRecords para cifrar todo el arreglo. Si las reglas de cifrado automático especifican encrypt o encryptMetadata dentro de medicalRecords.items o medicalRecords.additionalItems, el cifrado automático a nivel de campo falla y devuelve errores.
Los 4.2controladores oficiales compatibles conmongosh MongoDB +,, y el 4.2 shell heredado o posterior mongo requieren la especificación de las reglas de cifrado automático como parte de la creación del objeto de conexión de base de datos:
mongoshPara, use el constructor para crear una conexión a la base de datos. Especifique las reglas de cifrado automático enMongo()laschemaMapclave del parámetro. Consulte "Conectarse a un clúster conClientSideFieldLevelEncryptionOptionsel cifrado automático del lado del cliente habilitado" para ver un ejemplo completo.Para los 4.2controladores oficiales compatibles con MongoDB +, utilice el constructor de conexión de base de datos específico del controlador (p. ej.,)
MongoClientpara crear la conexión con las reglas de cifrado automático incluidas en el objeto de configuración de cifrado a nivel de campo del lado del cliente. Consulte la referencia de la API del controlador para obtener documentación y tutoriales más completos.
Para todos los clientes, los keyVault y kmsProviders especificados en el parámetro de cifrado a nivel de campo del lado del cliente deben otorgar acceso tanto a las claves de cifrado de datos especificadas en las reglas de cifrado automático como a la clave maestra del cliente utilizada para cifrar las claves de cifrado de datos.