ClientEncryption.encrypt()
Nesta página
ClientEncryption.encrypt(keyId, value, algorithm or encOptions)
ClientEncryption.encrypt()
criptografavalue
usando okeyId
especificado e o algoritmo especificado poralgorithm
ouencOptions
.encrypt()
suporta criptografia explícita (manual) de valores de campo.Retorna: Um binary data
objeto com subtipo 6.
Compatibilidade
Esse comando está disponível em implantações hospedadas nos seguintes ambientes:
MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB
Sintaxe
clientEncryption = db.getMongo().getClientEncryption() clientEncryption.encrypt( keyId, value, algorithm or encOptions, )
Parâmetro | Tipo | Descrição |
---|---|---|
|
| A chave de criptografia de dados para utilizar para criptografar O UUID é um |
| O valor a ser criptografado. | |
| string ou documento |
|
Comportamento
Crie uma conexão de reconhecimento de data center criptografada
Os métodos de nível do campo no lado do cliente e Queryable Encryption do mongosh
exigem uma conexão de banco de dados configurada para criptografia do lado do cliente. Se a conexão atual do banco de dados não tiver sido iniciada com a criptografia em nível de campo do lado do cliente ativada, faça o seguinte:
Use o construtor
Mongo()
domongosh
para estabelecer uma conexão com as opções necessárias de criptografia de nível de campo no lado do cliente. O métodoMongo()
é compatível com os seguintes provedores de serviço de gerenciamento de chaves (KMS) para o gerenciamento da chave mestra do cliente (CMK):
ou
Utilize as
mongosh
opções da linha de comando para estabelecer uma conexão com as opções exigidas. As opções de linha de comando são compatíveis apenas com o provedor Amazon Web Services KMS para gerenciamento da chave mestra do cliente.
Tipos de BSON não suportados
Você não pode usar encrypt()
para criptografar valores com os seguintes BSON types:
minKey
maxKey
null
undefined
Se criptografar um campo com AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic
, encrypt()
não suportará os seguintes BSON types:
double
decimal128
bool
object
array
Exemplos
Criptografia no nível de campo do cliente
O exemplo a seguir usa um KMS managed localmente para a configuração de criptografia no nível do campo do lado do cliente.
Para configurar a criptografia no nível do campo do lado do cliente para uma chave gerenciada localmente:
gerar uma string de 96 bytes codificada em base 64sem quebras de linha
use
mongosh
para carregar a chave
export TEST_LOCAL_KEY=$(echo "$(head -c 96 /dev/urandom | base64 | tr -d '\n')") mongosh --nodb
Crie o objeto de criptografia no nível do campo do lado do cliente usando a string de chave local gerada:
var autoEncryptionOpts = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "local" : { "key" : BinData(0, process.env["TEST_LOCAL_KEY"]) } } }
Use o construtor Mongo()
com as opções de criptografia de nível de campo do lado do cliente configuradas para criar uma conexão com o reconhecimento de data center. Substitua o URI mongodb://myMongo.example.net
pelo URI da string de conexão do cluster de destino.
encryptedClient = Mongo( "mongodb://myMongo.example.net:27017/?replSetName=myMongo", autoEncryptionOpts )
Recupere o objeto ClientEncryption
e utilize o método ClientEncryption.encrypt()
para criptografar um valor com uma chave de criptografia de dados UUID
específica e o algoritmo de criptografia:
clientEncryption = encryptedClient.getClientEncryption(); clientEncryption.encrypt( UUID("64e2d87d-f168-493c-bbdf-a394535a2cb9"), "123-45-6789", "AEAD_AES_256_CBC_HMAC_SHA_512-Random" )
Você também pode especificar o algoritmo usando um documento com um campo algorithm
:
clientEncryption = encryptedClient.getClientEncryption(); clientEncryption.encrypt( UUID("64e2d87d-f168-493c-bbdf-a394535a2cb9"), "123-45-6789", { algorithm: "AEAD_AES_256_CBC_HMAC_SHA_512-Random" } )
Se bem-sucedido, encrypt()
retorna o valor codificado:
BinData(6,"AmTi2H3xaEk8u9+jlFNaLLkC3Q/+kmwDbbWrq+h9nuv9W+u7A5a0UnpULBNZH+Q21fAztPpU09wpKPrju9dKfpN1Afpj1/ZhFcH6LYZOWSBBOAuUNjPLxMNSYOOuITuuYWo=")
Para obter a documentação completa sobre como iniciar conexões do MongoDB com a criptografia no nível do campo do lado do cliente habilitada, consulte Mongo()
.
Queryable Encryption
O exemplo a seguir usa um KMS gerenciado localmente para a configuração de Queryable Encryption.
A configuração da Queryable Encryption para uma chave gerenciada localmente requer a especificação de uma string de bytes64codificada em 96base sem quebras de linha. A seguinte operação gera uma chave que atende aos requisitos definidos e a carrega no mongosh
:
TEST_LOCAL_KEY=$(echo "$(head -c 96 /dev/urandom | base64 | tr -d '\n')") mongosh --nodb
Crie o objeto de criptografia no nível do campo do lado do cliente usando a string de chave local gerada:
var autoEncryptionOpts = { "keyVaultNamespace" : "encryption.__keyVault", "kmsProviders" : { "local" : { "key" : BinData(0, process.env["TEST_LOCAL_KEY"]) } } }
Utilize o construtor Mongo()
para criar uma conexão do banco de dados com as opções de Queryable Encryption. Substitua o URI mongodb://myMongo.example.net
pelo URI da string de conexão do cluster de destino.
encryptedClient = Mongo( "mongodb://myMongo.example.net:27017/?replSetName=myMongo", autoEncryptionOpts )
Recupere o objeto ClientEncryption
e utilize o método ClientEncryption.encrypt()
para criptografar um valor com uma chave de criptografia de dados UUID
específica e o algoritmo de criptografia:
const eDB = "encrypted" const eKV = "__keyVault" const clientEncryption = encryptedClient.getClientEncryption(); const keyVaultClient = Mongo().getDB(eDB).getCollection(eKV) const dek = keyVaultClient.findOne({ keyAltNames: "dataKey1" }) clientEncryption.encrypt( dek._id, "123-45-6789", "Unindexed" )
Você também pode especificar o algoritmo usando um documento contendo os campos:
algorithm
queryType
contentionFactor
const eDB = "encrypted" const eKV = "__keyVault" const clientEncryption = encryptedClient.getClientEncryption(); const keyVaultClient = Mongo().getDB(eDB).getCollection(eKV) const dek = keyVaultClient.findOne({ keyAltNames: "dataKey1" }) clientEncryption.encrypt( dek._id, "123-45-6789", { algorithm: "Indexed", queryType: "equality", contentionFactor: 4 } )
Se bem-sucedido, encrypt()
retorna o valor codificado:
Binary(Buffer.from("05b100000005640020000000005ab3581a43e39a8e855b1ac87013e841735c09d19ae86535eea718dd56122ba50573002000000000703d2cba9832d90436c6c92eb232aa5b968cdcd7a3138570bc87ef0a9eb3a0e905630020000000009cb61df010b1bb54670a5ad979f25f4c48889059dfd8920782cf03dd27d1a50b05650020000000003f5acea703ea357d3eea4c6a5b19139a580089341424a247839fd4d5cf0d312a12636d00040000000000000000", "hex"), 6)