Ao trabalhar com um cluster do MongoDB Enterprise ou MongoDB Atlas , você pode usar mongosh o para configurar o Queryable Encryption Client-Side Field Encryption e conectar-se ao suporte de criptografia. Tanto a Queryable Encryption quanto o CSFLE usam chaves de criptografia de dados para oferecer suporte à criptografia e descriptografia de valores de campo e armazenam esse material de chave de criptografia em um Serviço de Gerenciamento de Chaves (KMS).
mongosh suporta os seguintes fornecedores de KMS para uso com Queryable Encryption e CSFLE:
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 uma chave de criptografia de dados para criptografia em nível de campo .
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-2o Amazon Resource Name (ARN) para a chave mestra do cliente (CMK) do Amazon Web Services.
O terceiro parâmetro pode ser uma array de um ou mais
keyAltNamespara a chave de criptografia de dados. Cada nome alternativo de chave deve ser exclusivo.getKeyVault()cria um índice único emkeyAltNamespara 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
keyAltNamespara a chave de criptografia de dados. Cada nome alternativo de chave deve ser exclusivo.getKeyVault()cria um índice único emkeyAltNamespara 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-projectlocationnameé a localização do chaveiro KMS, comoglobalkeyringnameé o nome do chaveiro KMS, comomy-keyringkeynameé o nome da sua chave.
O terceiro parâmetro pode ser uma array de um ou mais
keyAltNamespara a chave de criptografia de dados. Cada nome alternativo de chave deve ser exclusivo.getKeyVault()cria um índice único emkeyAltNamespara 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
localpara especificar a chave gerenciada localmente configurada.O segundo parâmetro pode ser uma array de um ou mais
keyAltNamespara a chave de criptografia de dados. Cada nome alternativo de chave deve ser exclusivo.getKeyVault()cria um índice único emkeyAltNamespara 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.