Al trabajar con un MongoDB Enterprise o el clúster de MongoDB Atlas, puedes usar mongosh configurar Queryable Encryption Cifrado a nivel de campo del lado del cliente y conectarse con soporte de cifrado. Tanto Queryable Encryption como CSFLE utilizan llaves de cifrado de datos para soportar el cifrado y descifrado de valores de campos, y almacenan este material de llave de cifrado en un Key Management Service (KMS).
mongosh soporta los siguientes proveedores de KMS para su uso con Queryable Encryption y CSFLE:
Amazon Web Services KMS
Azure Key Vault
Google Cloud Platform KMS
Archivo clave gestionado localmente
Crear una llave de cifrado de datos
El siguiente procedimiento utiliza mongosh para crear una llave de cifrado de datos para encriptación a nivel de campo.
Utilice las pestañas a continuación para seleccionar el KMS apropiado para tu implementación:
Inicia la mongosh Shell.
Cree una sesión mongosh sin conectarse a una base de datos en ejecución mediante el uso de --nodb opción:
mongosh --nodb
Crear la configuración de cifrado.
Configurar el cifrado a nivel de campo en el lado del cliente para el AWS KMS requiere un AWS Access Key ID y su correspondiente Secret Access Key. La clave de acceso de AWS debe corresponder a un usuario de IAM con todos los permisos de listar y leer para el servicio KMS.
En mongosh, cree una nueva variable AutoEncryptionOpts para almacenar la configuración de cifrado a nivel de campo del lado del cliente, que contiene estas credenciales:
var autoEncryptionOpts = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "aws" : { "accessKeyId" : "YOUR_AWS_ACCESS_KEY_ID", "secretAccessKey" : "YOUR_AWS_SECRET_ACCESS_KEY" } } }
Completa los valores de YOUR_AWS_ACCESS_KEY_ID y YOUR_AWS_SECRET_ACCESS_KEY según corresponda.
Conéctese con soporte de cifrado.
En mongosh, utiliza el constructor Mongo() para establecer una conexión de base de datos con el clúster objetivo. Especifica el documento AutoEncryptionOpts como el segundo parámetro del constructor Mongo() para configurar la conexión para el cifrado a nivel de campo del lado del cliente:
csfleDatabaseConnection = Mongo( "mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster", autoEncryptionOpts )
Reemplace la replaceMe.example.net URI con la cadena de conexión para el clúster de destino.
Cree el objeto Key Vault.
Crea el objeto keyVault utilizando el método de shell getKeyVault():
keyVault = csfleDatabaseConnection.getKeyVault();
Crea la llave de cifrado.
Crea la clave de cifrado de datos utilizando el método shell createKey() :
keyVault.createKey( "aws", { region: "regionname", key: "awsarn" }, [ "keyAlternateName" ] )
Dónde:
El primer parámetro debe ser
"aws"para especificar el KMS de Amazon Web Services configurado.El segundo parámetro debe ser un documento que contenga lo siguiente:
la región de AWS a la que se está conectando, como
us-west-2el nombre de recurso de Amazon (ARN) a la clave maestra de cliente (CMK) de AWS.
El tercer parámetro puede ser un arreglo de uno o más
keyAltNamespara la llave de cifrado de datos. Cada nombre alternativo de clave debe ser único.getKeyVault()crea un índice único enkeyAltNamespara aplicar la unicidad en el campo, si aún no existe. Los nombres alternativos de claves facilitan la localización de la clave de cifrado de datos.
Si tiene éxito, createKey() devuelve el UUID de la nueva llave de cifrado de datos. Para recuperar el nuevo documento de clave de cifrado de datos de la bóveda de claves, se puede:
Utilice para recuperar la
getKey()clave creada por su UUID, oUtilice
getKeyByAltName()para recuperar la clave por su nombre alternativo, si se especifica.
Inicia la mongosh Shell.
Cree una mongosh sesión sin conectarse a una base de datos en ejecución utilizando la --nodb opción:
mongosh --nodb
Crear la configuración de cifrado.
Configurar el cifrado a nivel de campo en el lado del cliente para Azure Key Vault requiere un ID de Tenant, un ID de Cliente y un Cliente Secreto válidos.
En mongosh, cree una nueva variable AutoEncryptionOpts para almacenar la configuración de cifrado a nivel de campo del lado del cliente, que contiene estas credenciales:
var autoEncryptionOpts = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "azure" : { "tenantId" : "YOUR_TENANT_ID", "clientId" : "YOUR_CLIENT_ID", "clientSecret" : "YOUR_CLIENT_SECRET" } } }
Complete los valores para YOUR_TENANT_ID, YOUR_CLIENT_ID y YOUR_CLIENT_SECRET según corresponda.
Conéctese con soporte de cifrado.
En mongosh, utiliza el constructor Mongo() para establecer una conexión de base de datos con el clúster objetivo. Especifica el documento AutoEncryptionOpts como el segundo parámetro del constructor Mongo() para configurar la conexión para el cifrado a nivel de campo del lado del cliente:
csfleDatabaseConnection = Mongo( "mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster", autoEncryptionOpts )
Reemplace la replaceMe.example.net URI con la cadena de conexión para el clúster de destino.
Cree el objeto Key Vault.
Crea el objeto keyVault utilizando el método de shell getKeyVault():
keyVault = csfleDatabaseConnection.getKeyVault();
Crea la llave de cifrado.
Crea la clave de cifrado de datos utilizando el método shell createKey() :
keyVault.createKey( "azure", { keyName: "keyvaultname", keyVaultEndpoint: "endpointname" }, [ "keyAlternateName" ] )
Dónde:
El primer parámetro debe ser
"azure"para especificar el Azure Key Vault configurado.El segundo parámetro debe ser un documento que contenga:
el nombre de tu Azure Key Vault
el nombre DNS de Azure Key Vault que se va a usar (por ejemplo,
my-key-vault.vault.azure.net)
El tercer parámetro puede ser un arreglo de uno o más
keyAltNamespara la llave de cifrado de datos. Cada nombre alternativo de clave debe ser único.getKeyVault()crea un índice único enkeyAltNamespara aplicar la unicidad en el campo, si aún no existe. Los nombres alternativos de claves facilitan la localización de la clave de cifrado de datos.
Si tiene éxito, createKey() devuelve el UUID de la nueva llave de cifrado de datos. Para recuperar el nuevo documento de clave de cifrado de datos de la bóveda de claves, se puede:
Utilice para recuperar la
getKey()clave creada por su UUID, oUtilice
getKeyByAltName()para recuperar la clave por su nombre alternativo, si se especifica.
Inicia la mongosh Shell.
Cree una mongosh sesión sin conectarse a una base de datos en ejecución utilizando la --nodb opción:
mongosh --nodb
Crear la configuración de cifrado.
La configuración del cifrado a nivel de campo del lado del cliente para el GCP KMS requiere el correo electrónico de GCP y su llave privada asociada.
En mongosh, cree una nueva variable AutoEncryptionOpts para almacenar la configuración de cifrado a nivel de campo del lado del cliente, que contiene estas credenciales:
var autoEncryptionOpts = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "gcp" : { "email" : "YOUR_GCP_EMAIL", "privateKey" : "YOUR_GCP_PRIVATEKEY" } } }
Completa los valores de YOUR_GCP_EMAIL y YOUR_GCP_PRIVATEKEY según corresponda.
Conéctese con soporte de cifrado.
En mongosh, utiliza el constructor Mongo() para establecer una conexión de base de datos con el clúster objetivo. Especifica el documento AutoEncryptionOpts como el segundo parámetro del constructor Mongo() para configurar la conexión para el cifrado a nivel de campo del lado del cliente:
csfleDatabaseConnection = Mongo( "mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster", autoEncryptionOpts )
Reemplace la replaceMe.example.net URI con la cadena de conexión para el clúster de destino.
Cree el objeto Key Vault.
Crea el objeto keyVault utilizando el método de shell getKeyVault():
keyVault = csfleDatabaseConnection.getKeyVault();
Crea la llave de cifrado.
Crea la clave de cifrado de datos utilizando el método shell createKey() :
keyVault.createKey( "gcp", { projectId: "projectid", location: "locationname", keyRing: "keyringname", keyName: "keyname" }, [ "keyAlternateName" ] )
Dónde:
El primer parámetro debe ser
"gcp"para especificar el Google Cloud KMS configurado.El segundo parámetro debe ser un documento que contenga
projectides el nombre de tu proyecto GCP, comomy-projectlocationnamees la ubicación del llavero KMS, comoglobalkeyringnamees el nombre del llavero KMS, comomy-keyringkeynamees el nombre de tu clave.
El tercer parámetro puede ser un arreglo de uno o más
keyAltNamespara la llave de cifrado de datos. Cada nombre alternativo de clave debe ser único.getKeyVault()crea un índice único enkeyAltNamespara aplicar la unicidad en el campo, si aún no existe. Los nombres alternativos de claves facilitan la localización de la clave de cifrado de datos.
Si tiene éxito, createKey() devuelve el UUID de la nueva llave de cifrado de datos. Para recuperar el nuevo documento de clave de cifrado de datos de la bóveda de claves, se puede:
Utilice para recuperar la
getKey()clave creada por su UUID, oUtilice
getKeyByAltName()para recuperar la clave por su nombre alternativo, si se especifica.
Inicia la mongosh Shell.
Cree una mongosh sesión sin conectarse a una base de datos en ejecución utilizando la --nodb opción:
mongosh --nodb
Generar una clave de cifrado.
Para configurar el cifrado a nivel de campo del lado del cliente para una clave administrada localmente, debe especificar una cadena de 96bytes codificada en base64sin saltos de línea. Ejecute el siguiente comando en mongosh para generar una clave que cumpla estos requisitos:
crypto.randomBytes(96).toString('base64')
Necesitarás esta clave en el siguiente paso.
Crear la configuración de cifrado.
En mongosh, crea una nueva variable AutoEncryptionOpts para almacenar la configuración de cifrado a nivel de campo del lado del cliente, reemplazando MY_LOCAL_KEY con la clave generada en el paso 1:
var autoEncryptionOpts = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "local" : { "key" : BinData(0, "MY_LOCAL_KEY") } } }
Conéctese con soporte de cifrado.
En mongosh, utiliza el constructor Mongo() para establecer una conexión de base de datos con el clúster objetivo. Especifica el documento AutoEncryptionOpts como el segundo parámetro del constructor Mongo() para configurar la conexión para el cifrado a nivel de campo del lado del cliente:
csfleDatabaseConnection = Mongo( "mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster", autoEncryptionOpts )
Cree el objeto Key Vault.
Crea el objeto keyVault utilizando el método de shell getKeyVault():
keyVault = csfleDatabaseConnection.getKeyVault();
Crea la llave de cifrado.
Crea la clave de cifrado de datos utilizando el método shell createKey() :
keyVault.createKey( "local", [ "keyAlternateName" ] )
Dónde:
El primer parámetro debe ser
localpara especificar la Clave gestionada localmente configurada.El segundo parámetro puede ser un arreglo de una o más
keyAltNamespara la llave de cifrado de datos. Cada nombre alternativo de clave debe ser único.getKeyVault()crea un índice único enkeyAltNamespara aplicar la unicidad en el campo si aún no existe uno. Los nombres alternativos clave facilitan la localización de llave de cifrado de datos.
Si tiene éxito, createKey() devuelve el UUID de la nueva llave de cifrado de datos. Para recuperar el nuevo documento de clave de cifrado de datos de la bóveda de claves, se puede:
Utilice para recuperar la
getKey()clave creada por su UUID, oUtilice
getKeyByAltName()para recuperar la clave por su nombre alternativo, si se especifica.