Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / / / /

Criptografia automática

Nesta página

  • Como funcionam as gravações e leituras criptografadas
  • Gravações criptografadas
  • Leituras criptografadas
  • Habilitando a criptografia automática em nível de campo do lado do cliente
  • Aplicação de criptografia em nível de campo no lado do servidor

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.

Os diagramas a seguir mostram como o aplicativo cliente e o driver gravam e leem dados criptografados em nível de campo.

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:

Diagrama que mostra o fluxo de dados de uma gravação de dados criptografados em nível de campo

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:

Diagrama que mostra o fluxo de dados para consulta e leitura de dados criptografados em nível de campo

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

Dica

Variáveis de ambiente

Se possível, considere a possibilidade de definir as credenciais disponibilizadas no kmsProviders como variáveis de ambiente e, em seguida, passá-las para mongosh utilizando a opção --eval. Isso minimiza as chances de vazamento de credenciais em logs.

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.

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.

Para saber como configurar a imposição de CSFLE no lado do servidor, consulte Aplicação do esquema CSFLE no lado do servidor.

Voltar

Fundamentals