La mayoría de los requisitos regulatorios exigen que una clave administrada utilizada para descifrar datos confidenciales debe rotarse y reemplazarse por una nueva clave una vez al año.
Nota
Desambiguación
Para cambiar las claves de la base de datos configuradas con el cifrado AES256-GCM después de una restauración del sistema de archivos, consulte --eseDatabaseKeyRollover en su lugar.
MongoDB ofrece dos opciones para la rotación de claves. Puedes reemplazar el binario por una nueva instancia que utilice una nueva clave. O bien, si usas un servidor KMIP para la gestión de claves, puedes rotar la clave maestra del cliente.
Rotar un miembro del conjunto de réplicas
Nota
Para evitar cambiando el quórum de escritura, nunca sustituya más de un set de réplicas a la vez.
Para un set de réplicas, para rotar un nodo:
Inicie una nueva instancia
mongod, configurada para usar una nueva clave. Incluye la opción--replSetcon el nombre del set de réplicas, así como cualquier otra opción específica de tu configuración, como--dbpathy--bind_ip.mongod --replSet myReplSet --enableEncryption \ --kmipServerName <KMIP Server HostName> \ --kmipServerCAFile ca.pem --kmipClientCertificateFile client.pem Conecte
mongoshal primario del set de réplicas.Agrega la instancia al set de réplicas:
rs.add( { host: <host:port> } ) Advertencia
Antes de MongoDB 5.0, un nuevo secundario añadido aún cuenta como nodo con derecho a voto incluso aunque no pueda servir lecturas ni convertirse en primario hasta que sus datos sean coherentes. Si tienes una versión de MongoDB anterior a la 5.0 y agregas un secundario con su
votesy la configuración deprioritymayor a cero, esto puede llevar a una situación en la que la mayoría de los nodos con derecho a voto estén en linea pero no se pueda elegir un primario. Para evitar estas situaciones, considera añadir el nuevo arrendatario secundario, inicialmente, conpriority :0yvotes :0. Después, ejecutars.status()para asegurar que el nodo haya pasado al estadoSECONDARY. Por último, usars.reconfig()para actualizar su prioridad y votos.Durante el proceso de sincronización inicial, se produce el re-cifrado de los datos con un conjunto completamente nuevo de claves de base de datos, así como con una nueva clave de sistema.
Remueve el nodo antiguo del conjunto de réplicas y borra todos sus datos. Para obtener instrucciones, consulte Remover miembros de un set de réplicas autogestionado
Rotación de la clave maestra de KMIP
Si está usando un servidor KMIP para la gestión de claves, puede rotar la llave maestra de cliente, que es la única clave gestionada externamente. Con la nueva clave maestra, el almacén de claves interno se re-encriptará, pero las claves de base de datos permanecerán sin cambios. Esto elimina la necesidad de volver a cifrar todo el conjunto de datos.
Rotar la clave maestra para los nodos secundarios del set de réplicas de uno en uno.
Reinicia el secundario, incluyendo la
--kmipRotateMasterKeyopción. Incluye cualquier otra opción específica de tu configuración, como--bind_ip. Si el nodo ya incluye la opción--kmipKeyIdentifier, actualiza la opción--kmipKeyIdentifiercon la nueva clave que se va a usar u omítela para solicitar una nueva clave al servidor KMIP:mongod --enableEncryption --kmipRotateMasterKey \ --kmipServerName <KMIP Server HostName> \ --kmipServerCAFile ca.pem --kmipClientCertificateFile client.pem Si se utiliza un archivo de configuración, incluya el
security.kmip.rotateMasterKey.Tras la rotación exitosa de la clave maestra y el re-cifrado del almacén de claves de la base de datos, la
mongodse cerrará.Reinicia la secundaria sin el parámetro
--kmipRotateMasterKey. Incluye cualquier otra opción específica de tu configuración, como--bind_ip.mongod --enableEncryption --kmipServerName <KMIP Server HostName> \ --kmipServerCAFile ca.pem --kmipClientCertificateFile client.pem Si se utiliza un archivo de configuración, remueve la configuración de
security.kmip.rotateMasterKey.
Reduce el primario del set de réplicas.
Conecte
mongoshal principal y utilicers.stepDown()para rebajar al principal y forzar la elección de un nuevo principal:rs.stepDown() Cuando
rs.status()indica que el nodo primario ha cedido y otro nodo ha asumido el estadoPRIMARY, rota la clave maestra para el nodo que ha cedido:Reinicia el nodo rebajado, incluyendo la opción
--kmipRotateMasterKey. Incluye cualquier otra opción específica de tu configuración, como--bind_ip. Si el nodo ya incluye la opción--kmipKeyIdentifier, actualiza la opción--kmipKeyIdentifiercon la nueva clave para usar u omitir.mongod --enableEncryption --kmipRotateMasterKey \ --kmipServerName <KMIP Server HostName> \ --kmipServerCAFile ca.pem --kmipClientCertificateFile client.pem Si se utiliza un archivo de configuración, incluya el
security.kmip.rotateMasterKey.Tras la rotación exitosa de la clave maestra y el re-cifrado del almacén de claves de la base de datos, la
mongodse cerrará.Reiniciar el nodo que ha cedido sin la opción
--kmipRotateMasterKey. Incluir cualquier otra opción específica de la configuración, como--bind_ip.mongod --enableEncryption --kmipServerName <KMIP Server HostName> \ --kmipServerCAFile ca.pem --kmipClientCertificateFile client.pem Si se utiliza un archivo de configuración, remueve la configuración de
security.kmip.rotateMasterKey.