Docs Menu
Docs Home
/ /

Actualizar el set de réplicas autogestionado (sin tiempo de inactividad)

Para protegerse contra el acceso no autorizado, haga cumplir Autenticación para sus implementaciones. La autenticación para conjuntos de réplicas consiste en la autenticación interna entre los miembros del conjunto y el control de acceso de los usuarios para los clientes que se conectan a él.

Si su implementación actualmente no exige la autenticación, puede usar el --transitionToAuth Opción para aplicar la autenticación sin tiempo de inactividad.

Este tutorial utiliza el mecanismo de autenticación interna del archivo de claves para la seguridad interna y controles de acceso basadosen roles SCRAM para las conexiones del cliente.

Si está utilizando Cloud Manager u Ops Manager para administrar su implementación, consulte la documentación correspondiente. Manual de Cloud Manager o el manual de Ops Manager para aplicar la autenticación.

Este tutorial asume que su conjunto de réplicas puede elegir un nuevo miembro principal tras reemplazar al miembro principal existente. Esto requiere:

Un mongod que --transitionToAuth se ejecuta con acepta conexiones autenticadas y no autenticadas. Los clientes conectados al durante este estado de transición pueden realizar operaciones de lectura, escritura y administración en cualquier base de mongod datos.

Al finalizar el siguiente procedimiento, el conjunto de réplicas rechaza cualquier cliente que intente establecer una conexión no autenticada. El procedimiento crea usuarios para que las aplicaciones cliente los usen al conectarse al conjunto de réplicas.

Consulte ➤ Configurar el control de acceso basado en roles para conocer las mejores prácticas de creación y administración de usuarios.

Los binarios de MongoDB, mongod y, se mongos enlazan a localhost de forma predeterminada.

Importante

Las contraseñas deben ser aleatorias, largas y complejas para garantizar la seguridad del sistema y para prevenir o retrasar el acceso malicioso.

Importante

Para evitar actualizaciones de configuración debido a cambios en las direcciones IP, utilice nombres de host DNS en lugar de direcciones IP. Es particularmente importante usar un nombre de host DNS en lugar de una dirección IP al configurar miembros de set de réplicas o miembros de clústeres particionados.

Utiliza nombres de host en lugar de direcciones IP para configurar clústeres en un horizonte de red dividido. A partir de MongoDB 5.0, los nodos que solo están configurados con una dirección IP no pasan la validación de inicio y no se inician.

1

Conéctese a la base de datos principal para crear un usuario con userAdminAnyDatabase el rol. El userAdminAnyDatabase rol otorga acceso a la creación de usuarios en cualquier base de datos de la implementación.

El siguiente ejemplo crea al usuario fred con el rol userAdminAnyDatabase en la base de datos admin.

Importante

Las contraseñas deben ser aleatorias, largas y complejas para garantizar la seguridad del sistema y para prevenir o retrasar el acceso malicioso.

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: "fred",
pwd: " passwordPrompt(), // or cleartext password
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)

Al finalizar este procedimiento, cualquier cliente que administre usuarios en el conjunto de réplicas deberá autenticarse como este usuario o un usuario con permisos similares.

Consulte Roles de usuario de la base de datos para obtener una lista completa de roles integrados y relacionados con las operaciones de administración de la base de datos.

2

Conéctese al servidor principal para crear un usuario con clusterAdmin el rol. El clusterAdmin rol otorga acceso a las operaciones de replicación, como la configuración del conjunto de réplicas.

El siguiente ejemplo crea al usuario ravi con el rol clusterAdmin en la base de datos admin.

Importante

Las contraseñas deben ser aleatorias, largas y complejas para garantizar la seguridad del sistema y para prevenir o retrasar el acceso malicioso.

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.

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

Al finalizar este procedimiento, cualquier cliente que administre o mantenga el conjunto de réplicas deberá autenticarse como este usuario o un usuario con permisos similares.

Consulte Roles de administración de clúster para obtener una lista completa de los roles integrados relacionados con las operaciones del conjunto de réplicas.

3

Cree usuarios para que la aplicación cliente pueda conectarse e interactuar con el conjunto de réplicas. Al finalizar este tutorial, los clientes deben autenticarse como un usuario configurado para conectarse al conjunto de réplicas.

Consultar Roles de usuario de base de datos para roles básicos incorporados que se pueden utilizar en la creación de usuarios de solo lectura y lectura-escritura.

Lo siguiente crea un usuario con permisos de lectura y escritura en la base de datos foo.

Importante

Las contraseñas deben ser aleatorias, largas y complejas para garantizar la seguridad del sistema y para prevenir o retrasar el acceso malicioso.

Cree un usuario con el rol en readWrite la foo base de datos.

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.

db.getSiblingDB("foo").createUser(
{
"user" : "joe",
"pwd" : passwordPrompt(), // or cleartext password
roles: [ { "role" : "readWrite", "db" : "foo" } ]
}
)

Los clientes que se autentican como este usuario pueden realizar operaciones de lectura y escritura en la foo base de datos. Consulte "Autenticar un usuario con implementaciones autoadministradas" para obtener más información sobre cómo crear una conexión autenticada con el conjunto de réplicas.

Consulta el tutorial "Añadir usuarios"para obtener más información sobre cómo añadir usuarios. Ten en cuenta las prácticas recomendadas de seguridad al añadir nuevos usuarios.

4

En este punto del procedimiento, el conjunto de réplicas no aplica la autenticación. Sin embargo, las aplicaciones cliente aún pueden especificar credenciales de autenticación y conectarse al conjunto de réplicas.

Actualice las aplicaciones cliente para que se autentiquen en el conjunto de réplicas mediante un usuario configurado. Las conexiones autenticadas requieren un nombre de usuario, una contraseña y la base de datos de autenticación. Consulte Autenticar un usuario con implementaciones autoadministradas.

Por ejemplo, lo siguiente se conecta a un conjunto de réplicas llamado mongoRepl y se autentica como el usuario joe.

mongosh -u joe -password -authenticationDatabase foo --host mongoRepl/mongo1.example.net:27017, mongo2.example.net:27017, mongo3.example.net:27017

Si no especificas la contraseña para la opción de línea de comandos -p, mongosh solicita la contraseña.

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

Al finalizar este tutorial, el set de réplicas rechaza las conexiones de clientes no autenticados. Realizar este paso garantiza ahora que los clientes puedan conectarse al set de réplicas antes y después de la transición.

5

Con la autenticación keyfile, cada instanciasmongod del set de réplicas utiliza el contenido del keyfile como contraseña compartida para autenticar a otros miembros en la implementación. Solo mongod instancias con el archivo de clave correcto pueden unirse al set de réplicas.

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 del conjunto base64. Todos los miembros del set de réplicas 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 756 > <path-to-keyfile>
chmod 400 <path-to-keyfile>

Consultar Keyfiles para obtener más información y requisitos para el uso de los keyfiles.

6

Copia el archivo de claves en cada servidor que aloje a los miembros del Set de réplicas. Asegúrate de que el usuario que ejecuta las instancias de mongod sea el propietario del archivo y pueda acceder al archivo de claves.

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

7

Reinicie cada miembro secundario o árbitro en el conjunto de réplicas, incluso en la configuración:

  • La configuraciónsecurity.transitionToAuth. Al iniciarmongodconsecurity.transitionToAuthestablecido en true, la instancia pasa a un estado de transición donde puede aceptar y crear conexiones autenticadas y no autenticadas.

  • Un mecanismo de autenticación interno security.keyFile como.

Debe reiniciar cada miembro uno a la vez para garantizar que la mayoría de los miembros del conjunto de réplicas permanezcan en línea.

Desde una sesiónmongoshque esté conectada al secundario o al árbitro, emita eldb.shutdownServer()contra la base de datos admin.

admin = db.getSiblingDB("admin")
admin.shutdownServer()

Especifique las siguientes configuraciones en su archivo de configuración.

mongod y se enlazan a localhost de forma predeterminada. Si los miembros de su implementación se ejecutan en mongos net.bindIp hosts diferentes o si desea que los clientes remotos se conecten a su implementación, debe especificar la configuración.

security:
keyFile: <path-to-keyfile>
transitionToAuth: true
replication:
replSetName: <replicaSetName>

Especifique la opción --config con la ruta al archivo de configuración al iniciar el mongod.

mongod --config <path-to-config-file>

Para obtener más información sobre el archivo de configuración, consultar opciones del archivo de configuración.

Como alternativa, puede usar las mongod opciones de línea de comandos equivalentes (p. ej., y) al mongod iniciar. Consulte--transitionToAuth --keyFile mongod la página de referencia de para obtener una lista completa de opciones.

Incluya configuraciones adicionales según corresponda a su implementación.

Al final de este paso, todos los secundarios y árbitros deberían estar en funcionamiento con security.transitionToAuth establecido true en.

8

Reducir el miembro principal en el conjunto de réplicas y reiniciar el miembro, incluso en su configuración:

  • La configuraciónsecurity.transitionToAuth. Al iniciarmongodconsecurity.transitionToAuthestablecido en true, la instancia pasa a un estado de transición donde puede aceptar y crear conexiones autenticadas y no autenticadas.

  • Un mecanismo de autenticación interno security.keyFile como.

Conéctese al primario usando y baje mongosh rs.stepDown() el primario usando el método.

rs.stepDown()

Una vez que el primario deja de funcionar y el conjunto de réplicas elige un nuevo primario, apague el primario mongod antiguo.

Desde una sesiónmongoshque esté conectada a la base de datos principal anterior, emita eldb.shutdownServer()en la base de datos admin.

admin = db.getSiblingDB("admin")
admin.shutdownServer()

Especifique las siguientes configuraciones en su archivo de configuración.

Incluye opciones adicionales según sea necesario para la configuración. Por ejemplo, si se desea que los clientes remotos se conecten a la implementación o si los miembros de la implementación se ejecutan en diferentes hosts, se debe especificar la configuración net.bindIp.

security:
keyFile: <path-to-keyfile>
transitionToAuth: true
replication:
replSetName: <replicaSetName>

Inicie utilizando el archivo de mongod configuración.

mongod --config <path-to-config-file>

Para obtener más información sobre el archivo de configuración, consultar opciones del archivo de configuración.

Como alternativa, puede usar las mongod opciones de línea de comandos equivalentes (p. ej., y) al mongod iniciar. Consulte--transitionToAuth --keyFile mongod la página de referencia de para obtener una lista completa de opciones.

Incluya configuraciones adicionales según corresponda a su implementación.

Al final de este paso, todos los miembros del conjunto de réplicas deben estar en funcionamiento con establecido security.transitionToAuth en true y security.keyFile establecido en la ruta del archivo clave.

9

Reinicie cada miembro secundario o árbitro del conjunto de réplicas, eliminando la security.transitionToAuth opción al reiniciar. Debe hacerlo uno a la vez para garantizar que la mayoría de los miembros del conjunto de réplicas permanezcan en línea.

Si la mayoría de los miembros del conjunto de réplicas están fuera de línea al mismo tiempo, el conjunto de réplicas puede pasar al modo de solo lectura.

Conectemongoshal secundario o árbitro y emita eldb.shutdownServer()en la base de datos admin.

admin = db.getSiblingDB("admin")
admin.shutdownServer()

Reinicie el,mongod esta vez sin la security.transitionToAuth opción pero con un mecanismo de autenticación interno security.keyFile como.

Especifique las siguientes configuraciones en su archivo de configuración.

Incluye opciones adicionales según sea necesario para la configuración. Por ejemplo, si se desea que los clientes remotos se conecten a la implementación o si los miembros de la implementación se ejecutan en diferentes hosts, se debe especificar la configuración net.bindIp.

security:
keyFile: <path-to-keyfile>
replication:
replSetName: <replicaSetName>

Inicia la mongod usando el archivo de configuración:

mongod --config <path-to-config-file>

Para obtener más información sobre el archivo de configuración, consultar opciones del archivo de configuración.

También puede usar las mongod opciones equivalentes al iniciar su.mongod Consulte la página de referencia para obtener una lista completa de opciones.mongod

Incluya configuraciones adicionales según corresponda a su implementación.

Al finalizar este paso, todos los secundarios y árbitros deberían estar en funcionamiento con la autenticación interna configurada, pero security.transitionToAuthsin. Los clientes solo pueden conectarse a estas mongod instancias mediante el mecanismo de autenticación de cliente configurado.

10

Baje el miembro principal en el conjunto de réplicas y luego reinícielo sin la security.transitionToAuth opción.

Importante

Al finalizar este paso, los clientes que no se conectan con autenticación no podrán conectarse al conjunto de réplicas. Actualice los clientes para que se conecten con autenticación antes de completar este paso para evitar la pérdida de conectividad.

Conéctese al primario usando y baje mongosh rs.stepDown() el primario usando el método.

rs.stepDown()

Una vez que el primario deja de funcionar y el conjunto de réplicas elige un nuevo primario, apague el primario mongod antiguo.

Desde una sesiónmongoshque esté conectada a la base de datos principal anterior, emita eldb.shutdownServer()en la base de datos admin.

admin = db.getSiblingDB("admin")
admin.shutdownServer()

Reinicie el,mongod esta vez sin la security.transitionToAuth opción pero con el mecanismo de autenticación interno security.keyFile como.

Especifique las siguientes configuraciones en su archivo de configuración.

security:
keyFile: <path-to-keyfile>
replication:
replSetName: <replicaSetName>

Inicia la mongod usando el archivo de configuración:

mongod --config <path-to-config-file>

Para obtener más información sobre el archivo de configuración, consultar opciones del archivo de configuración.

También puedes usar las mongod opciones equivalentes al iniciar mongod.mongod Consulta la página de referencia para obtener una lista completa de opciones.

Incluya configuraciones adicionales según corresponda a su implementación.

Al finalizar este paso, todos los miembros del conjunto de réplicas deberían estar en funcionamiento con la autenticación activada. Los clientes solo pueden conectarse a estas instancias mediante el mecanismo de autenticación de cliente mongod configurado.

Para obtener detalles sobre el uso de X.509 para la autenticación interna, consultar Verificar la pertenencia al clúster con X.509 en MongoDB autogestionado.

Para actualizar de la autenticación interna del archivo de claves a la autenticación interna X.509, consultar Actualización de la autenticación del archivo de claves a la autenticación X.509.

Volver

Actualizar el Set de réplicas

En esta página