Cuando se trabaja con un En un clústerMongoDB Enterprise o MongoDB Atlas, puede utilizar mongosh Para configurar el cifrado de campo del lado del cliente de Queryable Encryption y conectar con el soporte de cifrado. Tanto Queryable Encryption como CSFLE utilizan claves de cifrado de datos para el cifrado y descifrado de valores de campo, y almacenan este material en un Servicio de Administración de Claves (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 de claves administrado localmente
Crear una llave de cifrado de datos
El siguiente procedimiento utiliza mongosh para crear una clave de cifrado de datos para el cifrado a nivel de campo.
Utilice las pestañas a continuación para seleccionar el KMS apropiado para su implementación:
Inicie el 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.
La configuración del cifrado a nivel de campo del lado del cliente para AWS KMS requiere un ID de clave de acceso de AWS y su clave de acceso secreta asociada. La clave de acceso de AWS debe corresponder a un usuario de IAM con todos los permisos de lista y lectura para el servicio KMS.
mongoshEn, 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" } } }
Complete los valores para YOUR_AWS_ACCESS_KEY_ID y YOUR_AWS_SECRET_ACCESS_KEY según corresponda.
Conéctese con el soporte de cifrado.
mongoshEn, utilice el constructor para establecer una conexión de base de Mongo() datos con el clúster de destino. Especifique el documento AutoEncryptionOpts como segundo parámetro del Mongo() constructor para configurar la conexión para el cifrado 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.
Crear el objeto Key Vault.
Cree el keyVault objeto utilizando el getKeyVault() método de shell:
keyVault = csfleDatabaseConnection.getKeyVault();
Crear la clave de cifrado.
Cree la clave de cifrado de datos utilizando el createKey() método de shell:
keyVault.createKey( "aws", { region: "regionname", key: "awsarn" }, [ "keyAlternateName" ] )
Donde:
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 del cliente de AWS (CMK).
El tercer parámetro puede ser una matriz de uno o más
keyAltNamespara la clave de cifrado de datos. Cada nombre alternativo de clave debe ser único.getKeyVault()crea un índice único enkeyAltNamespara garantizar la unicidad del campo si no existe uno. Los nombres alternativos de clave facilitan la localización de la clave de cifrado de datos.
Si la operación es correcta, createKey() devuelve el UUID de la nueva clave de cifrado de datos. Para recuperar el nuevo documento de clave de cifrado de datos del almacén de claves, realice una de las siguientes acciones:
Utilice para recuperar la
getKey()clave creada por su UUID, oUtilice para recuperar la clave por su nombre alternativo, si se
getKeyByAltName()especifica.
Inicie el 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.
Para configurar el cifrado a nivel de campo del lado del cliente para Azure Key Vault se requiere un identificador de inquilino, un identificador de cliente y un secreto de cliente válidos.
mongoshEn, 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 el soporte de cifrado.
mongoshEn, utilice el constructor para establecer una conexión de base de Mongo() datos con el clúster de destino. Especifique el documento AutoEncryptionOpts como segundo parámetro del Mongo() constructor para configurar la conexión para el cifrado 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.
Crear el objeto Key Vault.
Cree el keyVault objeto utilizando el getKeyVault() método de shell:
keyVault = csfleDatabaseConnection.getKeyVault();
Crear la clave de cifrado.
Cree la clave de cifrado de datos utilizando el createKey() método de shell:
keyVault.createKey( "azure", { keyName: "keyvaultname", keyVaultEndpoint: "endpointname" }, [ "keyAlternateName" ] )
Donde:
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 su Azure Key Vault
el nombre DNS de Azure Key Vault que se utilizará (por ejemplo,
my-key-vault.vault.azure.net)
El tercer parámetro puede ser una matriz de uno o más
keyAltNamespara la clave de cifrado de datos. Cada nombre alternativo de clave debe ser único.getKeyVault()crea un índice único enkeyAltNamespara garantizar la unicidad del campo si no existe uno. Los nombres alternativos de clave facilitan la localización de la clave de cifrado de datos.
Si la operación es correcta, createKey() devuelve el UUID de la nueva clave de cifrado de datos. Para recuperar el nuevo documento de clave de cifrado de datos del almacén de claves, realice una de las siguientes acciones:
Utilice para recuperar la
getKey()clave creada por su UUID, oUtilice para recuperar la clave por su nombre alternativo, si se
getKeyByAltName()especifica.
Inicie el 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.
Para configurar el cifrado a nivel de campo del lado del cliente para GCP KMS se requiere su correo electrónico de GCP y su clave privada asociada.
mongoshEn, 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" } } }
Complete los valores para YOUR_GCP_EMAIL y YOUR_GCP_PRIVATEKEY según corresponda.
Conéctese con el soporte de cifrado.
mongoshEn, utilice el constructor para establecer una conexión de base de Mongo() datos con el clúster de destino. Especifique el documento AutoEncryptionOpts como segundo parámetro del Mongo() constructor para configurar la conexión para el cifrado 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.
Crear el objeto Key Vault.
Cree el keyVault objeto utilizando el getKeyVault() método de shell:
keyVault = csfleDatabaseConnection.getKeyVault();
Crear la clave de cifrado.
Cree la clave de cifrado de datos utilizando el createKey() método de shell:
keyVault.createKey( "gcp", { projectId: "projectid", location: "locationname", keyRing: "keyringname", keyName: "keyname" }, [ "keyAlternateName" ] )
Donde:
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 su proyecto de GCP, como por ejemplomy-projectlocationnamees la ubicación del llavero KMS, comoglobalkeyringnamees el nombre del llavero KMS, como por ejemplomy-keyringkeynamees el nombre de tu clave.
El tercer parámetro puede ser una matriz de uno o más
keyAltNamespara la clave de cifrado de datos. Cada nombre alternativo de clave debe ser único.getKeyVault()crea un índice único enkeyAltNamespara garantizar la unicidad del campo si no existe uno. Los nombres alternativos de clave facilitan la localización de la clave de cifrado de datos.
Si la operación es correcta, createKey() devuelve el UUID de la nueva clave de cifrado de datos. Para recuperar el nuevo documento de clave de cifrado de datos del almacén de claves, realice una de las siguientes acciones:
Utilice para recuperar la
getKey()clave creada por su UUID, oUtilice para recuperar la clave por su nombre alternativo, si se
getKeyByAltName()especifica.
Inicie el 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.
mongoshEn, cree 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 1 paso:
var autoEncryptionOpts = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "local" : { "key" : BinData(0, "MY_LOCAL_KEY") } } }
Conéctese con el soporte de cifrado.
mongoshEn, utilice el constructor para establecer una conexión de base de Mongo() datos con el clúster de destino. Especifique el documento AutoEncryptionOpts como segundo parámetro del Mongo() constructor para configurar la conexión para el cifrado de campo del lado del cliente:
csfleDatabaseConnection = Mongo( "mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster", autoEncryptionOpts )
Crear el objeto Key Vault.
Cree el keyVault objeto utilizando el getKeyVault() método de shell:
keyVault = csfleDatabaseConnection.getKeyVault();
Crear la clave de cifrado.
Cree la clave de cifrado de datos utilizando el createKey() método de shell:
keyVault.createKey( "local", [ "keyAlternateName" ] )
Donde:
El primer parámetro debe ser
localpara especificar la clave administrada localmente configurada.El segundo parámetro puede ser una matriz de uno o más
keyAltNamespara la clave de cifrado de datos. Cada nombre alternativo de clave debe ser único. crea un índice únicogetKeyVault()enkeyAltNamespara garantizar la unicidad del campo si no existe uno. Los nombres alternativos de clave facilitan la localización de la clave de cifrado de datos.
Si la operación es correcta, createKey() devuelve el UUID de la nueva clave de cifrado de datos. Para recuperar el nuevo documento de clave de cifrado de datos del almacén de claves, realice una de las siguientes acciones:
Utilice para recuperar la
getKey()clave creada por su UUID, oUtilice para recuperar la clave por su nombre alternativo, si se
getKeyByAltName()especifica.