Overview
Aplicar el control de acceso sobre un sistema existente set de réplicas requiere configuración:
La seguridad entre los miembros del Set de réplicas mediante Autenticación Interna, y
Seguridad entre los clientes que se conectan y el set de réplicas mediante Controles de acceso de usuarios.
Para este tutorial, cada nodo del set de réplicas utiliza el mismo mecanismo de autenticación interna y la misma configuración.
La aplicación de la autenticación interna también refuerza el control de acceso de los usuarios. Para conectarse al conjunto de réplicas, los clientes como mongosh necesitas utilizar una cuenta de usuario. Mira Usuarios.
Cloud Manager y Ops Manager
Si Cloud Manager u Ops Manager administra su implementación, consulte el manual de Cloud Manager o el manual de Ops Manager para aplicar el control de acceso.
Considerations
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.
Asociación de IP
Los binarios de MongoDB, mongod y mongos, se enlazan a localhost por defecto.
Sistema operativo
Este tutorial utiliza los programas mongod. Los usuarios de Windows deben usar el programa mongod.exe en su lugar.
Seguridad del archivo de claves
Los archivos de claves son medidas de seguridad mínimas y son ideales para entornos de prueba o desarrollo. Para entornos de producción, recomendamos usar certificados X..509
Usuarios
Este tutorial cubre la creación del número mínimo de usuarios administrativos únicamente en la base de datos admin. Para la autenticación de usuario, el tutorial utiliza el mecanismo de autenticación SCRAM por defecto. Los mecanismos de seguridad de desafío-respuesta son más adecuados para entornos de prueba o desarrollo. Para entornos de producción, recomendamos usar certificados X.509 o Autenticación Proxy LDAP autogestionada (disponible solo para MongoDB Enterprise) o Autenticación Kerberos en implementaciones autogestionadas (disponible solo para MongoDB Enterprise).
Para obtener detalles sobre la creación de usuarios para un mecanismo de autenticación específico, consultar las páginas correspondientes a cada mecanismo de autenticación.
Consultar ➤ Configurar el Control de Acceso Basado en Roles para conocer las mejores prácticas para la creación y gestión de usuarios.
Tiempo de inactividad
El siguiente procedimiento para aplicar el control de acceso requiere tiempo de inactividad. Para un procedimiento que no requiera tiempo de inactividad, consulte Actualizar set de réplicas autogestionado (sin tiempo de inactividad).
Aplicar el control de acceso con Keyfile en el set de réplicas existente
Crea un archivo de claves.
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.
Copiar el archivo de claves a cada miembro del Set de réplicas.
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.
Apague todos los miembros del conjunto de réplicas.
Apague cada del conjunto de mongod réplicas, empezando por las secundarias.Continúe hasta que todos los miembros del conjunto de réplicas estén desconectados, incluidos los árbitros. La primaria debe ser la última en apagarse para evitar posibles reversiones.
Para apagar un mongod, conecta cada mongod utilizando mongosh y ejecuta el comando db.shutdownServer() en la base de datos admin:
use admin db.shutdownServer()
Al final de este paso, todos los miembros del set de réplicas deben estar desconectados.
Reinicie cada miembro del conjunto de réplicas con el control de acceso aplicado.
Reinicia cada mongod en el set de réplicas utilizando la configuración del archivo de configuración security.keyFile o la opción en la línea de comandos --keyFile. Ejecutar mongod con la opción de línea de comandos --keyFile o la opción en el archivo de configuración security.keyFile aplica tanto la autenticación autogestionada interna/de membresía como el control de acceso basado en roles en implementaciones autogestionadas.
archivo de configuración
Si utiliza un archivo de configuración, establezca
security.keyFilea la ruta del archivo de claves, yreplication.replSetNameal nombre del Set de réplicas.
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> net: bindIp: localhost,<hostname(s)|ip address(es)>
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.
Línea de comandos
Si utiliza las opciones de línea de comandos, inicie el mongod con las siguientes opciones:
--keyFileconfigurado en la ruta del archivo de clave, y--replSetconfigura el nombre del Set de réplicas.
Incluir opciones adicionales según sea necesario para la configuración. Por ejemplo, si se desea que los clientes remotos se conecten a su implementación o si los miembros de su implementación se ejecutan en hosts diferentes, especificar el --bind_ip.
mongod --keyFile <path-to-keyfile> --replSet <replicaSetName> --bind_ip localhost,<hostname(s)|ip address(es)>
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.
Para obtener más información sobre las opciones de la línea de comandos, consulte la mongod página de referencia.
Conéctate al primario usando la interfaz localhost.
Conecta mongosh a una de las instancias de mongod a través de la interfaz localhost. Debes ejecutar mongosh en la misma máquina física que la instancia mongod.
Utiliza rs.status() para identificar al primario set de réplicas. Si estás conectado al primario, continúa con el siguiente paso. Si no, conecta mongosh al primario a través de la interfaz localhost.
Importante
Debes conectarte al primario antes de continuar.
Crear el usuario administrador
Importante
Después de que se cree el primer usuario, la excepción localhost ya no está disponible.
El primer usuario debe tener privilegios para crear otros usuarios, como un usuario con el userAdminAnyDatabase. Esto asegura que puedas crear usuarios adicionales después de que se cierre la Excepción de Localhost en Implementaciones Autogestionadas.
Si al menos un usuario no tiene privilegios para crear usuarios, una vez que se cierre la excepción de localhost, es posible que no se pueda crear o modificar usuarios con nuevos privilegios y, por lo tanto, no se pueda acceder a las operaciones necesarias.
Añadir un usuario usando el método db.createUser(). El usuario debe tener como mínimo el rol userAdminAnyDatabase en la base de datos admin.
Debe estar conectado al primario para crear usuarios.
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" } ] } )
Se debe ingresar la contraseña cuando se indique. Se debe consultar Roles de usuario de base de datos para ver una lista completa de los roles incorporados relacionados con las operaciones de administración de bases de datos.
Autenticarse como administrador de usuarios.
Autentícate en la base de datos admin.
En mongosh, utiliza db.auth() para autenticarte. Por ejemplo, los siguientes se autentican como el usuario administrador fred:
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").auth("fred", passwordPrompt()) // or cleartext password
Como alternativa, conecta||||||| una nueva mongosh instancia al miembro primario del Set de réplicas utilizando los parámetros -u <username>, -p <password> y --authenticationDatabase.
mongosh -u "fred" -p --authenticationDatabase "admin"
Si no especificas la contraseña para la opción de línea de comandos -p, mongosh solicita la contraseña.
Crea el administrador del clúster (opcional).
El usuario administrador del clúster tiene el rol clusterAdmin, que otorga acceso a operaciones de replicación.
Cree un usuario administrador del clúster y asígnele el rol de clusterAdmin en la base de datos admin:
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" } ] } )
Introduzca la contraseña cuando se lo pidan.
Consulta Roles de administración del clúster para obtener una lista completa de los roles incorporados relacionados con las operaciones del set de réplicas.
Crear usuarios adicionales (Opcional).
Crear usuarios para permitir que los clientes se conecten e interactúen con el set 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.
También puede que desees usuarios administrativos adicionales. Para obtener más información sobre los usuarios, consulta Usuarios en implementaciones autogestionadas.
X.509 Autenticación Interna
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.