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 com CSFLE.
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, { 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 obter mais informações sobre configurações do MongoClient
específicas do CSFLE, consulte Opções do MongoClient específicas do 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
Quando
autoEncryptionOpts
não contém uma chave para a coleção especificada:O cliente confia que o servidor tem um esquema válido em relação à criptografia automática de nível de campo.
O cliente usa o esquema remoto para executar somente o CSFLE automático. O cliente não força nenhuma outra regra de validação especificada no esquema.