Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /
Gestión de clave maestra y de clave 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 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.

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

4

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

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

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, 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.

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

4

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

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

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, 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.

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

4

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

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

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

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.

2

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.

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

5

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

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 gestionada 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 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.

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:

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

4

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

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 las claves aplicada por el servidor. Valide que exista un índice único en keyAltNames antes 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 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

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. 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, 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.

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

4

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

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 las claves aplicada por el servidor. Valide que exista un índice único en keyAltNames antes 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 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

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. 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, 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.

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

4

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

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 las claves aplicada por el servidor. Valide que exista un índice único en keyAltNames antes 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 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

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

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.

2

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.

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

5

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

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 las claves aplicada por el servidor. Valide que exista un índice único en keyAltNames antes 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 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

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. 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 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:

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

4

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

5

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"))
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, 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.

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

4

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

5

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"))
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, 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.

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

4

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

5

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"))
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

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.

2

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.

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

5

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

6

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"))

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 clave maestra y de clave de cifrado de datos

En esta página