Nuevo en la versión 4.2.
El cifrado a nivel de campo del lado del cliente utiliza claves de cifrado de datos para cifrar y descifrar. La mongosh método asistente
getKeyVault() devuelve un objeto de key vault para crear, modificar y borrar llaves de cifrado de datos.
Esta página documenta el cifrado a nivel de campo del lado del cliente usando mongosh, y no se refiere a ningún driver oficial compatible con MongoDB 4.2+. Consulta la documentación relevante para los métodos y la sintaxis específicos del controlador para la gestión de claves de cifrado de datos.
Crear una llave de cifrado de datos
El siguiente procedimiento utiliza mongosh para crear una llave de cifrado de datos que se utilizará con el cifrado y descifrado a nivel de campo del lado del cliente. Para obtener orientación sobre la gestión de claves de cifrado de datos utilizando un driver compatible con 4.2+, consulta la documentación del driver.
Utilice las pestañas a continuación para seleccionar el KMS apropiado para tu implementación:
Lanzar mongosh.
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.
Para mitigar el riesgo de que estas credenciales se filtren en los registros, el siguiente procedimiento pasa los valores a mongosh utilizando variables de entorno.
Primero, asegúrese de haber configurado las siguientes variables de entorno de acuerdo con la documentación de su plataforma:
AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY
A continuación, cree una sesión de mongosh utilizando las opciones de --eval, --shell, y --nodb:
mongosh --eval " var AWS_ACCESS_KEY_ID = '$AWS_ACCESS_KEY_ID' var AWS_SECRET_ACCESS_KEY = '$AWS_SECRET_ACCESS_KEY' " \ --shell --nodb
Este ejemplo abre mongosh sin conexión a una base de datos MongoDB. La opción --eval establece las variables AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY en mongosh al valor de las variables de entorno correspondientes. Las variables especificadas también son compatibles con el AWS CLI.
Crear la configuración de cifrado.
En mongosh, crea una nueva variable ClientSideFieldLevelEncryptionOptions para almacenar el documento de configuración de cifrado a nivel de campo del lado del cliente:
var ClientSideFieldLevelEncryptionOptions = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "aws" : { "accessKeyId" : AWS_ACCESS_KEY_ID, "secretAccessKey" : AWS_SECRET_ACCESS_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 de destino. Especifica el ClientSideFieldLevelEncryptionOptions documento como el segundo parámetro para el constructor Mongo() con el fin de configurar la conexión para el cifrado a nivel de campo lado del cliente:
csfleDatabaseConnection = Mongo( "mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster", ClientSideFieldLevelEncryptionOptions )
Reemplaza el replaceMe.example.net URI con la cadena de conexión para el clúster de destino.
Utiliza el objeto csfleDatabaseConnection para acceder a los métodos del shell de cifrado a nivel de campo del lado del cliente.
Para una documentación completa sobre cómo establecer conexiones de base de datos configuradas para el cifrado a nivel de campo del lado del cliente, consulta el Mongo() de referencia del constructor.
Cree el objeto Key Vault.
Utilice el método getKeyVault() en el objeto de conexión a la base de datos csfleDatabaseConnection para crear el objeto keyVault:
keyVault = csfleDatabaseConnection.getKeyVault();
Importante
El cifrado a nivel de campo en el lado del cliente depende de la unicidad de los nombres alternativos de la clave forzada por el servidor. getKeyVault() crea un índice único en keyAltNames si no existe uno. No elimines el índice único creado por getKeyVault().
Crear la llave de cifrado de datos.
Utiliza el método KeyVault.createKey() en el objeto keyVault para crear una nueva llave de cifrado de datos en el Key Vault:
keyVault.createKey( "aws", "arn:aws:kms:region:account:key/keystring", [ "keyAlternateName" ] )
Dónde:
El primer parámetro debe ser
"aws"para especificar el Amazon Web Services KMS configurado.El segundo parámetro debe ser el Nombre de recurso de Amazon (ARN) completo de la llave maestra de cliente (CMK). MongoDB utiliza la llave maestra de cliente especificada para cifrar la clave de cifrado de datos.
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 unicidad en el campo si aún no existe uno. Los nombres alternativos clave facilitan la localización de la llave de cifrado de datos.
Si tiene éxito, createKey(), se devuelve el UUID de la nueva llave de cifrado de datos. La UUID es un objeto BSON Binary (BinData) con subtipo 4 que identifica de manera única la clave de cifrado de datos. La string UUID es la representación hexadecimal de los datos binarios subyacentes.
Si estás proporcionando la clave de cifrado de datos a un driver oficial de MongoDB para configurar el cifrado automático a nivel de campo en el lado del cliente, debes utilizar la representación base64 del string UUID.
Puedes ejecutar la siguiente operación en mongosh para convertir una cadena hexadecimal UUID en su representación base64:
UUID("b4b41b33-5c97-412e-a02b-743498346079").base64()
Suministra el UUID de tu propia llave de cifrado de datos a este comando, según se devuelve desde createKey() arriba, o según se indica en Recupera una llave de cifrado de datos existente.
Lanzar mongosh.
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.
Para mitigar el riesgo de que estas credenciales se filtren en los registros, el siguiente procedimiento pasa los valores a mongosh utilizando variables de entorno.
Primero, asegúrese de haber configurado las siguientes variables de entorno de acuerdo con la documentación de su plataforma:
AZURE_TENANT_IDAZURE_CLIENT_IDAZURE_CLIENT_SECRET
A continuación, crea una sesión mongosh utilizando las opciones --eval, --shell y --nodb:
mongosh --eval " var AZURE_TENANT_ID = '$AZURE_TENANT_ID' var AZURE_CLIENT_ID = '$AZURE_CLIENT_ID' var AZURE_CLIENT_SECRET = '$AZURE_CLIENT_SECRET' " \ --shell --nodb
Este ejemplo abre mongosh sin conexión a una base de datos MongoDB. La opción --eval establece las variables AZURE_TENANT_ID, AZURE_CLIENT_ID y AZURE_CLIENT_SECRET en mongosh al valor de las variables de entorno correspondientes.
Crear la configuración de cifrado.
En mongosh, crea una nueva variable ClientSideFieldLevelEncryptionOptions para almacenar el documento de configuración de cifrado a nivel de campo del lado del cliente:
var ClientSideFieldLevelEncryptionOptions = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "azure" : { "tenantId" : AZURE_TENANT_ID, "clientId" : AZURE_CLIENT_ID, "clientSecret" : AZURE_CLIENT_SECRET } } }
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 de destino. Especifica el ClientSideFieldLevelEncryptionOptions documento como el segundo parámetro para el constructor Mongo() con el fin de configurar la conexión para el cifrado a nivel de campo lado del cliente:
csfleDatabaseConnection = Mongo( "mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster", ClientSideFieldLevelEncryptionOptions )
Reemplaza el replaceMe.example.net URI con la cadena de conexión para el clúster de destino.
Utiliza el objeto csfleDatabaseConnection para acceder a los métodos del shell de cifrado a nivel de campo del lado del cliente.
Para una documentación completa sobre cómo establecer conexiones de base de datos configuradas para el cifrado a nivel de campo del lado del cliente, consulta el Mongo() de referencia del constructor.
Cree el objeto Key Vault.
Utilice el método getKeyVault() en el objeto de conexión a la base de datos csfleDatabaseConnection para crear el objeto keyVault:
keyVault = csfleDatabaseConnection.getKeyVault();
Importante
El cifrado a nivel de campo en el lado del cliente depende de la unicidad de los nombres alternativos de la clave forzada por el servidor. getKeyVault() crea un índice único en keyAltNames si no existe uno. No elimines el índice único creado por getKeyVault().
Crear la llave de cifrado de datos.
Utiliza el método KeyVault.createKey() en el objeto keyVault para crear una nueva llave de cifrado de datos en el Key Vault:
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 unicidad en el campo si aún no existe uno. Los nombres alternativos clave facilitan la localización de la llave de cifrado de datos.
Si tiene éxito, createKey(), se devuelve el UUID de la nueva llave de cifrado de datos. La UUID es un objeto BSON Binary (BinData) con subtipo 4 que identifica de manera única la clave de cifrado de datos. La string UUID es la representación hexadecimal de los datos binarios subyacentes.
Si estás proporcionando la clave de cifrado de datos a un driver oficial de MongoDB para configurar el cifrado automático a nivel de campo en el lado del cliente, debes utilizar la representación base64 del string UUID.
Puedes ejecutar la siguiente operación en mongosh para convertir una cadena hexadecimal UUID en su representación base64:
UUID("b4b41b33-5c97-412e-a02b-743498346079").base64()
Suministra el UUID de tu propia llave de cifrado de datos a este comando, según se devuelve desde createKey() arriba, o según se indica en Recupera una llave de cifrado de datos existente.
Lanzar mongosh.
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.
Para mitigar el riesgo de que estas credenciales se filtren en los registros, el siguiente procedimiento pasa los valores a mongosh utilizando variables de entorno.
Primero, asegúrese de haber configurado las siguientes variables de entorno de acuerdo con la documentación de su plataforma:
GCP_EMAILGCP_PRIVATEKEY
A continuación, crea una sesión mongosh utilizando las opciones --eval, --shell y --nodb:
mongosh --eval " var GCP_EMAIL = '$GCP_EMAIL' var GCP_PRIVATEKEY = '$GCP_PRIVATEKEY' " \ --shell --nodb
Este ejemplo abre mongosh sin una conexión a una base de datos MongoDB. La opción --eval establece las variables GCP_EMAIL y GCP_PRIVATEKEY en mongosh al valor de las variables de entorno correspondientes.
Crear la configuración de cifrado.
En mongosh, crea una nueva variable ClientSideFieldLevelEncryptionOptions para almacenar el documento de configuración de cifrado a nivel de campo del lado del cliente:
var ClientSideFieldLevelEncryptionOptions = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "gcp" : { "email" : GCP_EMAIL, "privateKey" : GCP_PRIVATEKEY } } }
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 de destino. Especifica el ClientSideFieldLevelEncryptionOptions documento como el segundo parámetro para el constructor Mongo() con el fin de configurar la conexión para el cifrado a nivel de campo lado del cliente:
csfleDatabaseConnection = Mongo( "mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster", ClientSideFieldLevelEncryptionOptions )
Reemplaza el replaceMe.example.net URI con la cadena de conexión para el clúster de destino.
Utiliza el objeto csfleDatabaseConnection para acceder a los métodos del shell de cifrado a nivel de campo del lado del cliente.
Para una documentación completa sobre cómo establecer conexiones de base de datos configuradas para el cifrado a nivel de campo del lado del cliente, consulta el Mongo() de referencia del constructor.
Cree el objeto Key Vault.
Utilice el método getKeyVault() en el objeto de conexión a la base de datos csfleDatabaseConnection para crear el objeto keyVault:
keyVault = csfleDatabaseConnection.getKeyVault();
Importante
El cifrado a nivel de campo en el lado del cliente depende de la unicidad de los nombres alternativos de la clave forzada por el servidor. getKeyVault() crea un índice único en keyAltNames si no existe uno. No elimines el índice único creado por getKeyVault().
Crear la llave de cifrado de datos.
Utiliza el método KeyVault.createKey() en el objeto keyVault para crear una nueva llave de cifrado de datos en el Key Vault:
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 unicidad en el campo si aún no existe uno. Los nombres alternativos clave facilitan la localización de la llave de cifrado de datos.
Si tiene éxito, createKey(), se devuelve el UUID de la nueva llave de cifrado de datos. La UUID es un objeto BSON Binary (BinData) con subtipo 4 que identifica de manera única la clave de cifrado de datos. La string UUID es la representación hexadecimal de los datos binarios subyacentes.
Si estás proporcionando la clave de cifrado de datos a un driver oficial de MongoDB para configurar el cifrado automático a nivel de campo en el lado del cliente, debes utilizar la representación base64 del string UUID.
Puedes ejecutar la siguiente operación en mongosh para convertir una cadena hexadecimal UUID en su representación base64:
UUID("b4b41b33-5c97-412e-a02b-743498346079").base64()
Suministra el UUID de tu propia llave de cifrado de datos a este comando, según se devuelve desde createKey() arriba, o según se indica en Recupera una llave de cifrado de datos existente.
Genere una llave de cifrado.
Configurar el cifrado a nivel de campo del lado del cliente para una clave gestionada localmente requiere especificar una string64-codificada de 96bytes sin saltos de línea.
Para mitigar el riesgo de que estas credenciales se filtren en los registros, el siguiente procedimiento pasa los valores a mongosh utilizando variables de entorno.
La siguiente operación genera una clave que cumple con los requisitos establecidos y la añade al ~/.profile del usuario. Si la clave DEV_LOCAL_KEY ya existe, omita esta operación.
echo "export DEV_LOCAL_KEY=\"$(head -c 96 /dev/urandom | base64 | tr -d '\n')\"" >> ~/.profile
El sistema operativo host podría requerir cerrar sesión y volver a iniciarla para actualizar las variables de entorno cargadas. También se puede usar el comando source ~/.profile para actualizar manualmente la shell.
Nota
Tu sistema operativo host o shell específicos pueden tener diferentes procedimientos para establecer variables de entorno persistentes. Consulta la documentación de tu sistema operativo host o shell para obtener un procedimiento más específico, según corresponda.
Lanzar mongosh.
Cree una sesión mongosh usando las opciones --eval, --shell y --nodb:
mongosh --eval "var LOCAL_KEY = '$DEV_LOCAL_KEY' " \ --shell --nodb
El ejemplo abre automáticamente mongosh sin conexión a una base de datos MongoDB. La opción --eval establece la variable LOCAL_KEY en mongosh con el valor de la variable de entorno correspondiente.
Crear la configuración de cifrado.
En mongosh, crea una nueva variable ClientSideFieldLevelEncryptionOptions para almacenar el documento de configuración de cifrado a nivel de campo del lado del cliente:
var ClientSideFieldLevelEncryptionOptions = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "local" : { "key" : BinData(0, 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 de destino. Especifica el ClientSideFieldLevelEncryptionOptions documento como el segundo parámetro para el constructor Mongo() con el fin de configurar la conexión para el cifrado a nivel de campo lado del cliente:
csfleDatabaseConnection = Mongo( "mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster", ClientSideFieldLevelEncryptionOptions )
Reemplaza el replaceMe.example.net URI con la cadena de conexión para el clúster de destino.
Utiliza el objeto csfleDatabaseConnection para acceder a los métodos del shell de cifrado a nivel de campo del lado del cliente.
Para una documentación completa sobre cómo establecer conexiones de base de datos configuradas para el cifrado a nivel de campo del lado del cliente, consulta el Mongo() de referencia del constructor.
Cree el objeto Key Vault.
Utilice el método getKeyVault() en el objeto de conexión a la base de datos csfleDatabaseConnection para crear el objeto keyVault:
keyVault = csfleDatabaseConnection.getKeyVault();
Importante
El cifrado a nivel de campo en el lado del cliente depende de la unicidad de los nombres alternativos de la clave forzada por el servidor. getKeyVault() crea un índice único en keyAltNames si no existe uno. No elimines el índice único creado por getKeyVault().
Crear la llave de cifrado de datos.
Utiliza el método KeyVault.createKey() en el objeto keyVault para crear una nueva llave de cifrado de datos en el Key Vault:
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(), se devuelve el UUID de la nueva llave de cifrado de datos. La UUID es un objeto BSON Binary (BinData) con subtipo 4 que identifica de manera única la clave de cifrado de datos. La string UUID es la representación hexadecimal de los datos binarios subyacentes.
Si estás proporcionando la clave de cifrado de datos a un driver oficial de MongoDB para configurar el cifrado automático a nivel de campo en el lado del cliente, debes utilizar la representación base64 del string UUID.
Puedes ejecutar la siguiente operación en mongosh para convertir una cadena hexadecimal UUID en su representación base64:
UUID("b4b41b33-5c97-412e-a02b-743498346079").base64()
Suministra el UUID de tu propia llave de cifrado de datos a este comando, según se devuelve desde createKey() arriba, o según se indica en Recupera una llave de cifrado de datos existente.
Gestionar el nombre alternativo de una clave de cifrado de datos
El siguiente procedimiento utiliza mongosh para gestionar los nombres alternativos de una clave de cifrado de datos. Para obtener orientación sobre la gestión de claves de cifrado de datos utilizando un driver compatible con 4.2+, consulte la documentación del driver en su lugar.
Si aún se encuentra dentro de su sesión configurada mongosh desde los pasos anteriores de Crear una llave de cifrado de datos, puede saltar directamente al paso 5.
Utiliza las pestañas siguientes para seleccionar la KMS apropiada para tu implementación:
Lanzar mongosh.
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.
Para mitigar el riesgo de que estas credenciales se filtren en los registros, el siguiente procedimiento pasa los valores a mongosh utilizando variables de entorno.
Primero, asegúrese de haber configurado las siguientes variables de entorno de acuerdo con la documentación de su plataforma:
AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY
A continuación, cree una sesión de mongosh utilizando las opciones de --eval, --shell, y --nodb:
mongosh --eval " var AWS_ACCESS_KEY_ID = '$AWS_ACCESS_KEY_ID' var AWS_SECRET_ACCESS_KEY = '$AWS_SECRET_ACCESS_KEY' " \ --shell --nodb
Este ejemplo abre mongosh sin una conexión a una base de datos MongoDB. La opción --eval establece las variables AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY en mongosh al valor de las variables de entorno correspondientes. Las variables especificadas también son soportadas por la AWS CLI.
Crear la configuración de cifrado.
En mongosh, crea una nueva variable ClientSideFieldLevelEncryptionOptions para almacenar el documento de configuración de cifrado a nivel de campo del lado del cliente:
var ClientSideFieldLevelEncryptionOptions = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "aws" : { "accessKeyId" : AWS_ACCESS_KEY_ID, "secretAccessKey" : AWS_SECRET_ACCESS_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 de destino. Especifica el ClientSideFieldLevelEncryptionOptions documento como el segundo parámetro para el constructor Mongo() con el fin de configurar la conexión para el cifrado a nivel de campo lado del cliente:
csfleDatabaseConnection = Mongo( "mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster", ClientSideFieldLevelEncryptionOptions )
Reemplaza el replaceMe.example.net URI con la cadena de conexión para el clúster de destino.
Utiliza el objeto csfleDatabaseConnection para acceder a los métodos del shell de cifrado a nivel de campo del lado del cliente.
Para una documentación completa sobre cómo establecer conexiones de base de datos configuradas para el cifrado a nivel de campo del lado del cliente, consulta el Mongo() de referencia del constructor.
Cree el objeto Key Vault.
Utilice el método getKeyVault() en el objeto de conexión a la base de datos csfleDatabaseConnection para crear el objeto keyVault:
keyVault = csfleDatabaseConnection.getKeyVault();
Importante
El cifrado a nivel de campo en el lado del cliente depende de la unicidad de los nombres alternativos de la clave forzada por el servidor. getKeyVault() crea un índice único en keyAltNames si no existe uno. No elimines el índice único creado por getKeyVault().
Administra el nombre alternativo de la clave de cifrado de datos.
Utiliza los siguientes pasos para agregar o remover un Nombre Alternativo de Clave existente.
- Agregar nombre alternativo de clave
Importante
El cifrado a nivel de campo del lado del cliente depende de la unicidad de los nombres alternativos de las claves aplicada por el servidor. Valide que exista un índice único en
keyAltNamesantes de añadir un nuevo nombre alternativo de clave. Si se descartó el índice único, usted debe volver a crearlo antes de agregar cualquier nombre alternativo de clave.Usa el
KeyVault.addKeyAlternateName()para añadir un nuevo nombre alternativo a una clave de cifrado de datos:keyVault.addKeyAlternateName( UUID("<Replace Me With The UUID Of The Key To Modify"), "NewKeyAltNameForMyFirstCSFLEDataKey" ) Dónde:
El primer parámetro debe ser el UUID de la llave de cifrado de datos que se va a modificar.
El segundo parámetro debe ser una string única.
getKeyVault()crea un índice único enkeyAltNamespara aplicar la unicidad de los nombres alternativos de claves.
KeyVault.addKeyAlternateName()devuelve el documento de la clave de cifrado de datos antes de la modificación. UtilizaKeyVault.getKey()para recuperar la clave de cifrado de datos modificada.- Remover nombre alternativo clave
Usa el
KeyVault.removeKeyAlternateName()para remover un nombre alternativo clave de una llave de cifrado de datos:keyVault.removeKeyAlternateName( UUID("<Replace Me With The UUID Of The Key To Modify"), "NewKeyAltNameForMyFirstCSFLEDataKey" ) Dónde:
El primer parámetro debe ser el UUID de la llave de cifrado de datos que se va a modificar.
El segundo parámetro debe ser un nombre alternativo de clave de string.
KeyVault.removeKeyAlternateName()devuelve la llave de cifrado de datos antes de la modificación. UtilizaKeyVault.getKey()para recuperar la clave de cifrado de datos modificada.
Lanzar mongosh.
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.
Para mitigar el riesgo de que estas credenciales se filtren en los registros, el siguiente procedimiento pasa los valores a mongosh utilizando variables de entorno.
Primero, asegúrese de haber configurado las siguientes variables de entorno de acuerdo con la documentación de su plataforma:
AZURE_TENANT_IDAZURE_CLIENT_IDAZURE_CLIENT_SECRET
A continuación, crea una sesión mongosh utilizando las opciones --eval, --shell y --nodb:
mongosh --eval " var AZURE_TENANT_ID = '$AZURE_TENANT_ID' var AZURE_CLIENT_ID = '$AZURE_CLIENT_ID' var AZURE_CLIENT_SECRET = '$AZURE_CLIENT_SECRET' " \ --shell --nodb
Este ejemplo abre mongosh sin conexión a una base de datos MongoDB. La opción --eval establece las variables AZURE_TENANT_ID, AZURE_CLIENT_ID y AZURE_CLIENT_SECRET en mongosh al valor de las variables de entorno correspondientes.
Crear la configuración de cifrado.
En mongosh, crea una nueva variable ClientSideFieldLevelEncryptionOptions para almacenar el documento de configuración de cifrado a nivel de campo del lado del cliente:
var ClientSideFieldLevelEncryptionOptions = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "azure" : { "tenantId" : AZURE_TENANT_ID, "clientId" : AZURE_CLIENT_ID, "clientSecret" : AZURE_CLIENT_SECRET } } }
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 de destino. Especifica el ClientSideFieldLevelEncryptionOptions documento como el segundo parámetro para el constructor Mongo() con el fin de configurar la conexión para el cifrado a nivel de campo lado del cliente:
csfleDatabaseConnection = Mongo( "mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster", ClientSideFieldLevelEncryptionOptions )
Reemplaza el replaceMe.example.net URI con la cadena de conexión para el clúster de destino.
Utiliza el objeto csfleDatabaseConnection para acceder a los métodos del shell de cifrado a nivel de campo del lado del cliente.
Para una documentación completa sobre cómo establecer conexiones de base de datos configuradas para el cifrado a nivel de campo del lado del cliente, consulta el Mongo() de referencia del constructor.
Cree el objeto Key Vault.
Utilice el método getKeyVault() en el objeto de conexión a la base de datos csfleDatabaseConnection para crear el objeto keyVault:
keyVault = csfleDatabaseConnection.getKeyVault();
Importante
El cifrado a nivel de campo en el lado del cliente depende de la unicidad de los nombres alternativos de la clave forzada por el servidor. getKeyVault() crea un índice único en keyAltNames si no existe uno. No elimines el índice único creado por getKeyVault().
Administra el nombre alternativo de la clave de cifrado de datos.
Utiliza los siguientes pasos para agregar o remover un Nombre Alternativo de Clave existente.
- Agregar nombre alternativo de clave
Importante
El cifrado a nivel de campo del lado del cliente depende de la unicidad de los nombres alternativos de las claves aplicada por el servidor. Valide que exista un índice único en
keyAltNamesantes de añadir un nuevo nombre alternativo de clave. Si se descartó el índice único, usted debe volver a crearlo antes de agregar cualquier nombre alternativo de clave.Usa el
KeyVault.addKeyAlternateName()para añadir un nuevo nombre alternativo a una clave de cifrado de datos:keyVault.addKeyAlternateName( UUID("<Replace Me With The UUID Of The Key To Modify"), "NewKeyAltNameForMyFirstCSFLEDataKey" ) Dónde:
El primer parámetro debe ser el UUID de la llave de cifrado de datos que se va a modificar.
El segundo parámetro debe ser una string única.
getKeyVault()crea un índice único enkeyAltNamespara aplicar la unicidad de los nombres alternativos de claves.
KeyVault.addKeyAlternateName()devuelve el documento de la clave de cifrado de datos antes de la modificación. UtilizaKeyVault.getKey()para recuperar la clave de cifrado de datos modificada.- Remover nombre alternativo clave
Usa el
KeyVault.removeKeyAlternateName()para remover un nombre alternativo clave de una llave de cifrado de datos:keyVault.removeKeyAlternateName( UUID("<Replace Me With The UUID Of The Key To Modify"), "NewKeyAltNameForMyFirstCSFLEDataKey" ) Dónde:
El primer parámetro debe ser el UUID de la llave de cifrado de datos que se va a modificar.
El segundo parámetro debe ser un nombre alternativo de clave de string.
KeyVault.removeKeyAlternateName()devuelve la llave de cifrado de datos antes de la modificación. UtilizaKeyVault.getKey()para recuperar la clave de cifrado de datos modificada.
Lanzar mongosh.
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.
Para mitigar el riesgo de que estas credenciales se filtren en los registros, el siguiente procedimiento pasa los valores a mongosh utilizando variables de entorno.
Primero, asegúrese de haber configurado las siguientes variables de entorno de acuerdo con la documentación de su plataforma:
GCP_EMAILGCP_PRIVATEKEY
A continuación, crea una sesión mongosh utilizando las opciones --eval, --shell y --nodb:
mongosh --eval " var GCP_EMAIL = '$GCP_EMAIL' var GCP_PRIVATEKEY = '$GCP_PRIVATEKEY' " \ --shell --nodb
Este ejemplo abre mongosh sin una conexión a una base de datos MongoDB. La opción --eval establece las variables GCP_EMAIL y GCP_PRIVATEKEY en mongosh al valor de las variables de entorno correspondientes.
Crear la configuración de cifrado.
En mongosh, crea una nueva variable ClientSideFieldLevelEncryptionOptions para almacenar el documento de configuración de cifrado a nivel de campo del lado del cliente:
var ClientSideFieldLevelEncryptionOptions = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "gcp" : { "email" : GCP_EMAIL, "privateKey" : GCP_PRIVATEKEY } } }
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 de destino. Especifica el ClientSideFieldLevelEncryptionOptions documento como el segundo parámetro para el constructor Mongo() con el fin de configurar la conexión para el cifrado a nivel de campo lado del cliente:
csfleDatabaseConnection = Mongo( "mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster", ClientSideFieldLevelEncryptionOptions )
Reemplaza el replaceMe.example.net URI con la cadena de conexión para el clúster de destino.
Utiliza el objeto csfleDatabaseConnection para acceder a los métodos del shell de cifrado a nivel de campo del lado del cliente.
Para una documentación completa sobre cómo establecer conexiones de base de datos configuradas para el cifrado a nivel de campo del lado del cliente, consulta el Mongo() de referencia del constructor.
Cree el objeto Key Vault.
Utilice el método getKeyVault() en el objeto de conexión a la base de datos csfleDatabaseConnection para crear el objeto keyVault:
keyVault = csfleDatabaseConnection.getKeyVault();
Importante
El cifrado a nivel de campo en el lado del cliente depende de la unicidad de los nombres alternativos de la clave forzada por el servidor. getKeyVault() crea un índice único en keyAltNames si no existe uno. No elimines el índice único creado por getKeyVault().
Administra el nombre alternativo de la clave de cifrado de datos.
Utiliza los siguientes pasos para agregar o remover un Nombre Alternativo de Clave existente.
- Agregar nombre alternativo de clave
Importante
El cifrado a nivel de campo del lado del cliente depende de la unicidad de los nombres alternativos de las claves aplicada por el servidor. Valide que exista un índice único en
keyAltNamesantes de añadir un nuevo nombre alternativo de clave. Si se descartó el índice único, usted debe volver a crearlo antes de agregar cualquier nombre alternativo de clave.Usa el
KeyVault.addKeyAlternateName()para añadir un nuevo nombre alternativo a una clave de cifrado de datos:keyVault.addKeyAlternateName( UUID("<Replace Me With The UUID Of The Key To Modify"), "NewKeyAltNameForMyFirstCSFLEDataKey" ) Dónde:
El primer parámetro debe ser el UUID de la llave de cifrado de datos que se va a modificar.
El segundo parámetro debe ser una string única.
getKeyVault()crea un índice único enkeyAltNamespara aplicar la unicidad de los nombres alternativos de claves.
KeyVault.addKeyAlternateName()devuelve el documento de la clave de cifrado de datos antes de la modificación. UtilizaKeyVault.getKey()para recuperar la clave de cifrado de datos modificada.- Remover nombre alternativo clave
Usa el
KeyVault.removeKeyAlternateName()para remover un nombre alternativo clave de una llave de cifrado de datos:keyVault.removeKeyAlternateName( UUID("<Replace Me With The UUID Of The Key To Modify"), "NewKeyAltNameForMyFirstCSFLEDataKey" ) Dónde:
El primer parámetro debe ser el UUID de la llave de cifrado de datos que se va a modificar.
El segundo parámetro debe ser un nombre alternativo de clave de string.
KeyVault.removeKeyAlternateName()devuelve la llave de cifrado de datos antes de la modificación. UtilizaKeyVault.getKey()para recuperar la clave de cifrado de datos modificada.
Genere una llave de cifrado.
Configurar el cifrado a nivel de campo del lado del cliente para una clave gestionada localmente requiere especificar una string64-codificada de 96bytes sin saltos de línea.
Para mitigar el riesgo de que estas credenciales se filtren en los registros, el siguiente procedimiento pasa los valores a mongosh utilizando variables de entorno.
La siguiente operación genera una clave que cumple con los requisitos establecidos y la añade al ~/.profile del usuario. Si la clave DEV_LOCAL_KEY ya existe, omita esta operación.
echo "export DEV_LOCAL_KEY=\"$(head -c 96 /dev/urandom | base64 | tr -d '\n')\"" >> ~/.profile
El sistema operativo host podría requerir cerrar sesión y volver a iniciarla para actualizar las variables de entorno cargadas. También se puede usar el comando source ~/.profile para actualizar manualmente la shell.
Nota
Tu sistema operativo host o shell específicos pueden tener diferentes procedimientos para establecer variables de entorno persistentes. Consulta la documentación de tu sistema operativo host o shell para obtener un procedimiento más específico, según corresponda.
Lanzar mongosh.
Cree una sesión mongosh usando las opciones --eval, --shell y --nodb:
mongosh --eval "var LOCAL_KEY = '$DEV_LOCAL_KEY' " \ --shell --nodb
El ejemplo abre automáticamente mongosh sin conexión a una base de datos MongoDB. La opción --eval establece la variable LOCAL_KEY en mongosh con el valor de la variable de entorno correspondiente.
Crear la configuración de cifrado.
En mongosh, crea una nueva variable ClientSideFieldLevelEncryptionOptions para almacenar el documento de configuración de cifrado a nivel de campo del lado del cliente:
var ClientSideFieldLevelEncryptionOptions = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "local" : { "key" : BinData(0, 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 de destino. Especifica el ClientSideFieldLevelEncryptionOptions documento como el segundo parámetro para el constructor Mongo() con el fin de configurar la conexión para el cifrado a nivel de campo lado del cliente:
csfleDatabaseConnection = Mongo( "mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster", ClientSideFieldLevelEncryptionOptions )
Reemplaza el replaceMe.example.net URI con la cadena de conexión para el clúster de destino.
Utiliza el objeto csfleDatabaseConnection para acceder a los métodos del shell de cifrado a nivel de campo del lado del cliente.
Para una documentación completa sobre cómo establecer conexiones de base de datos configuradas para el cifrado a nivel de campo del lado del cliente, consulta el Mongo() de referencia del constructor.
Cree el objeto Key Vault.
Utilice el método getKeyVault() en el objeto de conexión a la base de datos csfleDatabaseConnection para crear el objeto keyVault:
keyVault = csfleDatabaseConnection.getKeyVault();
Importante
El cifrado a nivel de campo en el lado del cliente depende de la unicidad de los nombres alternativos de la clave forzada por el servidor. getKeyVault() crea un índice único en keyAltNames si no existe uno. No elimines el índice único creado por getKeyVault().
Administra el nombre alternativo de la clave de cifrado de datos.
Utiliza los siguientes pasos para agregar o remover un Nombre Alternativo de Clave existente.
- Agregar nombre alternativo de clave
Importante
El cifrado a nivel de campo del lado del cliente depende de la unicidad de los nombres alternativos de las claves aplicada por el servidor. Valide que exista un índice único en
keyAltNamesantes de añadir un nuevo nombre alternativo de clave. Si se descartó el índice único, usted debe volver a crearlo antes de agregar cualquier nombre alternativo de clave.Usa el
KeyVault.addKeyAlternateName()para añadir un nuevo nombre alternativo a una clave de cifrado de datos:keyVault.addKeyAlternateName( UUID("<Replace Me With The UUID Of The Key To Modify"), "NewKeyAltNameForMyFirstCSFLEDataKey" ) Dónde:
El primer parámetro debe ser el UUID de la llave de cifrado de datos que se va a modificar.
El segundo parámetro debe ser una string única.
getKeyVault()crea un índice único enkeyAltNamespara aplicar la unicidad de los nombres alternativos de claves.
KeyVault.addKeyAlternateName()devuelve el documento de la clave de cifrado de datos antes de la modificación. UtilizaKeyVault.getKey()para recuperar la clave de cifrado de datos modificada.- Remover nombre alternativo clave
Usa el
KeyVault.removeKeyAlternateName()para remover un nombre alternativo clave de una llave de cifrado de datos:keyVault.removeKeyAlternateName( UUID("<Replace Me With The UUID Of The Key To Modify"), "NewKeyAltNameForMyFirstCSFLEDataKey" ) Dónde:
El primer parámetro debe ser el UUID de la llave de cifrado de datos que se va a modificar.
El segundo parámetro debe ser un nombre alternativo de clave de string.
KeyVault.removeKeyAlternateName()devuelve la llave de cifrado de datos antes de la modificación. UtilizaKeyVault.getKey()para recuperar la clave de cifrado de datos modificada.
Remover una llave de cifrado de datos
Advertencia
Eliminar una llave de cifrado de datos hace que todos los campos cifrados con esa llave sean permanentemente ilegibles.
El siguiente procedimiento utiliza mongosh para remover una clave de cifrado de datos del almacén de claves. Para obtener orientación sobre la gestión de claves de cifrado de datos utilizando un driver compatible con 4.2+, consulta la documentación del driver.
Si aún se encuentra dentro de su sesión configurada mongosh desde los pasos anteriores de Crear una llave de cifrado de datos, puede saltar directamente al paso 5.
Utiliza las pestañas siguientes para seleccionar la KMS apropiada para tu implementación:
Lanzar mongosh.
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.
Para mitigar el riesgo de que estas credenciales se filtren en los registros, el siguiente procedimiento pasa los valores a mongosh utilizando variables de entorno.
Primero, asegúrese de haber configurado las siguientes variables de entorno de acuerdo con la documentación de su plataforma:
AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY
A continuación, cree una sesión de mongosh utilizando las opciones de --eval, --shell, y --nodb:
mongosh --eval " var AWS_ACCESS_KEY_ID = '$AWS_ACCESS_KEY_ID' var AWS_SECRET_ACCESS_KEY = '$AWS_SECRET_ACCESS_KEY' " \ --shell --nodb
Este ejemplo abre mongosh sin una conexión a una base de datos MongoDB. La opción --eval establece las variables AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY en mongosh al valor de las variables de entorno correspondientes. Las variables especificadas también son soportadas por la AWS CLI.
Crear la configuración de cifrado.
En mongosh, crea una nueva variable ClientSideFieldLevelEncryptionOptions para almacenar el documento de configuración de cifrado a nivel de campo del lado del cliente:
var ClientSideFieldLevelEncryptionOptions = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "aws" : { "accessKeyId" : AWS_ACCESS_KEY_ID, "secretAccessKey" : AWS_SECRET_ACCESS_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 de destino. Especifica el ClientSideFieldLevelEncryptionOptions documento como el segundo parámetro para el constructor Mongo() con el fin de configurar la conexión para el cifrado a nivel de campo lado del cliente:
csfleDatabaseConnection = Mongo( "mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster", ClientSideFieldLevelEncryptionOptions )
Reemplaza el replaceMe.example.net URI con la cadena de conexión para el clúster de destino.
Utiliza el objeto csfleDatabaseConnection para acceder a los métodos del shell de cifrado a nivel de campo del lado del cliente.
Para una documentación completa sobre cómo establecer conexiones de base de datos configuradas para el cifrado a nivel de campo del lado del cliente, consulta el Mongo() de referencia del constructor.
Cree el objeto Key Vault.
Utilice el método getKeyVault() en el objeto de conexión a la base de datos csfleDatabaseConnection para crear el objeto keyVault:
keyVault = csfleDatabaseConnection.getKeyVault();
Importante
El cifrado a nivel de campo en el lado del cliente depende de la unicidad de los nombres alternativos de la clave forzada por el servidor. getKeyVault() crea un índice único en keyAltNames si no existe uno. No elimines el índice único creado por getKeyVault().
Elimine la clave de cifrado de datos con su UUID.
Utiliza el método KeyVault.deleteKey() en el objeto keyVault para borrar una clave de datos del Key Vault:
keyVault.deleteKey(UUID("<Replace Me With The UUID Of The Key To Delete"))
Lanzar mongosh.
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.
Para mitigar el riesgo de que estas credenciales se filtren en los registros, el siguiente procedimiento pasa los valores a mongosh utilizando variables de entorno.
Primero, asegúrese de haber configurado las siguientes variables de entorno de acuerdo con la documentación de su plataforma:
AZURE_TENANT_IDAZURE_CLIENT_IDAZURE_CLIENT_SECRET
A continuación, crea una sesión mongosh utilizando las opciones --eval, --shell y --nodb:
mongosh --eval " var AZURE_TENANT_ID = '$AZURE_TENANT_ID' var AZURE_CLIENT_ID = '$AZURE_CLIENT_ID' var AZURE_CLIENT_SECRET = '$AZURE_CLIENT_SECRET' " \ --shell --nodb
Este ejemplo abre mongosh sin conexión a una base de datos MongoDB. La opción --eval establece las variables AZURE_TENANT_ID, AZURE_CLIENT_ID y AZURE_CLIENT_SECRET en mongosh al valor de las variables de entorno correspondientes.
Crear la configuración de cifrado.
En mongosh, crea una nueva variable ClientSideFieldLevelEncryptionOptions para almacenar el documento de configuración de cifrado a nivel de campo del lado del cliente:
var ClientSideFieldLevelEncryptionOptions = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "azure" : { "tenantId" : AZURE_TENANT_ID, "clientId" : AZURE_CLIENT_ID, "clientSecret" : AZURE_CLIENT_SECRET } } }
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 de destino. Especifica el ClientSideFieldLevelEncryptionOptions documento como el segundo parámetro para el constructor Mongo() con el fin de configurar la conexión para el cifrado a nivel de campo lado del cliente:
csfleDatabaseConnection = Mongo( "mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster", ClientSideFieldLevelEncryptionOptions )
Reemplaza el replaceMe.example.net URI con la cadena de conexión para el clúster de destino.
Utiliza el objeto csfleDatabaseConnection para acceder a los métodos del shell de cifrado a nivel de campo del lado del cliente.
Para una documentación completa sobre cómo establecer conexiones de base de datos configuradas para el cifrado a nivel de campo del lado del cliente, consulta el Mongo() de referencia del constructor.
Cree el objeto Key Vault.
Utilice el método getKeyVault() en el objeto de conexión a la base de datos csfleDatabaseConnection para crear el objeto keyVault:
keyVault = csfleDatabaseConnection.getKeyVault();
Importante
El cifrado a nivel de campo en el lado del cliente depende de la unicidad de los nombres alternativos de la clave forzada por el servidor. getKeyVault() crea un índice único en keyAltNames si no existe uno. No elimines el índice único creado por getKeyVault().
Elimine la clave de cifrado de datos con su UUID.
Utiliza el método KeyVault.deleteKey() en el objeto keyVault para borrar una clave de datos del Key Vault:
keyVault.deleteKey(UUID("<Replace Me With The UUID Of The Key To Delete"))
Lanzar mongosh.
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.
Para mitigar el riesgo de que estas credenciales se filtren en los registros, el siguiente procedimiento pasa los valores a mongosh utilizando variables de entorno.
Primero, asegúrese de haber configurado las siguientes variables de entorno de acuerdo con la documentación de su plataforma:
GCP_EMAILGCP_PRIVATEKEY
A continuación, crea una sesión mongosh utilizando las opciones --eval, --shell y --nodb:
mongosh --eval " var GCP_EMAIL = '$GCP_EMAIL' var GCP_PRIVATEKEY = '$GCP_PRIVATEKEY' " \ --shell --nodb
Este ejemplo abre mongosh sin una conexión a una base de datos MongoDB. La opción --eval establece las variables GCP_EMAIL y GCP_PRIVATEKEY en mongosh al valor de las variables de entorno correspondientes.
Crear la configuración de cifrado.
En mongosh, crea una nueva variable ClientSideFieldLevelEncryptionOptions para almacenar el documento de configuración de cifrado a nivel de campo del lado del cliente:
var ClientSideFieldLevelEncryptionOptions = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "gcp" : { "email" : GCP_EMAIL, "privateKey" : GCP_PRIVATEKEY } } }
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 de destino. Especifica el ClientSideFieldLevelEncryptionOptions documento como el segundo parámetro para el constructor Mongo() con el fin de configurar la conexión para el cifrado a nivel de campo lado del cliente:
csfleDatabaseConnection = Mongo( "mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster", ClientSideFieldLevelEncryptionOptions )
Reemplaza el replaceMe.example.net URI con la cadena de conexión para el clúster de destino.
Utiliza el objeto csfleDatabaseConnection para acceder a los métodos del shell de cifrado a nivel de campo del lado del cliente.
Para una documentación completa sobre cómo establecer conexiones de base de datos configuradas para el cifrado a nivel de campo del lado del cliente, consulta el Mongo() de referencia del constructor.
Cree el objeto Key Vault.
Utilice el método getKeyVault() en el objeto de conexión a la base de datos csfleDatabaseConnection para crear el objeto keyVault:
keyVault = csfleDatabaseConnection.getKeyVault();
Importante
El cifrado a nivel de campo en el lado del cliente depende de la unicidad de los nombres alternativos de la clave forzada por el servidor. getKeyVault() crea un índice único en keyAltNames si no existe uno. No elimines el índice único creado por getKeyVault().
Elimine la clave de cifrado de datos con su UUID.
Utiliza el método KeyVault.deleteKey() en el objeto keyVault para borrar una clave de datos del Key Vault:
keyVault.deleteKey(UUID("<Replace Me With The UUID Of The Key To Delete"))
Genere una llave de cifrado.
Configurar el cifrado a nivel de campo del lado del cliente para una clave gestionada localmente requiere especificar una string64-codificada de 96bytes sin saltos de línea.
Para mitigar el riesgo de que estas credenciales se filtren en los registros, el siguiente procedimiento pasa los valores a mongosh utilizando variables de entorno.
La siguiente operación genera una clave que cumple con los requisitos establecidos y la añade al ~/.profile del usuario. Si la clave DEV_LOCAL_KEY ya existe, omita esta operación.
echo "export DEV_LOCAL_KEY=\"$(head -c 96 /dev/urandom | base64 | tr -d '\n')\"" >> ~/.profile
El sistema operativo host podría requerir cerrar sesión y volver a iniciarla para actualizar las variables de entorno cargadas. También se puede usar el comando source ~/.profile para actualizar manualmente la shell.
Nota
Tu sistema operativo host o shell específicos pueden tener diferentes procedimientos para establecer variables de entorno persistentes. Consulta la documentación de tu sistema operativo host o shell para obtener un procedimiento más específico, según corresponda.
Lanzar mongosh.
Cree una sesión mongosh usando las opciones --eval, --shell y --nodb:
mongosh --eval "var LOCAL_KEY = '$DEV_LOCAL_KEY' " \ --shell --nodb
El ejemplo abre automáticamente mongosh sin conexión a una base de datos MongoDB. La opción --eval establece la variable LOCAL_KEY en mongosh con el valor de la variable de entorno correspondiente.
Crear la configuración de cifrado.
En mongosh, crea una nueva variable ClientSideFieldLevelEncryptionOptions para almacenar el documento de configuración de cifrado a nivel de campo del lado del cliente:
var ClientSideFieldLevelEncryptionOptions = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "local" : { "key" : BinData(0, 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 de destino. Especifica el ClientSideFieldLevelEncryptionOptions documento como el segundo parámetro para el constructor Mongo() con el fin de configurar la conexión para el cifrado a nivel de campo lado del cliente:
csfleDatabaseConnection = Mongo( "mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster", ClientSideFieldLevelEncryptionOptions )
Reemplaza el replaceMe.example.net URI con la cadena de conexión para el clúster de destino.
Utiliza el objeto csfleDatabaseConnection para acceder a los métodos del shell de cifrado a nivel de campo del lado del cliente.
Para una documentación completa sobre cómo establecer conexiones de base de datos configuradas para el cifrado a nivel de campo del lado del cliente, consulta el Mongo() de referencia del constructor.
Cree el objeto Key Vault.
Utilice el método getKeyVault() en el objeto de conexión a la base de datos csfleDatabaseConnection para crear el objeto keyVault:
keyVault = csfleDatabaseConnection.getKeyVault();
Importante
El cifrado a nivel de campo en el lado del cliente depende de la unicidad de los nombres alternativos de la clave forzada por el servidor. getKeyVault() crea un índice único en keyAltNames si no existe uno. No elimines el índice único creado por getKeyVault().
Elimine la clave de cifrado de datos con su UUID.
Utiliza el método KeyVault.deleteKey() en el objeto keyVault para borrar una clave de datos del Key Vault:
keyVault.deleteKey(UUID("<Replace Me With The UUID Of The Key To Delete"))
Recuperar una clave de cifrado de datos existente
Para recuperar un documento de llave de cifrado de datos existente del archivo de llaves, ya sea:
Utiliza
getKey()para recuperar la clave creada por su UUID, oUtiliza
getKeyByAltName()para recuperar el nombre alternativo de la clave, si se especifica. Para obtener más información sobre cómo trabajar con nombres alternativos, consulta Administrar la llave de cifrado de datos.
Si se proporciona la llave de cifrado de datos a un driver oficial compatible con 4.2+ para configurar el cifrado automático de lado del cliente a nivel de campo, se debe usar la representación base64 del string UUID.
Puedes ejecutar la siguiente operación en mongosh para convertir una cadena hexadecimal UUID en su representación base64:
UUID("b4b41b33-5c97-412e-a02b-743498346079").base64()
Proporcione el UUID de su propia clave de cifrado de datos para este comando.