Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
Gestión de claves maestras y de cifrado de datos

Gestionar llaves de cifrado de datos

Nuevo en la versión 4.2.

El cifrado a nivel de campo del lado del cliente utiliza claves de cifrado de datos para el cifrado y descifrado. mongosh método auxiliar getKeyVault() devuelve un objeto de almacén de claves para crear, modificar y eliminar claves 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.

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:

1

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_ID

  • AWS_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.

2

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
}
}
}
3

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 obtener documentación completa sobre cómo establecer conexiones de bases de datos configuradas para el cifrado a nivel de campo del lado del cliente, consulte la referencia del Mongo() constructor.

4

Utilice el método en getKeyVault() el csfleDatabaseConnection objeto de conexión de base de datos para crear el keyVault objeto:

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().

5

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 KMS de Amazon Web Services 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 keyAltNames para la llave de cifrado de datos. Cada nombre alternativo de clave debe ser único. getKeyVault() crea un índice único en keyAltNames para 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 la operación es correcta, createKey() devuelve el UUID de la nueva clave de cifrado de datos.UUID es un Binary (BinData) objeto BSON con subtipo 4 que identifica de forma única la clave de cifrado de datos. La UUID cadena 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()

Proporcione el UUID de su propia clave de cifrado de datos a este comando, como se devolvió de createKey() arriba, o como se describe en Recuperar una clave de cifrado de datos existente.

1

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_ID

  • AZURE_CLIENT_ID

  • AZURE_CLIENT_SECRET

A continuación, cree una sesión mongosh --eval --shellutilizando --nodb las opciones, y:

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.

2

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
}
}
}
3

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 obtener documentación completa sobre cómo establecer conexiones de bases de datos configuradas para el cifrado a nivel de campo del lado del cliente, consulte la referencia del Mongo() constructor.

4

Utilice el método en getKeyVault() el csfleDatabaseConnection objeto de conexión de base de datos para crear el keyVault objeto:

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().

5

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 keyAltNames para la llave de cifrado de datos. Cada nombre alternativo de clave debe ser único. getKeyVault() crea un índice único en keyAltNames para 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 la operación es correcta, createKey() devuelve el UUID de la nueva clave de cifrado de datos.UUID es un Binary (BinData) objeto BSON con subtipo 4 que identifica de forma única la clave de cifrado de datos. La UUID cadena 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()

Proporcione el UUID de su propia clave de cifrado de datos a este comando, como se devolvió de createKey() arriba, o como se describe en Recuperar una clave de cifrado de datos existente.

1

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_EMAIL

  • GCP_PRIVATEKEY

A continuación, cree una sesión mongosh --eval --shellutilizando --nodb las opciones, y:

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.

2

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
}
}
}
3

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 obtener documentación completa sobre cómo establecer conexiones de bases de datos configuradas para el cifrado a nivel de campo del lado del cliente, consulte la referencia del Mongo() constructor.

4

Utilice el método en getKeyVault() el csfleDatabaseConnection objeto de conexión de base de datos para crear el keyVault objeto:

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().

5

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

    • projectid es el nombre de tu proyecto GCP, como my-project

    • locationname es la ubicación del llavero KMS, como global

    • keyringname es el nombre del llavero KMS, como my-keyring

    • keyname es el nombre de tu clave.

  • El tercer parámetro puede ser un arreglo de uno o más keyAltNames para la llave de cifrado de datos. Cada nombre alternativo de clave debe ser único. getKeyVault() crea un índice único en keyAltNames para 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 la operación es correcta, createKey() devuelve el UUID de la nueva clave de cifrado de datos.UUID es un Binary (BinData) objeto BSON con subtipo 4 que identifica de forma única la clave de cifrado de datos. La UUID cadena 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()

Proporcione el UUID de su propia clave de cifrado de datos a este comando, como se devolvió de createKey() arriba, o como se describe en Recuperar una clave de cifrado de datos existente.

1

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

Su sistema operativo host o shell puede tener diferentes procedimientos para configurar variables de entorno persistentes. Consulte la documentación de su sistema operativo host o shell para obtener un procedimiento más específico, según corresponda.

2

Cree una sesión mongosh --eval --shellutilizando --nodb las opciones, y:

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.

3

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)
}
}
}
4

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 obtener documentación completa sobre cómo establecer conexiones de bases de datos configuradas para el cifrado a nivel de campo del lado del cliente, consulte la referencia del Mongo() constructor.

5

Utilice el método en getKeyVault() el csfleDatabaseConnection objeto de conexión de base de datos para crear el keyVault objeto:

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().

6

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 local para especificar la clave administrada localmente configurada.

  • El segundo parámetro puede ser un arreglo de una o más keyAltNames para la llave de cifrado de datos. Cada nombre alternativo de clave debe ser único. getKeyVault() crea un índice único en keyAltNames para 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 la operación es correcta, createKey() devuelve el UUID de la nueva clave de cifrado de datos.UUID es un Binary (BinData) objeto BSON con subtipo 4 que identifica de forma única la clave de cifrado de datos. La UUID cadena 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()

Proporcione el UUID de su propia clave de cifrado de datos a este comando, como se devolvió de createKey() arriba, o como se describe en Recuperar una clave de cifrado de datos existente.

El siguiente procedimiento utiliza para administrar los nombres alternativos de una clave de cifrado de datos. Para obtener instrucciones sobre la administración de claves de cifrado de datos con mongosh un 4.2controlador compatible con +, consulte la documentación del controlador.

Si todavía se encuentra dentro mongosh de la sesión configurada en los pasos Crear una clave de cifrado de datos anteriores, puede saltar directamente al 5 paso.

Utilice las pestañas a continuación para seleccionar el KMS apropiado para su implementación:

1

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_ID

  • AWS_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.

2

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
}
}
}
3

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 obtener documentación completa sobre cómo establecer conexiones de bases de datos configuradas para el cifrado a nivel de campo del lado del cliente, consulte la referencia del Mongo() constructor.

4

Utilice el método en getKeyVault() el csfleDatabaseConnection objeto de conexión de base de datos para crear el keyVault objeto:

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().

5

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 clave, impuesta por el servidor. Verifique que exista un índice único en keyAltNames antes de agregar un nuevo nombre alternativo de clave. Si se eliminó el índice único,debe volver a crearlo antes de agregar cualquier nombre alternativo de clave.

Utilice para agregar un nuevo nombre alternativo a una clave de cifrado de KeyVault.addKeyAlternateName() 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 clave de cifrado de datos a modificar.

  • El segundo parámetro debe ser una string única. getKeyVault() crea un índice único en keyAltNames para 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. Utiliza KeyVault.getKey() para recuperar la clave de cifrado de datos modificada.

Remover nombre alternativo clave

Utilice para eliminar un nombre alternativo de clave de una clave de cifrado de KeyVault.removeKeyAlternateName() 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 clave de cifrado de datos 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. Utiliza KeyVault.getKey() para recuperar la clave de cifrado de datos modificada.

1

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_ID

  • AZURE_CLIENT_ID

  • AZURE_CLIENT_SECRET

A continuación, cree una sesión mongosh --eval --shellutilizando --nodb las opciones, y:

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.

2

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
}
}
}
3

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 obtener documentación completa sobre cómo establecer conexiones de bases de datos configuradas para el cifrado a nivel de campo del lado del cliente, consulte la referencia del Mongo() constructor.

4

Utilice el método en getKeyVault() el csfleDatabaseConnection objeto de conexión de base de datos para crear el keyVault objeto:

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().

5

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 clave, impuesta por el servidor. Verifique que exista un índice único en keyAltNames antes de agregar un nuevo nombre alternativo de clave. Si se eliminó el índice único,debe volver a crearlo antes de agregar cualquier nombre alternativo de clave.

Utilice para agregar un nuevo nombre alternativo a una clave de cifrado de KeyVault.addKeyAlternateName() 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 clave de cifrado de datos a modificar.

  • El segundo parámetro debe ser una string única. getKeyVault() crea un índice único en keyAltNames para 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. Utiliza KeyVault.getKey() para recuperar la clave de cifrado de datos modificada.

Remover nombre alternativo clave

Utilice para eliminar un nombre alternativo de clave de una clave de cifrado de KeyVault.removeKeyAlternateName() 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 clave de cifrado de datos 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. Utiliza KeyVault.getKey() para recuperar la clave de cifrado de datos modificada.

1

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_EMAIL

  • GCP_PRIVATEKEY

A continuación, cree una sesión mongosh --eval --shellutilizando --nodb las opciones, y:

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.

2

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
}
}
}
3

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 obtener documentación completa sobre cómo establecer conexiones de bases de datos configuradas para el cifrado a nivel de campo del lado del cliente, consulte la referencia del Mongo() constructor.

4

Utilice el método en getKeyVault() el csfleDatabaseConnection objeto de conexión de base de datos para crear el keyVault objeto:

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().

5

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 clave, impuesta por el servidor. Verifique que exista un índice único en keyAltNames antes de agregar un nuevo nombre alternativo de clave. Si se eliminó el índice único,debe volver a crearlo antes de agregar cualquier nombre alternativo de clave.

Utilice para agregar un nuevo nombre alternativo a una clave de cifrado de KeyVault.addKeyAlternateName() 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 clave de cifrado de datos a modificar.

  • El segundo parámetro debe ser una string única. getKeyVault() crea un índice único en keyAltNames para 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. Utiliza KeyVault.getKey() para recuperar la clave de cifrado de datos modificada.

Remover nombre alternativo clave

Utilice para eliminar un nombre alternativo de clave de una clave de cifrado de KeyVault.removeKeyAlternateName() 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 clave de cifrado de datos 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. Utiliza KeyVault.getKey() para recuperar la clave de cifrado de datos modificada.

1

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

Su sistema operativo host o shell puede tener diferentes procedimientos para configurar variables de entorno persistentes. Consulte la documentación de su sistema operativo host o shell para obtener un procedimiento más específico, según corresponda.

2

Cree una sesión mongosh --eval --shellutilizando --nodb las opciones, y:

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.

3

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)
}
}
}
4

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 obtener documentación completa sobre cómo establecer conexiones de bases de datos configuradas para el cifrado a nivel de campo del lado del cliente, consulte la referencia del Mongo() constructor.

5

Utilice el método en getKeyVault() el csfleDatabaseConnection objeto de conexión de base de datos para crear el keyVault objeto:

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().

6

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 clave, impuesta por el servidor. Verifique que exista un índice único en keyAltNames antes de agregar un nuevo nombre alternativo de clave. Si se eliminó el índice único,debe volver a crearlo antes de agregar cualquier nombre alternativo de clave.

Utilice para agregar un nuevo nombre alternativo a una clave de cifrado de KeyVault.addKeyAlternateName() 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 clave de cifrado de datos a modificar.

  • El segundo parámetro debe ser una string única. getKeyVault() crea un índice único en keyAltNames para 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. Utiliza KeyVault.getKey() para recuperar la clave de cifrado de datos modificada.

Remover nombre alternativo clave

Utilice para eliminar un nombre alternativo de clave de una clave de cifrado de KeyVault.removeKeyAlternateName() 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 clave de cifrado de datos 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. Utiliza KeyVault.getKey() para recuperar la clave de cifrado de datos modificada.

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 todavía se encuentra dentro mongosh de la sesión configurada en los pasos Crear una clave de cifrado de datos anteriores, puede saltar directamente al 5 paso.

Utilice las pestañas a continuación para seleccionar el KMS apropiado para su implementación:

1

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_ID

  • AWS_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.

2

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
}
}
}
3

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 obtener documentación completa sobre cómo establecer conexiones de bases de datos configuradas para el cifrado a nivel de campo del lado del cliente, consulte la referencia del Mongo() constructor.

4

Utilice el método en getKeyVault() el csfleDatabaseConnection objeto de conexión de base de datos para crear el keyVault objeto:

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().

5

Utilice el método en KeyVault.deleteKey() el keyVault objeto para eliminar una clave de datos del almacén de claves:

keyVault.deleteKey(UUID("<Replace Me With The UUID Of The Key To Delete"))
1

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_ID

  • AZURE_CLIENT_ID

  • AZURE_CLIENT_SECRET

A continuación, cree una sesión mongosh --eval --shellutilizando --nodb las opciones, y:

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.

2

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
}
}
}
3

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 obtener documentación completa sobre cómo establecer conexiones de bases de datos configuradas para el cifrado a nivel de campo del lado del cliente, consulte la referencia del Mongo() constructor.

4

Utilice el método en getKeyVault() el csfleDatabaseConnection objeto de conexión de base de datos para crear el keyVault objeto:

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().

5

Utilice el método en KeyVault.deleteKey() el keyVault objeto para eliminar una clave de datos del almacén de claves:

keyVault.deleteKey(UUID("<Replace Me With The UUID Of The Key To Delete"))
1

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_EMAIL

  • GCP_PRIVATEKEY

A continuación, cree una sesión mongosh --eval --shellutilizando --nodb las opciones, y:

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.

2

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
}
}
}
3

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 obtener documentación completa sobre cómo establecer conexiones de bases de datos configuradas para el cifrado a nivel de campo del lado del cliente, consulte la referencia del Mongo() constructor.

4

Utilice el método en getKeyVault() el csfleDatabaseConnection objeto de conexión de base de datos para crear el keyVault objeto:

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().

5

Utilice el método en KeyVault.deleteKey() el keyVault objeto para eliminar una clave de datos del almacén de claves:

keyVault.deleteKey(UUID("<Replace Me With The UUID Of The Key To Delete"))
1

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

Su sistema operativo host o shell puede tener diferentes procedimientos para configurar variables de entorno persistentes. Consulte la documentación de su sistema operativo host o shell para obtener un procedimiento más específico, según corresponda.

2

Cree una sesión mongosh --eval --shellutilizando --nodb las opciones, y:

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.

3

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)
}
}
}
4

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 obtener documentación completa sobre cómo establecer conexiones de bases de datos configuradas para el cifrado a nivel de campo del lado del cliente, consulte la referencia del Mongo() constructor.

5

Utilice el método en getKeyVault() el csfleDatabaseConnection objeto de conexión de base de datos para crear el keyVault objeto:

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().

6

Utilice el método en KeyVault.deleteKey() el keyVault objeto para eliminar una clave de datos del almacén de claves:

keyVault.deleteKey(UUID("<Replace Me With The UUID Of The Key To Delete"))

Para recuperar un documento de llave de cifrado de datos existente del archivo de llaves, ya sea:

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.

Volver

Gestión de claves maestras y de cifrado de datos

En esta página