Menu Docs

chave de criptografia e cofres de chaves

Este guia contém mais informações sobre os seguintes componentes da criptografia em execução:

  • Chaves de criptografia de dados (DEK)s

  • Chaves Mestres do Cliente (CMK)s

  • Key Vault collections

  • Sistema de Gerenciamento de Chaves (KMS)

Para visualizar guias passo a passo que demonstram como usar os componentes anteriores para configurar um cliente habilitado para Queryable Encryption ou Client-Side Field Level Encryption, consulte os seguintes recursos:

A criptografia em uso usa uma hierarquia de chaves de vários níveis para proteger seus dados, geralmente chamada de "criptografia de envelope" ou "chaves de encapsulamento".

Uma Chave Mestra do Cliente (CMK), às vezes chamada de chave KMS (Sistema de Gerenciamento de Chaves), é a chave de nível superior que você cria no provedor de chaves provisionadas pelo cliente, como um KMS na nuvem. O CMK criptografa as Chaves de Criptografia de Dados (DEK), que, por sua vez, criptografam os campos em seus documentos. Sem acesso a um CMK, seu aplicativo cliente não pode descriptografar os DEKs associados.

O MongoDB armazena DEKs, criptografadas com sua CMK, na collection Key Vault como documentos BSON. O MongoDB nunca pode descriptografar os DEKs, pois o gerenciamento de chaves é controlado pelo cliente e pelo cliente.

Se você excluir uma DEK, todos os campos criptografados com essa DEK ficarão permanentemente ilegíveis. Se você excluir um CMK, todos os campos criptografados com um DEK usando esse CMK ficarão permanentemente ilegíveis.

Aviso

A Chave Mestra do Cliente é a chave mais sensível na criptografia consultável. Se o seu CMK estiver comprometido, todos os seus dados criptografados poderão ser descriptografados. Use um sistema de Gerenciamento de Chaves Remoto para armazenar sua CMK.

Importante

Use um fornecedor de serviços de gerenciamento de chaves remoto

Armazene sua Chave Mestre do Cliente em um Sistema de Gerenciamento de Chaves Remotas (KMS).

Para saber mais sobre por que você deve usar um KMS remoto, consulte Motivos para usar um Sistema de Gerenciamento de Chaves Remotas.

Para visualizar uma lista de todos os provedores KMS suportados, consulte a página Provedores KMS.

Você gira sua chave mestra do cliente manual ou automaticamente no provedor de chaves provisionado. O MongoDB não tem visibilidade desse processo. Depois de girar a chave mestra do cliente, o MongoDB a usará para envolver todos os novos DEKs. Ele não envolve DEKs criptografados existentes. Eles ainda estão agrupados com a chave mestra do cliente anterior.

Para girar alguns ou todos os DEKs criptografados em seu cofre de chave, utilize o método KeyVault.rewrapManyDataKey(). Ele reenrola perfeitamente as chaves com o novo CMK especificado, sem interromper seu aplicativo. Os próprios DEKs são deixados inalterados após re-embrulhá-los com o novo CMK.

Para obter detalhes sobre chaves rotativas, consulte Girar chaves de criptografia.

Sua coleção Key Vault é a coleção do MongoDB que você usa para armazenar documentosDEK (Data Encryption Key) criptografados. Os documentos DEK são documentos BSON que contêm DEKs e têm a seguinte estrutura:

{
"_id" : UUID(<string>),
"status" : <int>,
"masterKey" : {<object>},
"updateDate" : ISODate(<string>),
"keyMaterial" : BinData(0,<string>),
"creationDate" : ISODate(<string>),
"keyAltNames" : <array>
}

Crie uma Key Vault collection igual criaria uma collection padrão do MongoDB. Sua Key Vault collection deve ter um índice único no campo keyAltNames. Para conferir se o índice único existe, execute o comando listIndexes na Key Vault collection:

1db.runCommand({
2 listIndexes: "__keyVault",
3});
1{
2 cursor: {
3 id: Long("0"),
4 ns: 'encryption.__keyVault',
5 firstBatch: [
6 { v: 2, key: { _id: 1 }, name: '_id_' }
7 ]
8 },
9 ok: 1,
10}

Se o índice único não existir, seu aplicativo deverá criá-lo antes de executar o gerenciamento DEK.

Para saber como criar uma collection do MongoDB, consulte Bancos de dados e coleções.

Dica

Funcionalidade mongosh

O método { mongosh KeyVault.createKey() cria automaticamente um índice único no campo keyAltNames se não existir.

Para exibir diagramas detalhando como suas collections DEK, CMK e Key Vault interagem em todas as arquiteturas de provedor KMS compatíveis, consulte Provedores KMS.

Você pode usar qualquer namespace que não seja de administrador para armazenar sua collection do Key Vault. Por convenção, os exemplos ao longo desta documentação utilizam o namespace do encryption.__keyVault.

Aviso

Não use o banco de dados admin para armazenar collections relacionadas à criptografia. Se você usar o banco de dados admin para essa collection, o cliente MongoDB não conseguirá acessar ou descriptografar seus dados devido à falta de permissões.

Os aplicativos com acesso read à coleção do Cofre de Chaves podem recuperar DEKs(Chave de Criptografia de Dados) criptografada consultando a coleção. No entanto, somente aplicativos com acesso à Chave Mestra do Cliente (CMK) usada para criptografar uma DEK podem usar essa DEK para criptografia ou descriptografia. Você deve conceder ao seu aplicativo acesso à coleção do Cofre de Chaves e à sua CMK para criptografar e descriptografar documentos com uma DEK.

Para saber como conceder acesso a uma coleção MongoDB, consulte Gerenciar usuários e funções no manual MongoDB.

Para saber como conceder ao seu aplicativo acesso à sua Chave Mestre do Cliente, consulte o Tutorial de Criptografia Automática do Queryable Encryption ou o Tutorial de Criptografia Automática do CSFLE.

Por padrão, o MongoDB armazena a Key Vault Collection no cluster conectado. O MongoDB também oferece suporte à hospedagem da Key Vault Collection em uma implantação do MongoDB diferente do cluster conectado. Os aplicativos devem ter acesso tanto ao cluster que hospeda sua Key Vault Collection quanto ao cluster de conexão para executar operações de Queryable Encryption.

Para especificar o cluster que hospeda sua Key Vault Collection, use o campo keyVaultClient do objeto MongoClient do cliente. Para saber mais sobre as opções de configuração específicas no objeto MongoClient do seu cliente, consulte as Opções do Queryable Encryption ou as Opções do MongoClient para CSFLE.

Para adicionar uma DEK à sua collection do Key Vault, use o método createKey de um objeto ClientEncryption.

Para excluir ou atualizar um DEK, use um dos seguintes mecanismos:

  • O método rewrapManyDataKey

  • Operações de CRUD padrão

Para saber mais sobre o método rewrapManyDataKey, consulte a documentação do método para seu cliente ou driver:

Dica

Funcionalidades específicas do mongosh

Para exibir um tutorial que mostra como criar uma chave de criptografia de dados, consulte o Início Rápido da Queryable Encryption ou o Início Rápido do CSFLE.