Criptografia no nível de campo do cliente
Criptografia no nível de campo do cliente
MongoDB 4.2 Acriptografia no nível do campo do lado do cliente ( permite que administradores e desenvolvedores criptografem campos de dados específicos, alémCSFLE de outros MongoDB recursos de criptografia do .
Com o CSFLE, os desenvolvedores podem criptografar campos do lado do cliente sem nenhuma configuração ou diretiva do lado do servidor. A criptografia no nível do campo do lado do cliente oferece suporte a cargas de trabalho em que os aplicativos devem garantir que partes não autorizadas, incluindo administradores de servidor, não possam ler os dados criptografados.
Para uma visão geral do CSFLE, leia a documentação oficial MongoDB no manual.
Instalação
libmongocrypt
A criptografia no nível do campo do lado do cliente depende de uma biblioteca C chamada libmongocrypt
para fazer o trabalho pesado de criptografia. Essa dependência é gerenciada pelo driver C. Desde que a instalação do driver C seja 1.16.0 ou superior e tenha sido compilada com suporte à criptografia em nível de campo do lado do cliente, essa dependência deve ser gerenciada internamente. Consulte o driver C Usando criptografia no nível do campo do lado do cliente para mais informações.
mongocryptd
O CSFLE automático depende de um novo binário chamado mongocryptd
em execução como um daemon enquanto o driver opera. Este binário está disponível apenas com o MongoDB Enterprise.
mongocryptd
pode ser iniciado separadamente do driver ou deixado para gerar automaticamente quando a criptografia é usada.
Para executar o mongocryptd separadamente, passe o sinalizador mongocryptdBypassSpawn
para as opções de criptografia automática do cliente:
auto mongocryptd_options = make_document(kvp("mongocryptdBypassSpawn", true)); options::auto_encryption auto_encrypt_opts{}; auto_encrypt_opts.extra_options({mongocryptd_options.view()});
Se o binário mongocryptd estiver no caminho atual, o driver poderá gerá-lo sem nenhum sinalizador personalizado. No entanto, se o binário mongocryptd estiver em um caminho diferente, defina o caminho com a opção mongocryptdSpawnPath
:
auto mongocryptd_options = make_document(kvp("mongocryptdSpawnPath", "path/to/mongocryptd")); options::auto_encryption auto_encrypt_opts{}; auto_encrypt_opts.extra_options({mongocryptd_options.view()});
Exemplos
Criptografia automática no nível do campo do lado do cliente
A criptografia automática em nível de campo do lado do cliente é habilitada criando um mongocxx::client
com a opção auto_encryption_opts
definida como uma instância de mongocxx::options::auto_encryption
. Os exemplos seguintes mostram como configurar a criptografia automática de nível de campo do lado do cliente utilizando a classe mongocxx::client_encryption
para criar uma nova chave de dados de criptografia.
Observação
A criptografia automática no nível do campo no lado do cliente requer MongoDB 4.2 enterprise ou MongoDB 4.2 Atlas cluster. A versão da comunidade do servidor oferece suporte à descriptografia automática, bem como à criptografia explícita no nível do campo do lado do cliente.
Fornecimento de regras de criptografia automática local
O exemplo a seguir mostra como especificar regras de criptografia automática por meio da opção schema_map. As regras de criptografia automática são expressas usando um subconjunto rigoroso da sintaxe do JSON schema.
Fornecer um schema_map
oferece mais segurança do que depender de JSON schemas obtidos do servidor. Ele protege contra um servidor malicioso que anuncia um falso JSON schema, que pode induzir o cliente a enviar dados não criptografados que devem ser criptografados.
Os JSON schemas fornecidos no schema_map
se aplicam somente à configuração automática da criptografia em nível de campo do lado do cliente. Outras regras de validação no JSON schema não serão aplicadas pelo driver e resultarão em um erro.
// // The schema map has the following form: // // { // "test.coll" : { // "bsonType" : "object", // "properties" : { // "encryptedFieldName" : { // "encrypt" : { // "keyId" : [ <datakey as UUID> ], // "bsonType" : "string", // "algorithm" : <algorithm> // } // } // } // } // } //
Consulte exemplos/mongocxx/automatic_client_side_field_level_encryption.cpp para obter um exemplo completo de como definir um JSON schema para criptografia automática.
Aplicação de criptografia em nível de campo no lado do servidor
O servidor MongoDB 4.2 suporta o uso da validação de esquema para impor a criptografia de campos específicos em uma coleção. Essa validação de esquema impedirá que um aplicativo insira valores não criptografados para quaisquer campos marcados com a palavra-chave "encrypt"
JSON schema.
É possível configurar a criptografia automática em nível de campo do lado do cliente usando o mongocxx::client_encryption
para criar uma nova chave de dados de criptografia e criar uma coleção com a sintaxe de JSON schema de criptografia automática.
// Please see the linked example below for full json_schema construction. bsoncxx::document::value json_schema{}; // Create the collection with the encryption JSON Schema. auto cmd = document{} << "create" << "coll" << "validator" << open_document << "$jsonSchema" << json_schema.view() << close_document << finalize; db.run_command(cmd.view());
Consulte exemplos/mongocxx/server_side_field_level_encryption_enforcement.cpp para obter um exemplo completo da configuração da imposição de criptografia no servidor.
Criptografia explícita
A criptografia explícita é um recurso MongoDB Community e não usa o processo mongocryptd
. A criptografia explícita é fornecida pela classe mongocxx::client_encryption
.
// Explicitly encrypt a BSON value. auto to_encrypt = bsoncxx::types::bson_value::make_value("secret message"); auto encrypted_message = client_encryption.encrypt(to_encrypt, encrypt_opts); // Explicitly decrypt a BSON value. auto decrypted_message = client_encryption.decrypt(encrypted_message);
Consulte exemplos/mongocxx/explicit_encryption.cpp para obter um exemplo completo do uso de criptografia explícita .
Criptografia explícita com descriptografia automática
Embora a criptografia automática exija MongoDB 4.2 enterprise ou MongoDB 4.2 Atlas cluster, a descriptografia automática é suportada para todos os usuários. Para configurar a descriptografia automática sem criptografia automática, configure bypass_auto_encryption=True
na classe options::auto_encryption
.
options::auto_encryption auto_encrypt_opts{}; auto_encrypt_opts.bypass_auto_encryption(true); // Please see full example for complete options construction. // Create a client with automatic decryption enabled, but automatic encryption bypassed. options::client client_opts{}; client_opts.auto_encryption_opts(std::move(auto_encrypt_opts)); class client client_encrypted {uri{}, std::move(client_opts)};
Consulte exemplos/mongocxx/explicit_encryption_auto_decryption.cpp para obter um exemplo de uso de criptografia explícita com descriptografia automática.