Girar chaves de criptografia
A maioria dos requisitos regulatórios exige que uma chave gerenciada usada para descriptografar dados confidenciais seja rotacionada e substituída por uma nova chave uma vez por ano.
Observação
Desambiguação
Para reverter as chaves do banco de dados de dados configuradas com a cifra AES256-GCM após uma restauração do sistema de arquivos, consulte --eseDatabaseKeyRollover
.
O MongoDB oferece duas opções para rotação de chaves. Você pode girar o binário com uma nova instância que usa uma nova chave. Ou, se você estiver usando um servidor KMIP para gerenciamento de chaves, poderá girar a chave mestra do cliente.
Girar um conjunto de réplicas
Observação
Para evitar a alteração do quorum de gravação, nunca gire mais de um nó de conjunto de réplicas por vez.
Para um conjunto de réplicas, para rotacionar um membro:
Inicie uma nova instância do
mongod
, configurada para utilizar uma nova chave. Inclua a opção--replSet
com o nome da réplica definida como também quaisquer outras opções específicas para sua configuração, como--dbpath
e--bind_ip
.mongod --replSet myReplSet --enableEncryption \ --kmipServerName <KMIP Server HostName> \ --kmipServerCAFile ca.pem --kmipClientCertificateFile client.pem Conecte o
mongosh
à primária do conjunto de réplica.Adicione a instância ao conjunto de réplicas:
rs.add( { host: <host:port> } ) Aviso
Antes do MongoDB 5.0, um secundário recém-adicionado ainda conta como membro votante, embora não possa servir leituras nem se tornar primário até que seus dados sejam consistentes. Se você estiver executando uma versão do MongoDB anterior à 5.0 e adicionar um secundário com suas configurações
votes
epriority
maiores que zero, isso pode levar a um caso em que a maioria dos membros votantes está online, mas nenhum primário pode ser eleito. Para evitar tais situações, considere adicionar o novo secundário inicialmente compriority :0
evotes :0
. Em seguida, executers.status()
para garantir que o membro tenha feito a transição para o estadoSECONDARY
. Por fim, users.reconfig()
para atualizar sua prioridade e votos.Durante o processo de sincronização inicial, ocorre a nova criptografia dos dados com um conjunto totalmente novo de chaves de banco de dados, bem como uma nova chave de sistema.
Remova o nó antigo do conjunto de réplicas e exclua todos os seus dados. Para ver instruções, consulte Como remover nós de um conjunto de réplicas autogerenciadas
Rotação da chave mestra KMIP
Se você estiver usando um servidor KMIP para gerenciamento de chaves, poderá trocar a chave mestra do cliente, a única chave gerenciada externamente. Com a nova chave mestra, o armazenamento de chaves interno será criptografado novamente, mas as chaves do banco de dados permanecerão inalteradas. Isso evita a necessidade de criptografar novamente todo o conjunto de dados.
Gire a chave mestre para os membros secundários da réplica definir uma de cada vez.
Reinicie a secundária, incluindo a opção
--kmipRotateMasterKey
. Inclua quaisquer outras opções específicas para sua configuração, como--bind_ip
. Se o nó já incluir a opção--kmipKeyIdentifier
, atualize a opção--kmipKeyIdentifier
com a nova chave para utilizar, ou omita para solicitar uma nova chave do servidor KMIP:mongod --enableEncryption --kmipRotateMasterKey \ --kmipServerName <KMIP Server HostName> \ --kmipServerCAFile ca.pem --kmipClientCertificateFile client.pem Se estiver utilizando um arquivo de configuração, inclua o
security.kmip.rotateMasterKey
.Após a conclusão bem-sucedida da rotação da chave mestra e da recriptografia do armazenamento de chaves do banco de dados, o
mongod
será encerrado.Reinicie o secundário sem o parâmetro
--kmipRotateMasterKey
. Inclua quaisquer outras opções específicas para sua configuração, como--bind_ip
.mongod --enableEncryption --kmipServerName <KMIP Server HostName> \ --kmipServerCAFile ca.pem --kmipClientCertificateFile client.pem Se estiver utilizando um arquivo de configuração, remova a configuração do
security.kmip.rotateMasterKey
.
Reduza o conjunto de réplicas primário.
Conecte
mongosh
ao primário e users.stepDown()
para reduzir o primário e forçar a eleição de um novo primário:rs.stepDown() Quando
rs.status()
mostrar que o membro primário se afastou e outro membro assumiu o estadoPRIMARY
, gire a chave mestra para o membro que se afastou:Reinicie o membro com passo pendente, incluindo a opção
--kmipRotateMasterKey
. Inclua quaisquer outras opções específicas para sua configuração, como--bind_ip
. Se o membro já incluir a opção--kmipKeyIdentifier
, atualize a opção--kmipKeyIdentifier
com a nova chave para utilizar ou omitir.mongod --enableEncryption --kmipRotateMasterKey \ --kmipServerName <KMIP Server HostName> \ --kmipServerCAFile ca.pem --kmipClientCertificateFile client.pem Se estiver utilizando um arquivo de configuração, inclua o
security.kmip.rotateMasterKey
.Após a conclusão bem-sucedida da rotação da chave mestra e da recriptografia do armazenamento de chaves do banco de dados, o
mongod
será encerrado.Reinicie o membro suspenso sem a opção
--kmipRotateMasterKey
. Inclua quaisquer outras opções específicas para sua configuração, como--bind_ip
.mongod --enableEncryption --kmipServerName <KMIP Server HostName> \ --kmipServerCAFile ca.pem --kmipClientCertificateFile client.pem Se estiver utilizando um arquivo de configuração, remova a configuração do
security.kmip.rotateMasterKey
.