Docs Menu
Docs Home
/ /
Fundamentals
/ / /

cifrado automático

MongoDB admite el cifrado automático de campos en operaciones de lectura y escritura al usar el cifrado a nivel de campo del lado del cliente. Puede realizar el cifrado automático usando mongoshy controladores oficiales de MongoDB. Para obtener una lista completa de los controladores oficiales compatibles con CSFLE, consulte Compatibilidad de controladores. Compatibilidad con CSFLE.

Los siguientes diagramas muestran cómo la aplicación cliente y el controlador escriben y leen datos cifrados a nivel de campo.

Para las operaciones de escritura, el driver cifra los valores de los campos antes de escribirlos en la base de datos MongoDB.

El siguiente diagrama muestra los pasos que siguen la aplicación cliente y el controlador para realizar una escritura de datos cifrados a nivel de campo:

Diagrama que muestra el flujo de datos para una escritura de datos cifrados a nivel de campo

Para operaciones de lectura, el driver encripta los valores de campo en la query antes de realizar la operación de lectura.

Para las operaciones de lectura que devuelven campos cifrados, el controlador descifra automáticamente los valores cifrados solo si el controlador se configuró con acceso a la clave maestra del cliente (CMK) y las claves de cifrado de datos (DEK) utilizadas para cifrar esos valores.

El siguiente diagrama muestra los pasos que siguen la aplicación cliente y el controlador para consultar y descifrar datos cifrados a nivel de campo:

Diagrama que muestra el flujo de datos para consultar y leer datos cifrados a nivel de campo

Para habilitar el cifrado automático, especifique la configuración de cifrado automático en la instancia MongoClient de su cliente.

Los siguientes fragmentos de código muestran cómo crear un cliente con cifrado automático habilitado en mongosh y controladores MongoDB:

var autoEncryptionOpts =
{
"keyVaultNamespace" : "<database>.<collection>",
"kmsProviders" : { ... },
"schemaMap" : { ... }
}
cluster = Mongo(
"<Your Connection String>",
autoEncryptionOpts
);

Tip

Variables de entorno

Si es posible, considere definir las credenciales proporcionadas en kmsProviders como variables de entorno y luego pasarlas a mongosh mediante la opción. Esto minimiza la posibilidad de que --eval las credenciales se filtren en los registros.

var clientSettings = MongoClientSettings.FromConnectionString(_connectionString);
var autoEncryptionOptions = new AutoEncryptionOptions(
keyVaultNamespace: keyVaultNamespace,
kmsProviders: kmsProviders,
schemaMap: schemaMap,
extraOptions: extraOptions);
clientSettings.AutoEncryptionOptions = autoEncryptionOptions;
var client = new MongoClient(clientSettings);
autoEncryptionOpts := options.AutoEncryption().
SetKmsProviders(provider.Credentials()).
SetKeyVaultNamespace(keyVaultNamespace).
SetSchemaMap(schemaMap).
SetExtraOptions(extraOptions)
client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(uri).SetAutoEncryptionOptions(autoEncryptionOpts))
MongoClientSettings clientSettings = MongoClientSettings.builder()
.applyConnectionString(new ConnectionString("mongodb://localhost:27017"))
.autoEncryptionSettings(AutoEncryptionSettings.builder()
.keyVaultNamespace(keyVaultNamespace)
.kmsProviders(kmsProviders)
.schemaMap(schemaMap)
.extraOptions(extraOptions)
.build())
.build();
MongoClient mongoClient = MongoClients.create(clientSettings);
const secureClient = new MongoClient(connectionString, {
useNewUrlParser: true,
useUnifiedTopology: true,
monitorCommands: true,
autoEncryption: {
keyVaultNamespace,
kmsProviders,
schemaMap: patientSchema,
extraOptions: extraOptions,
},
});
fle_opts = AutoEncryptionOpts(
kms_providers,
key_vault_namespace,
schema_map=patient_schema,
**extra_options
)
client = MongoClient(connection_string, auto_encryption_opts=fle_opts)

Para obtener más información sobre las MongoClient configuraciones específicas de CSFLE,consulte Opciones de MongoClient específicas de CSFLE.

MongoDB admite la validación de esquemas para aplicar el cifrado de campos específicos en una colección. Los clientes que realizan el cifrado automático a nivel de campo del lado del cliente tienen un comportamiento específico según la configuración de la conexión a la base de datos:

  • Si el objeto de conexión autoEncryptionOpts schemaMap contiene una clave para la colección especificada, el cliente utiliza dicho objeto para realizar el cifrado automático a nivel de campo e ignora el esquema remoto. Como mínimo, las reglas locales deben cifrar los campos que el esquema remoto marca como que requieren cifrado.

  • Si el schemaMap objeto de conexión autoEncryptionOpts no contiene una clave para la colección especificada, el cliente descarga el esquema remoto del lado del servidor para la colección y lo utiliza para realizar el cifrado automático a nivel de campo.

    Importante

    Consideraciones sobre el comportamiento

    Cuando autoEncryptionOpts no contiene una clave para la colección especificada:

    • El cliente confía en que el servidor tiene un esquema válido con respecto al cifrado automático a nivel de campo.

    • El cliente utiliza el esquema remoto únicamente para realizar CSFLE automático. No aplica ninguna otra regla de validación especificada en el esquema.

Para saber cómo configurar la aplicación de CSFLE del lado del servidor, consulte Aplicación de esquemas del lado del servidor CSFLE.

Volver

Fundamentals

En esta página