Overview
Implementar el control de acceso en un El clúster fragmentado requiere configurar:
Seguridad entre componentes del cluster mediante autenticación interna.
Seguridad entre los clientes que se conectan y el clúster mediante el control de acceso basado en roles en implementaciones autoadministradas.
Para este tutorial, cada miembro del clúster fragmentado debe usar el mismo mecanismo y configuración de autenticación interna. Esto implica aplicar la autenticación interna en cada uno.mongosy en el mongod clúster.
El siguiente tutorial utiliza un archivo de clave para habilitar la autenticación interna.
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 Necesita usar una cuenta de usuario.Consulte Control de acceso.
CloudManager y OpsManager
Si Cloud Manager o Ops Manager administran su implementación, la autenticación interna se aplica automáticamente.
Para configurar el control de acceso en una implementación administrada, consulte: Configure Access Control for MongoDB Deployments en el manual de Cloud Manager o en el manual de Ops Manager.
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, se mongos enlazan a localhost de forma predeterminada.
Sistema operativo
Este tutorial se refiere principalmente al proceso de mongod. Los usuarios de Windows deberían 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
Control de acceso
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.
Usuarios
En general, para crear usuarios para un clúster fragmentado, conéctese a y agregue los usuarios del clúster mongos fragmentado.
Sin embargo, algunas operaciones de mantenimiento requieren conexiones directas a fragmentos específicos de un clúster fragmentado. Para realizar estas operaciones, debe conectarse directamente al fragmento y autenticarse como usuario administrativo local del fragmento.
Los usuarios locales del fragmento solo existen en el fragmento específico y solo deben usarse para tareas de mantenimiento y configuración específicas del fragmento. No es posible conectarse al mongos con usuarios locales del fragmento.
Consulte la documentación de seguridad de Usuarios en implementaciones autoadministradas para obtener más información.
Falta del tiempo
Actualizar un clúster fragmentado para aplicar el control de acceso requiere tiempo de inactividad.
Antes de comenzar
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 de directShardOperations puede hacer que su clúster deje de funcionar correctamente y puede causar corrupción de datos. Utilice el rol de directShardOperations solo para fines de mantenimiento o bajo la orientación del soporte de MongoDB. Una vez que haya terminado de realizar las operaciones de mantenimiento, deje de usar el rol de directShardOperations.
Procedimientos
Implementar la autenticación interna de archivo de claves en la implementación de un clúster fragmentado existente
Crea un archivo de claves.
Con la autenticación mediante archivo de claves, cada mongod o mongos instancia del clúster fragmentado utiliza el contenido del archivo de claves como contraseña compartida para autenticar a otros miembros de la implementación. Solo mongod las o instancias con el archivo mongos de claves 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 del conjunto 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 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.
Copie el archivo clave en cada componente del clúster fragmentado.
Cada servidor que hospeda un mongod o un mongos componente del clúster fragmentado debe contener una copia del archivo clave.
Copie el archivo de claves en cada servidor que aloje los miembros del clúster fragmentado. Asegúrese de que el usuario que ejecuta las mongod instancias o sea el propietario del archivo y pueda acceder a él.mongos
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.
Desactivar el balanceador.
Conecte mongosh a mongos un.
sh.stopBalancer()
Es posible que el balanceador no se detenga inmediatamente si hay una migración en curso. El método bloquea el shell hasta que el balanceador se sh.stopBalancer() detenga.
A partir de MongoDB 6.0.3, no se realiza la división automática de fragmentos. Esto se debe a las mejoras en la política de balanceo. Los comandos de división automática aún existen, pero no ejecutan ninguna operación.
En versiones de MongoDB anteriores 6.0.3 a, también deshabilita la división automática para el clústersh.stopBalancer() fragmentado.
Utilice para verificar que el balanceador se haya sh.getBalancerState() detenido.
sh.getBalancerState()
Importante
No continúe hasta que el balanceador haya dejado de ejecutarse.
Consulte Administrar equilibrador de clúster fragmentado para obtener tutoriales sobre cómo configurar el comportamiento del equilibrador de clúster fragmentado.
Apague todas las instancias del clúster mongos fragmentado.
Conecte mongosh a cada y mongos apáguelos.
Utilice el método en db.shutdownServer() la admin base de datos para apagar de forma segura mongos el:
db.getSiblingDB("admin").shutdownServer()
Repita hasta que todas las instancias del clúster estén fuera de mongos línea.
Una vez completado este paso, todas las instancias del clúster deberían estar fuera de mongos línea.
Apague las instancias del mongod servidor de configuración.
Conecte mongosh a cada en la implementación del servidor de configuración y mongod apáguelos.
Para las implementaciones de servidores de configuración de conjuntos de réplicas, apague el miembro principal en último lugar.
Utilice el método en db.shutdownServer() la admin base de datos para apagar de forma segura mongod el:
db.getSiblingDB("admin").shutdownServer()
Repita hasta que todos los servidores de configuración estén fuera de línea.
Apague las instancias del mongod conjunto de réplicas de fragmentos.
Para cada conjunto de réplicas de fragmentos, conecte mongosh a cada mongod miembro del conjunto de réplicas y apáguelos. Apáguelo al último.
Utilice el método en db.shutdownServer() la admin base de datos para apagar de forma segura mongod el:
db.getSiblingDB("admin").shutdownServer()
Repita este paso para cada conjunto de réplicas de fragmentos hasta que todas las instancias en todos los conjuntos de réplicas de fragmentos estén fuera de mongod línea.
Una vez completado este paso, todo el clúster fragmentado debería estar fuera de línea.
Aplicar el control de acceso en los servidores de configuración.
Inicie cada mongod en el conjunto de réplicas del servidor de configuración. Incluya la keyFile configuración. La keyFile configuración aplica la autenticación interna/de membresía autogestionada y el control de acceso basado en roles en las implementaciones autogestionadas.
Puede especificar la configuración mediante un archivo de configuración o la línea de mongod comando.
archivo de configuración
Si utiliza un archivo de security.keyFile configuración, sharding.clusterRole para un conjunto configsvr de réplicas del servidor de configuración, establezca en la ruta del archivo de clave, en y en el nombre del conjunto de réplicas del servidor de configuración.replication.replSetName
security: keyFile: <path-to-keyfile> sharding: clusterRole: configsvr replication: replSetName: <setname> storage: dbpath: <path>
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.
Inicie mongod especificando --config la opción y la ruta al archivo de configuración.
mongod --config <path-to-config>
Línea de comandos
Si utiliza los parámetros de la línea de comandos, para un conjunto de réplicas del servidor de configuración, inicie con mongod los -keyFile parámetros, --configsvr --replSet y.
mongod --keyFile <path-to-keyfile> --configsvr --replSet <setname> --dbpath <path>
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.
Para obtener más información sobre las opciones de la línea de comandos, consulte la página de mongod referencia.
Asegúrese de usar el nombre original del conjunto de réplicas al reiniciar cada miembro. No se puede cambiar el nombre de un conjunto de réplicas.
Aplicar el control de acceso para cada fragmento en el clúster fragmentado.
Al ejecutar un con mongod el keyFile parámetro se aplica tanto la autenticación interna/de membresía autoadministrada como el control de acceso basado en roles en implementaciones autoadministradas.
Inicie cada mongod en el conjunto de réplicas utilizando un archivo de configuración o la línea de comando.
archivo de configuración
Si utiliza un archivo de configuración, establezca la opción en la ruta security.keyFile del archivo clave y la opción replication.replSetName en el nombre original del conjunto de réplicas.
security: keyFile: <path-to-keyfile> replication: replSetName: <setname> storage: dbPath: <path>
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.
Inicie mongod especificando --config la opción y la ruta al archivo de configuración.
mongod --config <path-to-config-file>
Línea de comandos
Si utiliza los parámetros de la línea de comando, inicie mongod y especifique los parámetros --keyFile --replSet y.
mongod --keyfile <path-to-keyfile> --replSet <setname> --dbpath <path>
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.
Para obtener más información sobre los parámetros de inicio, consulte la página de mongod referencia.
Asegúrese de usar el nombre original del conjunto de réplicas al reiniciar cada miembro. No se puede cambiar el nombre de un conjunto de réplicas.
Repita este paso hasta que todos los fragmentos del clúster estén en línea.
Crear un administrador de usuarios local de Shard (opcional).
Importante
La excepción de Localhost en implementaciones autogestionadas permite a los clientes conectados a través de la interfaz localhost crear usuarios en un, lo que aplica mongod control de acceso. Tras crear el primer usuario, la excepción de Localhost en implementaciones autogestionadas se cierra.
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 localhost, es posible que no pueda crear ni modificar usuarios con nuevos privilegios y, por lo tanto, no pueda acceder a ciertas funciones u operaciones.
Para cada réplica de fragmento establecida en el clúster, conecte mongosh al miembro principal mediante la interfaz localhost. Debe ejecutar en la misma mongosh mongod máquina que el destino para usar la interfaz localhost.
Crea un usuario con el rol userAdminAnyDatabase en la base de datos admin. Este usuario puede crear usuarios adicionales para el set de réplicas de la partición según sea necesario. La creación de este usuario también cierra la Excepción de localhost en implementaciones autogestionadas.
El siguiente ejemplo crea el usuario local del fragmento fred 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" } ] } )
Aplicar control de acceso a los servidores mongos.
Al ejecutar un con mongod el keyFile parámetro se aplica tanto la autenticación interna/de membresía autoadministrada como el control de acceso basado en roles en implementaciones autoadministradas.
Inicie cada mongos en el conjunto de réplicas utilizando un archivo de configuración o la línea de comando.
archivo de configuración
Si utiliza un archivo de configuración, establezca security.keyFile en la ruta del archivo de clave y en sharding.configDB el nombre del conjunto de réplicas y al menos un miembro del conjunto de réplicas en <replSetName>/<host:port> formato.
security: keyFile: <path-to-keyfile> sharding: configDB: <configReplSetName>/cfg1.example.net:27019,cfg2.example.net:27019,...
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.
Inicie mongos especificando --config la opción y la ruta al archivo de configuración.
mongos --config <path-to-config-file>
Línea de comandos
Si utilizas parámetros de línea de comandos, inicia el mongos y especifica los parámetros --keyFile y --configdb.
mongos --keyFile <path-to-keyfile> --configdb <configReplSetName>/cfg1.example.net:27019,cfg2.example.net:27019,...
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.
En este punto, todo el clúster fragmentado vuelve a estar en línea y puede comunicarse internamente mediante el archivo de claves especificado. Sin embargo, los programas externos como mongosh necesitan usar un usuario correctamente aprovisionado para leer o escribir en el clúster.
Conéctese a la instancia a través de la interfaz mongos localhost.
Conecta mongosh a una de las instancias de mongos a través de la interfaz localhost. Debes ejecutar mongosh en la misma máquina física que la instancia mongos.
La interfaz de localhost solo está disponible porque no se han creado usuarios para la implementación. La interfaz localhost se cierra después de la creación del primer usuario.
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 cierra la excepción localhost, no podrá crear ni modificar usuarios y, por lo tanto, es posible que no pueda realizar 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.
Importante
Las contraseñas deben ser aleatorias, largas y complejas para garantizar la seguridad del sistema y para prevenir o retrasar el acceso malicioso.
El siguiente ejemplo crea el usuario fred 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.
admin = db.getSiblingDB("admin") admin.createUser( { user: "fred", pwd: passwordPrompt(), // or cleartext password roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
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.
Autentícate como el administrador de usuario.
Utilice para autenticarse como administrador de usuarios para crear usuarios db.auth() adicionales:
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
Introduzca la contraseña cuando se lo pidan.
Como alternativa, conecte una nueva sesión al miembro del conjunto de réplicas de mongosh destino -u <username> mediante-p <password> los parámetros,--authenticationDatabase "admin" y. Debe usar la excepción de host local en las implementaciones autoadministradas para conectarse mongos a.
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.
Crear usuario administrativo para la gestión del clúster
El usuario administrador del clúster tiene el clusterAdmin rol para el clúster fragmentado y no el administrador del clúster local del fragmento.
El siguiente ejemplo crea el usuario ravi 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" } ] } )
Consultar Roles de administración de clústeres para obtener una lista completa de los roles incorporados relacionados con las operaciones de sets de réplicas y clústeres.
Autenticarse como administrador del clúster.
Para realizar operaciones de fragmentación, autentíquese como un usuarioclusterAdmincon el métododb.auth()o una nueva sesiónmongoshcon los parámetros username, password y authenticationDatabase.
Nota
Este es el administrador del clúster para el clúster fragmentado y no el administrador del clúster local del fragmento.
Inicie el equilibrador.
Inicie el equilibrador.
sh.startBalancer()
A partir de MongoDB 6.0.3, no se realiza la división automática de fragmentos. Esto se debe a las mejoras en la política de balanceo. Los comandos de división automática aún existen, pero no ejecutan ninguna operación.
En versiones de MongoDB anteriores 6.0.3 a, también habilita la división automática para el clústersh.startBalancer() fragmentado.
Utilice para verificar que el balanceador se haya sh.getBalancerState() iniciado.
Consulte Administrar equilibrador de clúster fragmentado para obtener tutoriales sobre el equilibrador de clúster fragmentado.
Crear usuarios adicionales (Opcional).
Cree usuarios para permitir que los clientes se conecten y accedan al clúster fragmentado. Consulte Roles de usuario de base de datos para ver los roles integrados disponibles, como read readWritey. También puede necesitar usuarios administrativos adicionales. Para obtener más información sobre los usuarios,consulte Usuarios en implementaciones autoadministradas.
Para crear usuarios adicionales, debes autenticarte como un usuario con los roles userAdminAnyDatabase o userAdmin.
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.