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

cifrado a nivel de campo

Al trabajar con un MongoDB Enterprise o el clúster de MongoDB Atlas, puedes usar mongosh configurar Queryable Encryption Cifrado a nivel de campo del lado del cliente y conectarse con soporte de cifrado. Tanto Queryable Encryption como CSFLE utilizan llaves de cifrado de datos para soportar el cifrado y descifrado de valores de campos, y almacenan este material de llave de cifrado en un Key Management Service (KMS).

mongosh soporta los siguientes proveedores de KMS para su uso con Queryable Encryption y CSFLE:

  • Amazon Web Services KMS

  • Azure Key Vault

  • Google Cloud Platform KMS

  • Archivo clave gestionado localmente

El siguiente procedimiento utiliza mongosh para crear una llave de cifrado de datos para encriptación a nivel de campo.

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

1

Cree una sesión mongosh sin conectarse a una base de datos en ejecución mediante el uso de --nodb opción:

mongosh --nodb
2

Configurar el cifrado a nivel de campo en el lado del cliente para el AWS KMS requiere un AWS Access Key ID y su correspondiente Secret Access Key. La clave de acceso de AWS debe corresponder a un usuario de IAM con todos los permisos de listar y leer para el servicio KMS.

En mongosh, cree una nueva variable AutoEncryptionOpts para almacenar la configuración de cifrado a nivel de campo del lado del cliente, que contiene estas credenciales:

var autoEncryptionOpts = {
"keyVaultNamespace" : "encryption.__dataKeys",
"kmsProviders" : {
"aws" : {
"accessKeyId" : "YOUR_AWS_ACCESS_KEY_ID",
"secretAccessKey" : "YOUR_AWS_SECRET_ACCESS_KEY"
}
}
}

Completa los valores de YOUR_AWS_ACCESS_KEY_ID y YOUR_AWS_SECRET_ACCESS_KEY según corresponda.

3

En mongosh, utiliza el constructor Mongo() para establecer una conexión de base de datos con el clúster objetivo. Especifica el documento AutoEncryptionOpts como el segundo parámetro del constructor Mongo() para configurar la conexión para el cifrado a nivel de campo del lado del cliente:

csfleDatabaseConnection = Mongo(
"mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster",
autoEncryptionOpts
)

Reemplace la replaceMe.example.net URI con la cadena de conexión para el clúster de destino.

4

Crea el objeto keyVault utilizando el método de shell getKeyVault():

keyVault = csfleDatabaseConnection.getKeyVault();
5

Crea la clave de cifrado de datos utilizando el método shell createKey() :

keyVault.createKey(
"aws",
{ region: "regionname", key: "awsarn" },
[ "keyAlternateName" ]
)

Dónde:

Si tiene éxito, createKey() devuelve el UUID de la nueva llave de cifrado de datos. Para recuperar el nuevo documento de clave de cifrado de datos de la bóveda de claves, se puede:

  • Utilice para recuperar la getKey() clave creada por su UUID, o

  • Utilice getKeyByAltName() para recuperar la clave por su nombre alternativo, si se especifica.

1

Cree una mongosh sesión sin conectarse a una base de datos en ejecución utilizando la --nodb opción:

mongosh --nodb
2

Configurar el cifrado a nivel de campo en el lado del cliente para Azure Key Vault requiere un ID de Tenant, un ID de Cliente y un Cliente Secreto válidos.

En mongosh, cree una nueva variable AutoEncryptionOpts para almacenar la configuración de cifrado a nivel de campo del lado del cliente, que contiene estas credenciales:

var autoEncryptionOpts = {
"keyVaultNamespace" : "encryption.__dataKeys",
"kmsProviders" : {
"azure" : {
"tenantId" : "YOUR_TENANT_ID",
"clientId" : "YOUR_CLIENT_ID",
"clientSecret" : "YOUR_CLIENT_SECRET"
}
}
}

Complete los valores para YOUR_TENANT_ID, YOUR_CLIENT_ID y YOUR_CLIENT_SECRET según corresponda.

3

En mongosh, utiliza el constructor Mongo() para establecer una conexión de base de datos con el clúster objetivo. Especifica el documento AutoEncryptionOpts como el segundo parámetro del constructor Mongo() para configurar la conexión para el cifrado a nivel de campo del lado del cliente:

csfleDatabaseConnection = Mongo(
"mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster",
autoEncryptionOpts
)

Reemplace la replaceMe.example.net URI con la cadena de conexión para el clúster de destino.

4

Crea el objeto keyVault utilizando el método de shell getKeyVault():

keyVault = csfleDatabaseConnection.getKeyVault();
5

Crea la clave de cifrado de datos utilizando el método shell createKey() :

keyVault.createKey(
"azure",
{ keyName: "keyvaultname", keyVaultEndpoint: "endpointname" },
[ "keyAlternateName" ]
)

Dónde:

  • El primer parámetro debe ser "azure" para especificar el Azure Key Vault configurado.

  • El segundo parámetro debe ser un documento que contenga:

    • el nombre de tu Azure Key Vault

    • el nombre DNS de Azure Key Vault que se va a usar (por ejemplo, my-key-vault.vault.azure.net)

  • El tercer parámetro puede ser un arreglo de uno o más 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. Los nombres alternativos de claves facilitan la localización de la clave de cifrado de datos.

Si tiene éxito, createKey() devuelve el UUID de la nueva llave de cifrado de datos. Para recuperar el nuevo documento de clave de cifrado de datos de la bóveda de claves, se puede:

  • Utilice para recuperar la getKey() clave creada por su UUID, o

  • Utilice getKeyByAltName() para recuperar la clave por su nombre alternativo, si se especifica.

1

Cree una mongosh sesión sin conectarse a una base de datos en ejecución utilizando la --nodb opción:

mongosh --nodb
2

La configuración del cifrado a nivel de campo del lado del cliente para el GCP KMS requiere el correo electrónico de GCP y su llave privada asociada.

En mongosh, cree una nueva variable AutoEncryptionOpts para almacenar la configuración de cifrado a nivel de campo del lado del cliente, que contiene estas credenciales:

var autoEncryptionOpts = {
"keyVaultNamespace" : "encryption.__dataKeys",
"kmsProviders" : {
"gcp" : {
"email" : "YOUR_GCP_EMAIL",
"privateKey" : "YOUR_GCP_PRIVATEKEY"
}
}
}

Completa los valores de YOUR_GCP_EMAIL y YOUR_GCP_PRIVATEKEY según corresponda.

3

En mongosh, utiliza el constructor Mongo() para establecer una conexión de base de datos con el clúster objetivo. Especifica el documento AutoEncryptionOpts como el segundo parámetro del constructor Mongo() para configurar la conexión para el cifrado a nivel de campo del lado del cliente:

csfleDatabaseConnection = Mongo(
"mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster",
autoEncryptionOpts
)

Reemplace la replaceMe.example.net URI con la cadena de conexión para el clúster de destino.

4

Crea el objeto keyVault utilizando el método de shell getKeyVault():

keyVault = csfleDatabaseConnection.getKeyVault();
5

Crea la clave de cifrado de datos utilizando el método shell createKey() :

keyVault.createKey(
"gcp",
{ projectId: "projectid",
location: "locationname",
keyRing: "keyringname",
keyName: "keyname"
},
[ "keyAlternateName" ]
)

Dónde:

  • El primer parámetro debe ser "gcp" para especificar el Google Cloud KMS configurado.

  • El segundo parámetro debe ser un documento que contenga

    • 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 la unicidad en el campo, si aún no existe. Los nombres alternativos de claves facilitan la localización de la clave de cifrado de datos.

Si tiene éxito, createKey() devuelve el UUID de la nueva llave de cifrado de datos. Para recuperar el nuevo documento de clave de cifrado de datos de la bóveda de claves, se puede:

  • Utilice para recuperar la getKey() clave creada por su UUID, o

  • Utilice getKeyByAltName() para recuperar la clave por su nombre alternativo, si se especifica.

1

Cree una mongosh sesión sin conectarse a una base de datos en ejecución utilizando la --nodb opción:

mongosh --nodb
2

Para configurar el cifrado a nivel de campo del lado del cliente para una clave administrada localmente, debe especificar una cadena de 96bytes codificada en base64sin saltos de línea. Ejecute el siguiente comando en mongosh para generar una clave que cumpla estos requisitos:

crypto.randomBytes(96).toString('base64')

Necesitarás esta clave en el siguiente paso.

3

En mongosh, crea una nueva variable AutoEncryptionOpts para almacenar la configuración de cifrado a nivel de campo del lado del cliente, reemplazando MY_LOCAL_KEY con la clave generada en el paso 1:

var autoEncryptionOpts = {
"keyVaultNamespace" : "encryption.__dataKeys",
"kmsProviders" : {
"local" : {
"key" : BinData(0, "MY_LOCAL_KEY")
}
}
}
4

En mongosh, utiliza el constructor Mongo() para establecer una conexión de base de datos con el clúster objetivo. Especifica el documento AutoEncryptionOpts como el segundo parámetro del constructor Mongo() para configurar la conexión para el cifrado a nivel de campo del lado del cliente:

csfleDatabaseConnection = Mongo(
"mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster",
autoEncryptionOpts
)
5

Crea el objeto keyVault utilizando el método de shell getKeyVault():

keyVault = csfleDatabaseConnection.getKeyVault();
6

Crea la clave de cifrado de datos utilizando el método shell createKey() :

keyVault.createKey(
"local",
[ "keyAlternateName" ]
)

Dónde:

  • El primer parámetro debe ser 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() devuelve el UUID de la nueva llave de cifrado de datos. Para recuperar el nuevo documento de clave de cifrado de datos de la bóveda de claves, se puede:

  • Utilice para recuperar la getKey() clave creada por su UUID, o

  • Utilice getKeyByAltName() para recuperar la clave por su nombre alternativo, si se especifica.

Tip

Volver

Ejecutar pipelines de agregación

En esta página