Menu Docs
Página inicial do Docs
/
MongoDB Shell

Criptografia no nível de campo do cliente

Nesta página

  • Criar uma chave de criptografia de dados

Ao trabalhar com um cluster MongoDB Enterprise ou MongoDB Atlas cluster, você pode usar mongosh para configurar a criptografia em nível de campo do lado do cliente e conectar-se ao suporte de criptografia. A criptografia no nível do campo do lado do cliente usa chaves de criptografia de dados para oferecer suporte à criptografia e descriptografia de valores de campo e armazena esse material da chave de criptografia em um KMS (KMS).

mongosh compatível com os seguintes provedores de KMS para uso com criptografia de nível de campo do lado do cliente:

  • KMS do Amazon Web Services

  • Azure Key Vault

  • KMS do Google Cloud Platform

  • Arquivo de chave gerenciado localmente

O procedimento a seguir usa mongosh para criar um diretório de dados para usar com chave de criptografia e descriptografia no nível do campo no lado do cliente.

Use as guias abaixo para selecionar oKMS apropriado para seu sistema:

1

Crie uma sessão mongosh sem conectar a um banco de banco de dados em execução usando a opção --nodb :

mongosh --nodb
2

A configuração da criptografia em nível de campo do lado do cliente para o AWS KMS requer um ID de chave de acesso da AWS e sua chave de acesso secreta associada. A chave de acesso da AWS deve corresponder a um usuário do IAM com todas as permissões de lista e leitura para o serviço KMS.

Em mongosh, crie uma nova variável AutoEncryptionOpts para armazenar a configuração de criptografia em nível de campo no lado do cliente, que contém essas credenciais:

var autoEncryptionOpts = {
"keyVaultNamespace" : "encryption.__dataKeys",
"kmsProviders" : {
"aws" : {
"accessKeyId" : "YOUR_AWS_ACCESS_KEY_ID",
"secretAccessKey" : "YOUR_AWS_SECRET_ACCESS_KEY"
}
}
}

Preencha os valores para YOUR_AWS_ACCESS_KEY_ID e YOUR_AWS_SECRET_ACCESS_KEY conforme apropriado.

3

No mongosh, use o construtor Mongo() para estabelecer uma conexão de banco de dados com o cluster de destino. Especifique o documento AutoEncryptionOpts como o segundo parâmetro do construtor Mongo() para configurar a conexão para criptografia em nível de campo no lado do cliente:

csfleDatabaseConnection = Mongo(
"mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster",
autoEncryptionOpts
)

Substitua o URI do replaceMe.example.net pelo URI da string de conexão para o cluster de destino.

4

Crie o objeto keyVault usando o método shell getKeyVault():

keyVault = csfleDatabaseConnection.getKeyVault();
5

Crie a chave de criptografia de dados usando o método de shell createKey():

keyVault.createKey(
"aws",
{ region: "regionname", key: "awsarn" },
[ "keyAlternateName" ]
)

Onde:

Se for bem-sucedido, createKey() retorna o UUID da nova chave de criptografia de dados. Para recuperar o novo documento da chave de criptografia de dados do cofre de chaves:

  • Use getKey() para recuperar a chave criada por seu UUID ou

  • Use getKeyByAltName() para recuperar a chave pelo seu nome alternativo, se especificado.

1

Crie uma sessão mongosh sem conectar-se a um banco de dados em execução usando a opção --nodb :

mongosh --nodb
2

A configuração da criptografia em nível de campo do lado do cliente para o Azure Key Vault requer um ID de locatário, um ID de cliente e um segredo de cliente válidos.

Em mongosh, crie uma nova variável AutoEncryptionOpts para armazenar a configuração de criptografia em nível de campo no lado do cliente, que contém essas credenciais:

var autoEncryptionOpts = {
"keyVaultNamespace" : "encryption.__dataKeys",
"kmsProviders" : {
"azure" : {
"tenantId" : "YOUR_TENANT_ID",
"clientId" : "YOUR_CLIENT_ID",
"clientSecret" : "YOUR_CLIENT_SECRET"
}
}
}

Preencha os valores para YOUR_TENANT_ID, YOUR_CLIENT_ID e YOUR_CLIENT_SECRET conforme apropriado.

3

No mongosh, use o construtor Mongo() para estabelecer uma conexão de banco de dados com o cluster de destino. Especifique o documento AutoEncryptionOpts como o segundo parâmetro do construtor Mongo() para configurar a conexão para criptografia em nível de campo no lado do cliente:

csfleDatabaseConnection = Mongo(
"mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster",
autoEncryptionOpts
)

Substitua o URI do replaceMe.example.net pelo URI da string de conexão para o cluster de destino.

4

Crie o objeto keyVault usando o método shell getKeyVault():

keyVault = csfleDatabaseConnection.getKeyVault();
5

Crie a chave de criptografia de dados usando o método de shell createKey():

keyVault.createKey(
"azure",
{ keyName: "keyvaultname", keyVaultEndpoint: "endpointname" },
[ "keyAlternateName" ]
)

Onde:

  • O primeiro parâmetro deve ser "azure" para especificar o Azure Key Vault configurado.

  • O segundo parâmetro deve ser um documento contendo:

    • o nome do seu Azure Key Vault

    • o nome DNS do Azure Key Vault a ser usado (por exemplo my-key-vault.vault.azure.net)

  • O terceiro parâmetro pode ser uma array de um ou mais keyAltNames para a chave de criptografia de dados. Cada nome alternativo de chave deve ser exclusivo. getKeyVault() cria um índice único em keyAltNames para impor a exclusividade no campo, caso ainda não exista um. Nomes alternativos de chave facilitam a localização da chave de criptografia de dados.

Se for bem-sucedido, createKey() retorna o UUID da nova chave de criptografia de dados. Para recuperar o novo documento da chave de criptografia de dados do cofre de chaves:

  • Use getKey() para recuperar a chave criada por seu UUID ou

  • Use getKeyByAltName() para recuperar a chave pelo seu nome alternativo, se especificado.

1

Crie uma sessão mongosh sem conectar-se a um banco de dados em execução usando a opção --nodb :

mongosh --nodb
2

A configuração da criptografia no nível do campo do lado do cliente para o GCP KMS requer seu e-mail do GCP e sua chave privada associada.

Em mongosh, crie uma nova variável AutoEncryptionOpts para armazenar a configuração de criptografia em nível de campo no lado do cliente, que contém essas credenciais:

var autoEncryptionOpts = {
"keyVaultNamespace" : "encryption.__dataKeys",
"kmsProviders" : {
"gcp" : {
"email" : "YOUR_GCP_EMAIL",
"privateKey" : "YOUR_GCP_PRIVATEKEY"
}
}
}

Preencha os valores para YOUR_GCP_EMAIL e YOUR_GCP_PRIVATEKEY conforme apropriado.

3

No mongosh, use o construtor Mongo() para estabelecer uma conexão de banco de dados com o cluster de destino. Especifique o documento AutoEncryptionOpts como o segundo parâmetro do construtor Mongo() para configurar a conexão para criptografia em nível de campo no lado do cliente:

csfleDatabaseConnection = Mongo(
"mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster",
autoEncryptionOpts
)

Substitua o URI do replaceMe.example.net pelo URI da string de conexão para o cluster de destino.

4

Crie o objeto keyVault usando o método shell getKeyVault():

keyVault = csfleDatabaseConnection.getKeyVault();
5

Crie a chave de criptografia de dados usando o método de shell createKey():

keyVault.createKey(
"gcp",
{ projectId: "projectid",
location: "locationname",
keyRing: "keyringname",
keyName: "keyname"
},
[ "keyAlternateName" ]
)

Onde:

  • O primeiro parâmetro deve ser "gcp" para especificar o Google Cloud Platform KMS configurado.

  • O segundo parâmetro deve ser um documento contendo

    • projectid é o nome do seu projeto GCP, como my-project

    • locationname é a localização do chaveiro KMS, como global

    • keyringname é o nome do chaveiro KMS, como my-keyring

    • keyname é o nome da sua chave.

  • O terceiro parâmetro pode ser uma array de um ou mais keyAltNames para a chave de criptografia de dados. Cada nome alternativo de chave deve ser exclusivo. getKeyVault() cria um índice único em keyAltNames para impor a exclusividade no campo, caso ainda não exista um. Nomes alternativos de chave facilitam a localização da chave de criptografia de dados.

Se for bem-sucedido, createKey() retorna o UUID da nova chave de criptografia de dados. Para recuperar o novo documento da chave de criptografia de dados do cofre de chaves:

  • Use getKey() para recuperar a chave criada por seu UUID ou

  • Use getKeyByAltName() para recuperar a chave pelo seu nome alternativo, se especificado.

1

Crie uma sessão mongosh sem conectar-se a um banco de dados em execução usando a opção --nodb :

mongosh --nodb
2

Para configurar a criptografia no nível do campo do lado do cliente para uma chave gerenciada localmente, você deve especificar uma string de 96 bytes codificada em base64 sem quebras de linha. Execute o seguinte comando em mongosh para gerar uma chave que corresponda a estes requisitos:

crypto.randomBytes(96).toString('base64')

Você precisará desta chave na próxima etapa.

3

Em mongosh, crie uma nova variável AutoEncryptionOpts para armazenar a configuração de criptografia no nível do campo do lado do cliente, substituindo MY_LOCAL_KEY pela chave gerada na etapa 1:

var autoEncryptionOpts = {
"keyVaultNamespace" : "encryption.__dataKeys",
"kmsProviders" : {
"local" : {
"key" : BinData(0, "MY_LOCAL_KEY")
}
}
}
4

No mongosh, use o construtor Mongo() para estabelecer uma conexão de banco de dados com o cluster de destino. Especifique o documento AutoEncryptionOpts como o segundo parâmetro do construtor Mongo() para configurar a conexão para criptografia em nível de campo no lado do cliente:

csfleDatabaseConnection = Mongo(
"mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster",
autoEncryptionOpts
)
5

Crie o objeto keyVault usando o método shell getKeyVault():

keyVault = csfleDatabaseConnection.getKeyVault();
6

Crie a chave de criptografia de dados usando o método de shell createKey():

keyVault.createKey(
"local",
[ "keyAlternateName" ]
)

Onde:

  • O primeiro parâmetro deve ser local para especificar a chave gerenciada localmente configurada.

  • O segundo parâmetro pode ser uma array de um ou mais keyAltNames para a chave de criptografia de dados. Cada nome alternativo de chave deve ser exclusivo. getKeyVault() cria um índice único em keyAltNames para impor uma exclusividade no campo se ainda não existir um. Os principais nomes alternativos facilitam a localização da chave de criptografia de dados.

Se for bem-sucedido, createKey() retorna o UUID da nova chave de criptografia de dados. Para recuperar o novo documento da chave de criptografia de dados do cofre de chaves:

  • Use getKey() para recuperar a chave criada por seu UUID ou

  • Use getKeyByAltName() para recuperar a chave pelo seu nome alternativo, se especificado.

Dica

Veja também:

Voltar

Execute aggregation pipelines