Criptografia automática
Nesta página
O MongoDB oferece suporte à criptografia automática de campos em operações de leitura e gravação ao usar a criptografia no nível do campo do lado do cliente. Você pode executar a criptografia automática usando mongosh
e drivers oficiais do MongoDB . Para obter uma lista completa de drivers oficiais compatíveis com suporte para CSFLE, consulte Compatibilidade de drivers Compatibilidade de drivers de criptografia de nível de campo do lado do cliente.
Como funcionam as gravações e leituras criptografadas
Os diagramas a seguir mostram como o aplicativo cliente e o driver gravam e leem dados criptografados em nível de campo.
Gravações criptografadas
Para operações de gravação, o driver criptografa os valores de campo antes de gravar no banco de dados MongoDB.
O diagrama a seguir mostra as etapas seguidas pelo aplicativo cliente e pelo driver para executar uma gravação de dados criptografados em nível de campo:
Leituras criptografadas
Para operações de leitura, o driver criptografa os valores de campo na query antes de emitir a operação de leitura.
Para operações de leitura que retornam campos criptografados, o driver descriptografa automaticamente os valores criptografados somente se o driver foi configurado com acesso à Chave Mestra do Cliente (CMK) e às Chaves de Criptografia de Dados (DEK) usadas para criptografar esses valores.
O diagrama a seguir mostra as etapas realizadas pelo aplicativo cliente e pelo driver para consultar e descriptografar dados criptografados em nível de campo:
Habilitando a criptografia automática em nível de campo do lado do cliente
Para habilitar a criptografia automática, especifique as configurações de criptografia automática na instância MongoClient
do seu cliente.
Os seguintes trechos de código mostram como criar um cliente com criptografia automática habilitada em drivers do mongosh
e MongoDB:
var autoEncryptionOpts = { "keyVaultNamespace" : "<database>.<collection>", "kmsProviders" : { ... }, "schemaMap" : { ... } } cluster = Mongo( "<Your Connection String>", autoEncryptionOpts );
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, { 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 obter mais informações sobre as configurações do MongoClient
específicas do CSFLE, consulte Opções do MongoClient para CSFLE.
Aplicação de criptografia em nível de campo no lado do servidor
O MongoDB suporta o uso de validação de esquema para impor a criptografia de campos específicos em uma coleção. Os clientes que executam a criptografia automática em nível de campo do lado do cliente têm um comportamento específico, dependendo da configuração da conexão com o banco de dados:
Se o objeto autoEncryptionOpts
schemaMap
da conexão contiver uma chave para a coleção especificada, o cliente usará esse objeto para executar a criptografia automática no nível do campo e ignorará o esquema remoto. No mínimo, as regras locais devem criptografar os campos que o esquema remoto marca como exigindo criptografia.Se a conexão autoEncryptionOpts
schemaMap
objeto não contiver uma chave para a coleção especificada, o cliente baixará o esquema remoto do lado do servidor para a coleção e o usará para executar a criptografia automática em nível de campo.Importante
Considerações de comportamento
O MongoDB usa validação de esquema para impor a criptografia de campos específicos em uma coleção. Sem um esquema do lado do cliente, o cliente faz download do esquema do lado do servidor para que a coleção determine quais campos criptografar. Para evitar esse problema, use a validação de esquema do lado do cliente.
Como o CSFLE e a Queryable Encryption não fornecem um mecanismo para verificar a integridade de um esquema, depender de um esquema do lado do servidor significa confiar que o esquema do servidor não foi adulterado. Se um invasor comprometer o servidor, ele poderá modificar o esquema para que um campo criptografado anteriormente não seja mais rotulado para criptografia. Isso faz com que o cliente envie valores de texto simples para esse campo.