Nuevo en la versión 4.2.
Servicios de gestión de claves compatibles
El cifrado del lado del cliente a nivel de campo requiere un Key Management Service (KMS) para acceder a una llave maestra de cliente (CMK). MongoDB encripta automáticamente las claves de cifrado de datos utilizando la CMK especificada durante creación de llave de cifrado de datos.
Eliminar la llave maestra de cliente hace que todas las claves de cifrado de datos cifradas con esa llave maestra de cliente sean permanentemente ilegibles, lo cual a su vez hace que todos los valores cifrados con esas claves de cifrado de datos sean permanentemente ilegibles.
El cifrado a nivel de campo del lado del cliente es compatible con los siguientes proveedores de KMS:
Amazon Web Services KMS
IMPORTANTE: Para el soporte de AWS KMS, utilice mongosh, o el shell heredado de mongo de MongoDB 4.2.2 o posterior. El 4.2.0 y el 4.2.1 legacy mongo shell no admite el servicio AWS KMS debido a un cambio inesperado en el objeto de respuesta KMS. Ver SERVIDOR-44721 para más información.
El cifrado del lado del cliente de MongoDB es compatible con el uso de Amazon Web Services Key Management Service para cifrar y descifrar las llaves de cifrado de datos. Específicamente, MongoDB transmite de manera segura la clave de cifrado de datos a AWS KMS para cifrar o descifrar utilizando la Clave maestra de cliente (CMK) especificada. La llave maestra de cliente nunca sale de AWS KMS.
mongosh admite dos métodos para configurar el acceso a KMS de AWS:
Utiliza las opciones de línea de comandos de cifrado a nivel de campo en el lado del cliente, o
Use el constructor
Mongo()para crear una conexión de base de datos con las opciones de configuración KMS de AWS requeridas .
Configurar el acceso a un KMS de AWS requiere como mínimo un clave de acceso de AWS y su clave secreta correspondiente. El usuario de IAM asociado a la clave de acceso debe tener al menos una política con las siguientes acciones:
kms:Encrypt(referencia)kms:Decrypt(referencia)
Nota
Implementar el Principio de Mínimos Privilegios para el acceso a KMS
Considera configurar los roles de usuario de IAM de manera que MongoDB solo tenga acceso a las acciones y recursos necesarios para funcionar.
Por ejemplo, la siguiente política JSON limita las acciones requeridas a una sola llave maestra de cliente:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:Encrypt" ], "Resource": "arn:aws:kms:region:account:key/12a345b6-cd7e-8f9g-0h1i-jk23l45mn6o7" } ] }
Para obtener documentación completa sobre la gestión de claves de cifrado de datos con AWS KMS, consulte Gestionar claves de cifrado de datos y seleccione la pestaña "Amazon Web Services KMS".
Azure Key Vault
MongoDB cifrado del lado del cliente ofrece soporte para usar el Azure Key Vault Key Management Service para cifrar y descifrar claves de cifrado de datos. Específicamente, MongoDB transmite de forma segura la clave de cifrado de datos a Azure Key Vault para cifrar o descifrar utilizando la Clave Maestra del Cliente (CMK) especificada. La llave maestra de cliente nunca sale del Azure Key Vault.
mongosh permite especificar Azure Key Vault como un KMS usando el constructor Mongo() usando las opciones de configuración de KMS.
Para configurar el acceso a Azure Key Vault se requieren como mínimo un ID de inquilino de Azure, un ID de cliente y un secreto de cliente. El ID de inquilino debe permitir realizar las siguientes acciones:
wrap key(referencia)unwrap key(referencia)
Nota
MongoDB no es compatible con la autenticación de certificados de cliente de Azure (también conocida como autenticación mutua TLS).
Para obtener documentación completa sobre la administración de claves de cifrado de datos mediante Azure Key Vault, consulte Administrar claves de cifrado de datos y seleccione la pestaña "Azure Key Vault".
Google Cloud Platform KMS
El cifrado del lado del cliente de MongoDB soporta usar la Google Cloud KMS para cifrar y descifrar las llaves de cifrado de datos. Específicamente, MongoDB transfiere de manera segura la llave de cifrado de datos a Google Cloud KMS para cifrar o descifrar usando la llave maestra de cliente (llave maestra de cliente) especificada. La llave maestra de cliente nunca abandona el Google Cloud KMS.
mongosh permite especificar Google Cloud KMS como un KMS usando el constructor de Mongo() utilizando las opciones de configuración de KMS.
Configurar el acceso a Google Cloud KMS requiere como mínimo un correo electrónico de Google Cloud y la clave privada asociada. La cuenta de correo electrónico de Google Cloud debe tener los siguientes permisos de IAM para la llave privada especificada:
cloudkms.cryptoKeyVersions.useToEncryptcloudkms.cryptoKeyVersions.useToDecrypt
Estos permisos de IAM están incluidos en determinados roles predefinidos de Google Cloud o pueden incluirse en un rol personalizado de Google Cloud.
Para obtener documentación completa sobre la administración de claves de cifrado de datos con Google Cloud KMS, consulte Administrar claves de cifrado de datos y seleccione la pestaña "Google Cloud KMS".
Clave gestionada localmente
mongosh permite especificar una clave gestionada localmente como KMS utilizando el constructor Mongo(). La clave local debe ser una string de 96bytes de longitud.
Para obtener documentación completa sobre la administración de claves de cifrado de datos utilizando una clave administrada localmente, consulte Administrar claves de cifrado de datos y seleccione la pestaña "Archivo de clave local".
Almacén de llave de cifrado
El key vault es una colección que almacena llaves de cifrado de datos para su uso con cifrado a nivel de campo. Las claves de cifrado de datos se cifran mediante una clave maestra del cliente (CMK) gestionada a través de un sistema de gestión de claves (KMS).compatible.
mongosh Proporciona métodos asistentes para la gestión de claves de cifrado de datos:
Caso de uso | Métodos asistentes |
|---|---|
Recuperación de claves de cifrado de datos | |
Crear o modificar claves de cifrado de datos | |
Eliminación de claves de cifrado de datos | ImportanteLa remoción de una llave de cifrado de datos convierte en permanentemente ilegibles todos los campos cifrados mediante esa llave de cifrado de datos. |
Las aplicaciones con read acceso a la Colección de Bóvedas de Llaves pueden recuperar claves de cifrado de datos haciendo consultas en la colección. Sin embargo, solo las aplicaciones con acceso a la llave maestra de cliente utilizada para cifrar una clave de cifrado de datos pueden usar esa clave para el cifrado o descifrado.
De forma predeterminada, MongoDB almacena la colección del almacén de claves en el clúster conectado. MongoDB también permite especificar un clúster remoto como almacén de claves. Las aplicaciones deben tener acceso tanto al clúster del almacén de claves remoto como al clúster de conexión para realizar operaciones de cifrado a nivel de campo del lado del cliente.
Las claves de cifrado de datos tienen la siguiente estructura:
{ "_id" : UUID("<string>"), "keyMaterial" : BinData(0,"<encrypted binary data string>"), "creationDate" : ISODate("2019-08-20T15:45:02.575Z"), "updateDate" : ISODate("2019-08-20T15:45:02.575Z"), "status" : <int>, "version" : NumberLong(0), "masterKey" : { "provider" : "<string>", "key" : "<string>", "region" : "<string>", "endpoint" : "<string>" }, "keyAltNames" : [ "<string>" ] }
El cifrado a nivel de campo del lado del cliente depende de la unicidad de los valores keyAltNames. El método mongosh KeyVault.createKey() crea un índice único en keyAltNames si no existe uno. Las aplicaciones pueden usar el comando listIndexes en la Colección de Bóvedas de Llaves para comprobar si existe el índice único. Si el índice único no existe, las aplicaciones deben crearlo antes de gestionar la clave de cifrado de datos.
Para una documentación completa sobre la gestión de llaves de cifrado de datos, consulta Gestionar llaves de cifrado de datos.