KeyVault.rewrapManyDataKey()
Nesta página
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, consulteChaves .
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.KeyVault.rewrapManyDataKey
tem a seguinte sintaxe:let keyVault = db.getMongo().getKeyVault() keyVault.rewrapManyDataKey( <filter>, <options> ) ParâmetroTipoDescriçãofilter
O query filtro para a collection de cofres de chavesoptions
documentoEste documento tem dois campos:
provider
: Um KMS provider (Amazon Web Services KMS, Azure Key Vault, GCP KMS, o provedor local ou KMIP)masterKey
: Uma chave específica do KMS usada para criptografar a nova chave de dados
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 um backup de uma collection, consulte Fazer backup e restaurar uma implantação autogerenciada com as ferramentas do MongoDB .
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
Os métodos de criptografia de nível de campo do lado do cliente mongosh
exigem uma conexão de banco de dados com a criptografia de nível de campo do lado do cliente ativada. 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.
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 deKMS suportado, consulte Gerenciamento de chaves de criptografia.
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 KeyVault
e use o método KeyVault.rewrapManyDataKey()
para reembrulhar as chaves existentes em um novo masterKey
. Se nenhum novo masterKey
for fornecido, cada chave de dados manterá seu respectivo masterKey
atual .
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()
retorna um objeto BulkWriteResult
detalhando quantas chaves de dados foram afetadas:
{ 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 } } } }