KeyVault.rewrapManyDataKey(filter, options)Descriptografa várias chaves de criptografia de dados (DEK) e as criptografa novamente com uma nova chave mestra do cliente (CMK). Use este método para girar a CMK que criptografa suas DEKs. Para saber mais sobre CMKs e DEKs, consulte Chaves de criptografia e Key Vaults.
Você especifica uma chave mestra do cliente por meio do parâmetro
masterKey. Se você não incluir um argumentomasterKey, o método descriptografará e criptografará cada DEK com a chave mestra do cliente referenciada nos metadados desse DEK. Para saber mais sobre os metadados dos DEKs, consulte Metadados usados para descriptografia.Retorna: Um objeto BulkWriteResult que relata quantas chaves de dados foram afetadas.
Aviso
Faça backup da sua collection de cofre de chaves
Antes de girar seu diretório de dados, certifique-se de criar uma cópia de segurança da sua collection de cofre de chaves. Se você perder o acesso ao seu diretório de dados, perderá todos os seus dados criptografados.
Para saber como criar uma cópia de segurança de uma coleção, consulte Fazer backup e restaurar com ferramentas MongoDB.
Compatibilidade
Esse comando está disponível em implantações hospedadas nos seguintes ambientes:
- MongoDB Atlas: The fully managed service for MongoDB deployments in the cloud
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
KeyVault.rewrapManyDataKey tem a seguinte sintaxe:
let keyVault = db.getMongo().getKeyVault() keyVault.rewrapManyDataKey( <filter>, <options> )
Parâmetro | Tipo | Descrição |
|---|---|---|
| O query filtro para a collection de cofres de chaves | |
| documento | Este documento tem dois campos:
|
Importante
Suporte de rotação de chaves
Para visualizar as dependências do driver para a API de rotação de chaves, consulte Compatibilidade.
Comportamento
Esta operação não é atômica e não deve ser executada em paralelo com outras operações de gerenciamento de chaves.
Requer a configuração da criptografia no nível do campo do lado do cliente na conexão do reconhecimento de data center
The mongosh ClientEncryption methods require a database connection with in-use encryption enabled. If the current database connection was not initiated with in-use encryption enabled, either:
Use the
mongoshcommand line options to establish a connection with the required options. The command line options only support the Amazon Web Services KMS provider for CMK management.
Exemplo
Esses exemplos permitem que você avalie rapidamente a criptografia no nível do campo do lado do cliente. Para obter exemplos específicos usando cada provedor de KMS suportado, consulte Gerenciamento de Chaves de Criptografia.
Criar as opções de criptografia em nível de campo do lado do cliente
Crie as opções de criptografia no nível do campo do lado do cliente usando a string de chave local gerada:
let autoEncryptionOpts = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "local" : { "key" : BinData(0, TEST_LOCAL_KEY) } } }
Crie seu cliente criptografado
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 )
Retrieve the KeyVault object and use the KeyVault.rewrapManyDataKey() method to rewrap the existing keys in a new masterKey. If no new masterKey is given, each data key retains its respective current masterKey.
Reenrole as chaves de dados com a chave mestre atual
O exemplo a seguir mostra como você pode retrair cada chave de dados com seu respectivo masterKey atual :
let keyVault = mongo.getKeyVault() keyVault.rewrapManyDataKey()
Reenvolva as chaves de dados com uma nova chave mestre
O exemplo a seguir mostra como você pode retrair cada chave de dados com um novo masterKey:
let keyVault = mongo.getKeyVault() keyVault.rewrapManyDataKey({}, { provider: 'aws', masterKey: { region: 'us-east-2', key: 'arn:aws:kms:us-east-2:...' } })
Reenrole chaves de dados que não foram reenvolvidas recentemente
O exemplo a seguir mostra como reencapsular chaves de dados que não foram reencapsuladas nos trinta dias anteriores.
let keyVault = mongo.getKeyVault() const thirtyDaysAgo = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000); keyVault.rewrapManyDataKey({ updateDate: { $lt: thirtyDaysAgo } });
Saída
KeyVault.rewrapManyDataKey() returns a BulkWriteResult object detailing how many data keys were affected:
{ bulkWriteResult: BulkWriteResult { result: { ok: 1, writeErrors: [], writeConcernErrors: [], insertedIds: [], nInserted: 0, nUpserted: 0, nMatched: 3, nModified: 3, nRemoved: 0, upserted: [], opTime: { ts: Timestamp({ t: 1655840760, i: 3 }), t: 23 } } } }