Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Actualización del clúster fragmentado autogestionado a la autenticación mediante archivo clave (sin tiempo de inactividad)

Importante

El siguiente procedimiento se aplica a los clústeres particionados que utilizan MongoDB 3.4 o posterior.

Las versiones anteriores de MongoDB no admiten actualizaciones sin tiempo de inactividad. Para los clústeres particionados que utilizan versiones anteriores de MongoDB, consulte Actualizar el clúster fragmentado autoadministrado a la autenticación de archivo de claves.

Un clúster de MongoDB puede aplicar la autenticación de usuarios, así como la autenticación interna de sus componentes para proteger contra el acceso no autorizado.

El siguiente tutorial describe un procedimiento que utiliza security.transitionToAuth transicionar un clúster con particionamiento preexistente para aplicar la autenticación sin incurrir en tiempo de inactividad.

Antes de intentar este tutorial, familiarícese con el contenido de este documento.

Si estás usando Cloud Manager u Ops Manager para gestionar tu implementación, consulate Configura el Control de Acceso para Implementaciones MongoDB en el manual de Cloud Manager o manual de Ops Manager para aplicar la autenticación.

Los binarios de MongoDB, mongod y mongos, se enlazan a localhost por defecto.

Este tutorial configura la autenticación utilizando SCRAM para la autenticación del cliente y un archivo de claves para la autenticación interna.

Consulte la documentación de Autenticación en implementaciones autoadministradas para obtener una lista completa de los mecanismos de autenticación internos y de cliente disponibles.

Este tutorial asume que cada conjunto de réplicas de particiones, así como el conjunto de réplicas del servidor de configuración, pueden elegir un nuevo primario después de renunciar a su primario existente.

Un set de réplicas sólo puede elegir un primario si ambas de las siguientes condiciones son ciertas:

Asegúrese de que su clúster fragmentado tenga al menos dos instancias de mongos disponibles. Este tutorial requiere reiniciar cada mongos en el clúster. Si tu clúster particionado tiene solo una instancia de mongos, esto resulta en tiempo de inactividad durante el período en que el mongos está fuera de línea.

A partir de MongoDB 8.0, se puede utilizar el rol directShardOperations para realizar operaciones de mantenimiento que requieren ejecutar comandos directamente contra un fragmento.

Advertencia

Ejecutar comandos usando el rol directShardOperations puede hacer que su clúster deje de funcionar correctamente y puede causar corrupción de datos. Utiliza el rol directShardOperations únicamente con fines de mantenimiento o bajo la orientación del soporte de MongoDB. Deja de usar el rol directShardOperations cuando termines de realizar operaciones de mantenimiento.

Con la autenticación por archivo clave, cada instancia de mongod o mongos en el clúster particionado utiliza el contenido del archivo clave como la contraseña compartida para autenticar a otros nodos en la implementación. Solo las instancias mongod o mongos con el fichero de clave correcto pueden unirse al clúster fragmentado.

Nota

Los archivos de claves para la autenticación interna de miembros utilizan el formato YAML para permitir múltiples claves en un archivo de claves. El formato YAML acepta:

  • Una string de clave única (igual que en versiones anteriores)

  • Una secuencia de cadenas clave

El formato YAML es compatible con los archivos de claves de una sola clave existentes que utilizan el formato de archivo de texto.

La longitud de una clave debe estar entre 6 y 1024 caracteres y solo puede contener caracteres en base64. Todos los miembros del clúster fragmentado deben compartir al menos una clave común.

Nota

En los sistemas UNIX, el archivo de claves no debe tener permisos de grupo ni de otros. En los sistemas Windows, no se verifican los permisos de los archivos de claves.

Se puede generar un archivo de claves utilizando cualquier método que se elija. Por ejemplo, la siguiente operación utiliza openssl para generar un string de caracteres complejo pseudoaleatorio de 1024 caracteres que se utilizará como contraseña compartida. Luego utiliza chmod para cambiar los permisos del archivo para proporcionar permisos de lectura solo al propietario del archivo:

openssl rand -base64 755 > <path-to-keyfile>
chmod 400 <path-to-keyfile>

Copia el archivo de claves en cada servidor que hospede los nodos del clúster. Asegúrese de que el usuario que ejecuta las instancias mongod o mongos sea el propietario del archivo y pueda acceder al keyfile.

Evita almacenar el archivo de claves en medios de almacenamiento que puedan desconectarse fácilmente del hardware que aloja las instancias de mongod o mongos, como una unidad USB o un dispositivo de almacenamiento conectado a la red.

Para más información sobre el uso de archivos clave para autenticación interna, consulta Archivos clave.

Debes conectarte a un mongos para completar los pasos de esta sección. Los usuarios creados en estos pasos son usuarios a nivel de clúster y no pueden ser usados para acceder a individuales sets de réplicas de particiones.

1

Utilice el método para crear un usuario administrador y asignarle los siguientes db.createUser() roles:

Los clientes que realicen operaciones de mantenimiento u operaciones administrativas de usuario en el clúster particionado deben autenticarse como este usuario al finalizar este tutorial. Crea este usuario ahora para asegurarte de tener acceso al clúster después de aplicar la autenticación.

admin = db.getSiblingDB("admin");
admin.createUser(
{
user: "admin",
pwd: "<password>",
roles: [
{ role: "clusterAdmin", db: "admin" },
{ role: "userAdmin", db: "admin" }
]
}
);

Importante

Las contraseñas deben ser aleatorias, largas y complejas para evitar o dificultar el acceso malicioso.

2

Además del usuario administrador, puedes crear usuarios adicionales antes de aplicar la autenticación. Esto garantiza el acceso al clúster sharded una vez que se aplique la autenticación completamente.

Ejemplo

La siguiente operación crea el usuario joe en la marketing base de datos y le asigna el rol en readWrite la marketing base de datos.

db.getSiblingDB("marketing").createUser(
{
"user": "joe",
"pwd": "<password>",
"roles": [ { "role" : "readWrite", "db" : "marketing" } ]
}
)

Los clientes que se autentican como "joe" pueden realizar operaciones de lectura y escritura en la base de datos marketing.

Consulta Roles de usuario de base de datos para conocer los roles proporcionados por MongoDB.

Consulta el tutorial Agregar Usuarios para obtener más información sobre cómo añadir usuarios. Considera las mejores prácticas de seguridad al agregar nuevos usuarios.

3

Aunque el clúster fragmentado no aplica actualmente la autenticación, puede actualizar las aplicaciones cliente para que especifiquen las credenciales de autenticación al conectarse al clúster. Esto puede evitar la pérdida de conectividad al finalizar este tutorial.

Ejemplo

La siguiente operación se conecta al clúster fragmentado usando mongosh, autenticándose como el usuario joe en la base de datos marketing.

mongosh --username "joe" --password "<password>" \
--authenticationDatabase "marketing" --host mongos1.example.net:27017

Si tu aplicación utiliza un controlador de MongoDB, consulta la documentación del controlador asociado para obtener instrucciones sobre cómo crear una conexión autenticada.

1

Para cada mongos:

  1. Copia el archivo de configuración existente mongos y asígnele un nombre distinto, como <filename>-secure.conf (o .cfg si se usa Windows). Utilizará este nuevo archivo de configuración para migrar el mongos para aplicar autenticación en el clúster particionado. Conserve el archivo de configuración original para fines de copia de seguridad.

  2. Al nuevo archivo de configuración, agregue las siguientes configuraciones:

    • security.transitionToAuth fijar en true

    • security.keyFile establecer en la ruta del archivo clave.

      Si utiliza un mecanismo de autenticación interna diferente, especifique la configuración adecuada para el mecanismo.

    security:
    transitionToAuth: true
    keyFile: <path-to-keyfile>

    El nuevo archivo de configuración debe contener todos los ajustes de configuración usados anteriormente por mongos, así como los nuevos ajustes de seguridad.

2

Nota

Si tu clúster tiene solo un mongos, este paso provocará un tiempo de inactividad mientras el mongos está fuera de línea.

Siga el procedimiento para reiniciar la instancia de mongos, una mongos a la vez:

  1. Conéctese al para mongos apagar.

  2. Utiliza el método db.shutdownServer() en la base de datos admin para apagar de forma segura el mongos.

    db.getSiblingDB("admin").shutdownServer()
  3. Reiniciar mongos con el nuevo archivo de configuración, especificando la ruta al archivo de configuración usando --config. Por ejemplo, si el nuevo archivo de configuración se llamara mongos-secure.conf:

    mongos --config <path>/mongos-secure.conf

    donde <path> representa la ruta del sistema a la carpeta que contiene el nuevo archivo de configuración.

Repetí el proceso de reinicio para la siguiente instancia mongos hasta que todas las instancias mongos en el clúster fragmentado hayan sido reiniciadas.

Al final de esta sección, todas las instancias de mongos en el clúster particionado están ejecutando la autenticación interna de security.transitionToAuth y security.keyFile.

1

Para cada mongod en el set de réplicas del servidor de configuración,

  1. Copia el archivo de configuración existente mongod y asígnele un nombre distinto, como <filename>-secure.conf (o .cfg si se usa Windows). Utilizará este nuevo archivo de configuración para migrar el mongod para aplicar autenticación en el clúster particionado. Conserve el archivo de configuración original para fines de copia de seguridad.

  2. Al nuevo archivo de configuración, agregue las siguientes configuraciones:

    • security.transitionToAuth fijar en true

    • security.keyFile establecer en la ruta del archivo clave.

      Si utiliza un mecanismo de autenticación interna diferente, especifique la configuración adecuada para el mecanismo.

    security:
    transitionToAuth: true
    keyFile: <path-to-keyfile>
2

Reinicia el set de réplicas, un nodo a la vez, comenzando por los nodos secundarios.

  1. Para reiniciar los miembros secundarios uno a la vez,

    1. Conéctese al mongod y utilice el método contra db.shutdownServer() la admin base de datos para apagar de forma segura mongod el.

      db.getSiblingDB("admin").shutdownServer()
    2. Reinicie el mongod con el nuevo archivo de configuración, especificando la ruta al archivo de configuración mediante --config. Por ejemplo, si el nuevo archivo de configuración se llamara mongod-secure.conf:

      mongod --config <path>/mongod-secure.conf

      donde <path> representa la ruta del sistema a la carpeta que contiene el nuevo archivo de configuración.

    Cuando este nodo esté habilitado, repita el proceso para el siguiente nodo secundario.

  2. Una vez que todos los miembros secundarios se hayan reiniciado y estén en funcionamiento, reinicie el primario:

    1. Conéctate a mongod.

    2. Utilice el método rs.stepDown() para rebajar el primario y activar una elección.

      rs.stepDown()

      Puedes utilizar el método rs.status() para asegurarte de que el set de réplicas haya elegido un nuevo primario.

    3. Una vez que se haya eliminado la primaria y se haya elegido una nueva, cierre la primaria anterior utilizando el método contra db.shutdownServer() la admin base de datos.

      db.getSiblingDB("admin").shutdownServer()
    4. Reinicie el mongod con el nuevo archivo de configuración, especificando la ruta al archivo de configuración mediante --config. Por ejemplo, si el nuevo archivo de configuración se llamara mongod-secure.conf:

      mongod --config <path>/mongod-secure.conf

      donde <path> representa la ruta del sistema a la carpeta que contiene el nuevo archivo de configuración.

Al final de esta sección, todas las mongod instancias en el set de réplicas del servidor de configuración se ejecutan con security.transitionToAuth y security.keyFile con autenticación interna.

En un clúster que aplica la autenticación, cada set de réplicas debería tener su propio administrador de partición local. No se puede usar un administrador local en una partición para acceder a otra partición o al clúster.

Conéctate al miembro primario de cada set de réplicas de partición y crea un usuario con el método db.createUser(), asignándole los siguientes roles:

Tip

Puedes usar el método passwordPrompt() en conjunto con varios métodos y comandos de gestión de autenticación de usuarios para solicitar la contraseña en lugar de especificar la contraseña directamente en la llamada al método o comando. Sin embargo, aún puedes especificar la contraseña directamente como lo harías con las versiones anteriores del shell mongo.

admin = db.getSiblingDB("admin")
admin.createUser(
{
user: "admin",
pwd: passwordPrompt(), // or cleartext password
roles: [
{ role: "clusterAdmin", db: "admin" },
{ role: "userAdmin", db: "admin" }
]
}
)

Al finalizar este tutorial, si deseas conectarte a la partición para realizar operaciones de mantenimiento que requieran una conexión directa a una partición, debes autenticarte como administrador local de la partición.

Nota

Las conexiones directas a un fragmento solo deben realizarse para el mantenimiento y la configuración específicos del fragmento. En general, los clientes deben conectarse al clúster fragmentado a través mongos de.

Transicionando un set de réplicas de partición a la vez, repita estos pasos para cada set de réplicas de partición en el clúster.

1

Para cada mongod en el set de réplicas de particiones,

  1. Copia el archivo de configuración existente mongod y asígnele un nombre distinto, como <filename>-secure.conf (o .cfg si se usa Windows). Utilizará este nuevo archivo de configuración para migrar el mongod para aplicar autenticación en el clúster particionado. Conserve el archivo de configuración original para fines de copia de seguridad.

  2. Al nuevo archivo de configuración, agregue las siguientes configuraciones:

    • security.transitionToAuth fijar en true

    • security.keyFile establecer en la ruta del archivo clave.

      Si utiliza un mecanismo de autenticación interna diferente, especifique la configuración adecuada para el mecanismo.

    security:
    transitionToAuth: true
    keyFile: <path-to-keyfile>
2

Reinicia el set de réplicas, un nodo a la vez, comenzando por los nodos secundarios.

  1. Para reiniciar los miembros secundarios uno a la vez,

    1. Conéctese al mongod y utilice el método contra db.shutdownServer() la admin base de datos para apagar de forma segura mongod el.

      db.getSiblingDB("admin").shutdownServer()
    2. Reinicie el mongod con el nuevo archivo de configuración, especificando la ruta al archivo de configuración mediante --config. Por ejemplo, si el nuevo archivo de configuración se llamara mongod-secure.conf:

      mongod --config <path>/mongod-secure.conf

      donde <path> representa la ruta del sistema a la carpeta que contiene el nuevo archivo de configuración.

    Una vez que este nodo esté en línea, repita para el siguiente nodo secundario del set de réplicas hasta que se hayan actualizado todos los secundarios.

  2. Una vez que todos los miembros secundarios se hayan reiniciado y estén en funcionamiento, reinicie el primario:

    1. Conéctate a mongod.

    2. Utilice el método rs.stepDown() para rebajar el primario y activar una elección.

      rs.stepDown()

      Puedes utilizar el método rs.status() para asegurarte de que el set de réplicas haya elegido un nuevo primario.

    3. Una vez que se haya eliminado la primaria y se haya elegido una nueva, cierre la primaria anterior utilizando el método contra db.shutdownServer() la admin base de datos.

      db.getSiblingDB("admin").shutdownServer()
    4. Reinicie el mongod con el nuevo archivo de configuración, especificando la ruta al archivo de configuración mediante --config. Por ejemplo, si el nuevo archivo de configuración se llamara mongod-secure.conf:

      mongod --config <path>/mongod-secure.conf

      donde <path> representa la ruta del sistema a la carpeta que contiene el nuevo archivo de configuración.

En este punto del tutorial, todos los componentes del clúster fragmentado están en funcionamiento con --transitionToAuth y security.keyFile autenticación interna. El clúster tiene al menos un usuario administrativo y cada set de réplicas de particiones tiene un usuario administrativo local de partición.

Las secciones restantes implican sacar el clúster fragmentado del estado de transición para aplicar completamente la autenticación.

Importante

Al final de esta sección, los clientes deben especificar credenciales de autenticación para conectarse al clúster con particiones. Actualice los clientes para especificar las credenciales de autenticación antes de completar esta sección y así evitar la pérdida de conectividad.

Para completar la transición hacia la aplicación total de la autenticación en el clúster fragmentado, debe reiniciar cada instancia mongos security.transitionToAuth sin la configuración.

1

Remueve la clave security.transitionToAuth y su valor de los archivos de configuración mongos creados durante este tutorial. Deja la configuración security.keyFile añadida en el tutorial.

security:
keyFile: <path-to-keyfile>
2

Nota

Si tu clúster tiene solo un mongos, este paso provocará un tiempo de inactividad mientras el mongos está fuera de línea.

Siga el procedimiento para reiniciar la instancia mongos, una mongos a la vez:

  1. Conéctese al para mongos apagar.

  2. Utiliza el método db.shutdownServer() en la base de datos admin para apagar de forma segura el mongos.

    db.getSiblingDB("admin").shutdownServer()
  3. Reiniciemongoscon el archivo de configuración actualizado, especificando la ruta al archivo de configuración con--config. Por ejemplo, si el archivo de configuración actualizado se llamara mongos-secure.conf:

    mongos --config <path>/mongos-secure.conf

Al final de esta sección, todas las instancias de mongos aplicarán la autenticación del cliente y la autenticación interna de security.keyFile.

Importante

Al final de este paso, los clientes deben especificar credenciales de autenticación para conectarse al set de réplicas del servidor de configuración. Actualiza los clientes para especificar las credenciales de autenticación antes de completar esta sección para evitar la pérdida de conectividad.

Para completar la transición hacia la aplicación total de la autenticación en el clúster fragmentado, debe reiniciar cada instancia mongod security.transitionToAuth sin la configuración.

1

Remueva la clave security.transitionToAuth y su valor de los archivos de configuración del servidor de configuración creados durante este tutorial. Deja la security.keyFile configuración agregada en el tutorial.

security:
keyFile: <path-to-keyfile>
2

Reinicia el set de réplicas, un nodo a la vez, comenzando por los nodos secundarios.

  1. Para reiniciar los miembros secundarios uno a la vez,

    1. Conéctese al mongod y utilice el método contra db.shutdownServer() la admin base de datos para apagar de forma segura mongod el.

      db.getSiblingDB("admin").shutdownServer()
    2. Reinicie el mongod con el archivo de configuración actualizado, especificando la ruta del archivo de configuración mediante --config. Por ejemplo, si el nuevo archivo de configuración se llamara mongod-secure.conf:

      mongod --config <path>/mongod-secure.conf

      donde <path> representa la ruta del sistema a la carpeta que contiene el archivo de configuración actualizado.

    Cuando este nodo esté habilitado, repita el proceso para el siguiente nodo secundario.

  2. Una vez que todos los miembros secundarios se hayan reiniciado y estén en funcionamiento, reinicie el primario:

    1. Conéctate a mongod.

    2. Utilice el método rs.stepDown() para rebajar el primario y activar una elección.

      rs.stepDown()

      Puedes utilizar el método rs.status() para asegurarte de que el set de réplicas haya elegido un nuevo primario.

    3. Una vez que se haya eliminado la primaria y se haya elegido una nueva, cierre la primaria anterior utilizando el método contra db.shutdownServer() la admin base de datos.

      db.getSiblingDB("admin").shutdownServer()
    4. Reinicie el mongod con el archivo de configuración actualizado, especificando la ruta del archivo de configuración mediante --config. Por ejemplo, si el nuevo archivo de configuración se llamara mongod-secure.conf:

      mongod --config <path>/mongod-secure.conf

      donde <path> representa la ruta del sistema a la carpeta que contiene el archivo de configuración actualizado.

Al final de esta sección, todas las instancias de mongod en el set de réplicas del servidor de configuración aplican la autenticación del cliente y la security.keyFile autenticación interna.

Importante

Al finalizar este paso, los clientes deben especificar las credenciales de autenticación para conectarse al conjunto de réplicas de fragmentos. Actualice las credenciales de autenticación de los clientes antes de completar esta sección para evitar la pérdida de conectividad.

Para completar la transición hacia la aplicación total de autenticación en el clúster, se debe reiniciar a todos los nodos de cada set de réplicas de particiones en el clúster sin la configuración security.transitionToAuth.

Transicionando un set de réplicas de partición a la vez, repita estos pasos para cada set de réplicas de partición en el clúster.

1

Remueva la clave security.transitionToAuth y su valor de los archivos de configuración del servidor de configuración creados durante este tutorial. Deja la security.keyFile configuración agregada en el tutorial.

security:
keyFile: <path-to-keyfile>
2

Reinicia el set de réplicas, un nodo a la vez, comenzando por los nodos secundarios.

  1. Para reiniciar los miembros secundarios uno a la vez,

    1. Conéctese al mongod y utilice el método contra db.shutdownServer() la admin base de datos para apagar de forma segura mongod el.

      db.getSiblingDB("admin").shutdownServer()
    2. Reinicie el mongod con el archivo de configuración actualizado, especificando la ruta del archivo de configuración mediante --config. Por ejemplo, si el nuevo archivo de configuración se llamara mongod-secure.conf:

      mongod --config <path>/mongod-secure.conf

      donde <path> representa la ruta del sistema a la carpeta que contiene el archivo de configuración actualizado.

    Cuando este nodo esté habilitado, repita el proceso para el siguiente nodo secundario.

  2. Una vez que todos los miembros secundarios se hayan reiniciado y estén en funcionamiento, reinicie el primario:

    1. Conéctate a mongod.

    2. Utilice el método rs.stepDown() para rebajar el primario y activar una elección.

      rs.stepDown()

      Puedes utilizar el método rs.status() para asegurarte de que el set de réplicas haya elegido un nuevo primario.

    3. Una vez que se haya eliminado la primaria y se haya elegido una nueva, cierre la primaria anterior utilizando el método contra db.shutdownServer() la admin base de datos.

      db.getSiblingDB("admin").shutdownServer()
    4. Reinicie el mongod con el archivo de configuración actualizado, especificando la ruta del archivo de configuración mediante --config. Por ejemplo, si el nuevo archivo de configuración se llamara mongod-secure.conf:

      mongod --config <path>/mongod-secure.conf

      donde <path> representa la ruta del sistema a la carpeta que contiene el archivo de configuración actualizado.

Al final de esta sección, todas las instancias mongos y mongod en el clúster aplican la autenticación de cliente y la security.keyFile autenticación interna. Los clientes sólo pueden conectarse al clúster sharded utilizando el mecanismo de autenticación de cliente configurado. Los componentes adicionales sólo pueden unirse al clúster especificando la clave correcta.

MongoDB soporta la autenticación por certificado de X.509 para utilizarse con una conexión segura TLS/SSL. Los miembros del clúster y los miembros del set de réplicas pueden usar certificados X.509 para verificar su membresía al clúster o al set de réplicas en lugar de usar archivos clave.

Para obtener detalles sobre el uso de509 certificados X. para la autenticación interna, consulte Verificar la membresía del clúster con X.509 en MongoDB autoadministrado.

Actualización desde la autenticación por archivo de claves a la autenticación X.509 describe cómo actualizar el mecanismo interno de autenticación de una implementación de la autenticación basada en archivos de claves a la autenticación basada en certificados X.509.

Volver

Actualizar clúster particionado

En esta página