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
/ /

Implementación de un clúster fragmentado autogestionado con autenticación mediante archivo de claves

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 conectados y el clúster utilizando controles de acceso de usuario.

Para este tutorial, cada nodo del clúster debe usar el mismo mecanismo de autenticación interna y configuración. Esto significa aplicar la autenticación interna en cada mongosy en el mongod clúster.

El siguiente tutorial utiliza un archivo 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. Consulta Control de acceso.

Si usas Cloud Manager u Ops Manager para gestionar tu implementación, consulta el respectivo manual de Cloud Manager o el manual de Ops Manager para aplicar la autenticación.

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.

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

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

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.

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 particiones específicas en un clúster. Para realizar estas operaciones, debe conectarse directamente a la partición y autenticarse como un usuario administrativo local de la partición.

Los usuarios locales de particiones existen únicamente en la partición específica y deben ser utilizados únicamente para el mantenimiento y la configuración específicos de la partición. No es posible conectarse a mongos con usuarios locales de partición.

Este tutorial requiere la creación de usuarios de clúster fragmentado, pero incluye pasos opcionales para agregar usuarios locales de fragmentos.

Consulta la documentación de seguridad de Usuarios en Despliegues Autogestionados para obtener más información.

Este tutorial utiliza los programas mongod y mongos. Los usuarios de Windows deben utilizar los programas mongod.exe y mongos.exe en su lugar.

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.

Los siguientes procedimientos implican la creación de un nuevo clúster que consta de un mongos, los servidores de configuración y dos particiones.

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.

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 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.

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.

Los siguientes pasos implementan un conjunto de réplicas de servidor de configuración.

Para una implementación en producción, implemente un set de réplicas de servidores de configuración con al menos tres miembros. Para fines de prueba, puede crear un set de réplicas de un solo nodo.

1

Inicia cada mongod en el set de réplicas del servidor de configuración. Incluye la configuración keyFile. El ajuste keyFile aplica tanto la autenticación interna/autenticación de membresía autogestionada como el control de acceso basado en roles en implementaciones autogestionadas.

Puedes especificar la configuración de mongod ya sea a través de un archivo de configuración o de la línea de comandos.

archivo de configuración

Si utiliza un archivo de configuración, establezca security.keyFile en la ruta del archivo de claves, sharding.clusterRole en configsvr y replication.replSetName en el nombre deseado del set de réplicas de servidores de configuración.

security:
keyFile: <path-to-keyfile>
sharding:
clusterRole: configsvr
replication:
replSetName: <setname>

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 el mongod especificando la opción --config y la ruta al archivo de configuración.

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

Línea de comandos

Si utiliza los parámetros de línea de comandos, inicie el mongod con los parámetros --keyFile, --configsvr y --replSet.

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.

2

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.

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.

3

El método rs.initiate() inicia el set de réplicas y puede tomar un documento de configuración del set de réplicas opcional. En el documento de configuración del set de réplicas, incluya:

  • El _id. El _id debe coincidir con el parámetro --replSet pasado al mongod.

  • El members campo. El campo es una matriz y requiere un documento por cada miembro del conjunto de members réplicas.

  • El campo configsvr. El campo configsvr debe estar configurado en true para el set de réplicas del servidor de configuración.

Consulta Configuración de set de réplicas autogestionada para obtener más información sobre los documentos de configuración del set de réplicas.

Inicia el set de réplicas usando el método rs.initiate() y un documento de configuración:

rs.initiate(
{
_id: "myReplSet",
configsvr: true,
members: [
{ _id : 0, host : "cfg1.example.net:27019" },
{ _id : 1, host : "cfg2.example.net:27019" },
{ _id : 2, host : "cfg3.example.net:27019" }
]
}
)

Una vez iniciado y en funcionamiento el set de réplicas del servidor de configuración (CSRS), procede a crear los sets de réplicas de las particiones.

Para una implementación de producción, utilice un conjunto de réplicas con al menos tres miembros. Para realizar pruebas, puede crear un conjunto de réplicas con un solo miembro.

Estos pasos incluyen procedimientos opcionales para agregar usuarios locales a la partición. Ejecutarlos ahora asegura que haya usuarios disponibles para cada partición para realizar el mantenimiento a nivel de partición.

1

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.

Inicia cada mongod en el set de réplicas mediante un archivo de configuración o la línea de comandos.

archivo de configuración

Si utiliza un archivo de configuración, establezca la opción security.keyFile en la ruta del archivo clave, el replication.replSetName en el nombre deseado del set de réplicas y la opción sharding.clusterRole en shardsvr.

security:
keyFile: <path-to-keyfile>
sharding:
clusterRole: shardsvr
replication:
replSetName: <replSetName>
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 el mongod especificando la opción --config y la ruta al archivo de configuración.

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

Línea de comandos

Si se utiliza la opción de línea de comandos, al iniciar el componente, se deben especificar los parámetros --keyFile, replSet y --shardsvr, como en el siguiente ejemplo:

mongod --keyFile <path-to-keyfile> --shardsvr --replSet <replSetName> --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.

2

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.

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.

3

Desde mongosh, ejecuta el método rs.initiate().

rs.initiate() puede tomar un documento de configuración de Set de réplicas opcional. En el documento de configuración del Set de réplicas, incluya:

  • El campo _id se establece en el nombre del Set de réplicas especificado en el replication.replSetName o en la opción --replSet.

  • El members arreglo con un documento por cada nodo del set de réplicas.

El siguiente ejemplo inicia un Set de réplicas de tres nodos.

rs.initiate(
{
_id : "myReplSet",
members: [
{ _id : 0, host : "s1-mongo1.example.net:27018" },
{ _id : 1, host : "s1-mongo2.example.net:27018" },
{ _id : 2, host : "s1-mongo3.example.net:27018" }
]
}
)

rs.initiate() activa una elección y elige a uno de los miembros para que sea el primario.

Conéctate al primario antes de continuar. Utiliza rs.status() para localizar al miembro primario.

4

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.

5

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.

6

El usuario administrador de clúster local de la partición tiene el rol clusterAdmin, que proporciona privilegios que permiten el acceso a las operaciones de replicación.

Para ver una lista completa de los roles relacionados con las operaciones del set de réplicas, consulte Roles de administración de clústeres.

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.

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.

1

Inicia un mongos especificando el archivo de claves mediante un archivo de configuración o un parámetro de línea de comandos.

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 el mongos especificando la opción --config y la ruta al archivo de configuración.

mongos --config <path-to-config>

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.

2

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.

3

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, no se podrán crear ni modificar usuarios y, por lo tanto, es posible que no se puedan ejecutar 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" } ]
}
)

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

4

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.

Alternativamente, conecta una nueva mongosh sesión al miembro de réplica objetivo utilizando los parámetros -u <username>, -p <password> y --authenticationDatabase "admin". Debes usar la excepción de localhost en implementaciones autogestionadas para conectar con la mongos.

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.

5

El usuario administrador del clúster tiene el rol de clusterAdmin, que otorga acceso a operaciones de replicación y particionado.

Crea un usuario clusterAdmin en la base de datos admin.

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.

6

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.

Para continuar, debe estar conectado al y autenticado como usuario administrador del clúster para el clúster mongos fragmentado.

Nota

Este es el administrador del clúster para el cluster fragmentado y no el administrador del clúster local de la partición.

Para agregar cada fragmento al clúster, utilice el método. Si el fragmento es un conjunto de réplicas, especifique el sh.addShard() nombre del conjunto y un miembro del mismo. En implementaciones de producción, todos los fragmentos deben ser conjuntos de réplicas.

La siguiente operación agrega un único conjunto de réplicas de fragmentos al clúster:

sh.addShard( "<replSetName>/s1-mongo1.example.net:27017")

La siguiente operación es un ejemplo de cómo agregar una partición autónomo mongod al clúster:

sh.addShard( "s1-mongo1.example.net:27017")

Repetir estos pasos hasta que el clúster incluya todas las particiones. En este punto, el clúster aplica el control de acceso tanto para el clúster como para las comunicaciones internas entre cada componente del clúster.

Para continuar, debe estar conectado al y autenticado como usuario administrador del clúster para el clúster mongos fragmentado.

Nota

Este es el administrador del clúster para el cluster fragmentado y no el administrador del clúster local de la partición.

Para fragmentar una colección, utiliza el método sh.shardCollection(). Debe especificar el namespace completo de la colección y un documento que contenga la clave de partición.

La selección de la clave de fragmentación afecta la eficiencia de la fragmentación, así como su capacidad para aprovechar ciertas funciones de fragmentación, como las zonas. Consulte las consideraciones de selección en la sección "Elegir una clave de fragmentación".

Si la colección ya contiene datos, debe crear un índice en la clave de partición utilizando el método db.collection.createIndex() antes de utilizar shardCollection().

Si la colección está vacía, MongoDB crea el índice como parte sh.shardCollection() de.

A continuación se muestra un ejemplo del método sh.shardCollection():

sh.shardCollection("<database>.<collection>", { <key> : <direction> } )

Crea usuarios para permitir que los clientes se conecten e interactúen con el clúster fragmentado.

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.

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

Actualiza el Set de réplicas (sin tiempo de inactividad)

En esta página