Criptografia no nível de campo do cliente
Nesta página
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
Criar uma chave de criptografia de dados
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:
Inicie o mongosh
shell .
Crie uma sessão mongosh
sem conectar a um banco de banco de dados em execução usando a opção --nodb
:
mongosh --nodb
Criar a configuração de criptografia.
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.
Conecte-se ao suporte de criptografia.
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.
Crie o objeto Key Vault.
Crie o objeto keyVault
usando o método shell getKeyVault()
:
keyVault = csfleDatabaseConnection.getKeyVault();
Criar a chave de criptografia.
Crie a chave de criptografia de dados usando o método de shell createKey()
:
keyVault.createKey( "aws", { region: "regionname", key: "awsarn" }, [ "keyAlternateName" ] )
Onde:
O primeiro parâmetro deve ser
"aws"
para especificar o Amazon Web Services KMS configurado.O segundo parâmetro deve ser um documento contendo o seguinte:
a região do Amazon Web Services à qual você está se conectando, como
us-west-2
o nome Amazon do Amazon Web Services recurso da (ARN) à chave mestra do cliente (CMK) da .
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 emkeyAltNames
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 ouUse
getKeyByAltName()
para recuperar a chave pelo seu nome alternativo, se especificado.
Inicie o mongosh
shell .
Crie uma sessão mongosh
sem conectar-se a um banco de dados em execução usando a opção --nodb
:
mongosh --nodb
Criar a configuração de criptografia.
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.
Conecte-se ao suporte de criptografia.
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.
Crie o objeto Key Vault.
Crie o objeto keyVault
usando o método shell getKeyVault()
:
keyVault = csfleDatabaseConnection.getKeyVault();
Criar a chave de criptografia.
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 emkeyAltNames
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 ouUse
getKeyByAltName()
para recuperar a chave pelo seu nome alternativo, se especificado.
Inicie o mongosh
shell .
Crie uma sessão mongosh
sem conectar-se a um banco de dados em execução usando a opção --nodb
:
mongosh --nodb
Criar a configuração de criptografia.
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.
Conecte-se ao suporte de criptografia.
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.
Crie o objeto Key Vault.
Crie o objeto keyVault
usando o método shell getKeyVault()
:
keyVault = csfleDatabaseConnection.getKeyVault();
Criar a chave de criptografia.
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, comomy-project
locationname
é a localização do chaveiro KMS, comoglobal
keyringname
é o nome do chaveiro KMS, comomy-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 emkeyAltNames
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 ouUse
getKeyByAltName()
para recuperar a chave pelo seu nome alternativo, se especificado.
Inicie o mongosh
shell .
Crie uma sessão mongosh
sem conectar-se a um banco de dados em execução usando a opção --nodb
:
mongosh --nodb
Gere uma chave de criptografia.
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.
Criar a configuração de criptografia.
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") } } }
Conecte-se ao suporte de criptografia.
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 )
Crie o objeto Key Vault.
Crie o objeto keyVault
usando o método shell getKeyVault()
:
keyVault = csfleDatabaseConnection.getKeyVault();
Criar a chave de criptografia.
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 emkeyAltNames
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 ouUse
getKeyByAltName()
para recuperar a chave pelo seu nome alternativo, se especificado.