Overview
MongoDB Enterprise admite la autenticación mediante un Servicio Kerberos. Kerberos es un protocolo de autenticación estándar de la industria para grandes sistemas cliente/servidor. MongoDB Enterprise sólo admite la implementación MIT de Kerberos.
Requisitos previos
Para verificar que está utilizando MongoDB Enterprise, pase la --version
opción de línea de comandos para mongod o mongos:
mongod --version
En la salida de este comando, busca la string modules:
subscription o modules: enterprise para confirmar que estás usando los binarios de MongoDB Enterprise.
En los sets de réplicas y clústeres, asegúrate de que tu configuración utilice nombres de dominio completamente calificados (FQDN) en lugar de direcciones IP o nombres de host no calificados. Debe usar el FQDN para GSSAPI a fin de resolver correctamente los dominios de Kerberos y permitirle conectarse.
La configuración e implementación de un despliegue de Kerberos está fuera del alcance de este documento. Por favor, consulta la documentación de MIT Kerberos o la documentación del sistema operativo para obtener información sobre cómo configurar una implementación de Kerberos.
Para utilizar MongoDB con Kerberos, se debe agregar un principal de servicio de Kerberos a la base de datos de Kerberos para cada mongod y mongos cada instancia en tu implementación de MongoDB. Puedes agregar el principal del servicio ejecutando un comando similar al siguiente en tu KDC:
kadmin.local addprinc mongodb/m1.example.com@EXAMPLE.COM
En cada sistema que ejecute mongod mongoso, se debe crear un archivo keytab para la entidad de servicio correspondiente. Puede crear el archivo keytab ejecutando un comando similar al siguiente en el sistema que ejecute mongod mongoso:
kadmin.local ktadd mongodb/m1.example.com@EXAMPLE.COM
Procedimiento
El siguiente procedimiento describe los pasos para agregar un usuario principal de Kerberos a MongoDB, configurar una instancia autónomo de mongod para el soporte de Kerberos y conectarse usando mongosh y autenticar el usuario principal.
Inicie mongod sin Kerberos.
Para la incorporación inicial de usuarios de Kerberos, inicie mongod sin soporte de Kerberos.
Si un usuario Kerberos ya está en MongoDB y tiene los privilegios necesarios para crear un usuario, puede iniciar con soporte mongod Kerberos.
Incluye configuraciones adicionales según corresponda para tu implementación.
Nota
mongod y mongos se enlazan a localhost por defecto. Si los miembros de la implementación se ejecutan en hosts diferentes o si se desea que clientes remotos se conecten a la implementación, se debe especificar --bind_ip o net.bindIp.
Conéctate a mongod.
Conecte mongosh a la instancia de mongod. Si mongod tiene --auth habilitado, asegúrate de conectarte con los privilegios necesarios para crear un usuario.
Agregar principal(es) Kerberos a MongoDB.
Agregue un principal de Kerberos, <username>@<KERBEROS REALM> o <username>/<instance>@<KERBEROS REALM>, a MongoDB en la base de datos $external. Especifique el realm de Kerberos en mayúsculas. La $external base de datos permite que mongod consulte una fuente externa (por ejemplo, Kerberos) para autenticar. Para especificar los privilegios del usuario, asigna roles al usuario.
Para usar sesiones de cliente y garantías de coherencia causal con usuarios de autenticación $external (usuarios Kerberos, LDAP o X.509), los nombres de usuario no pueden superar los 10k bytes.
El siguiente ejemplo añade el principal Kerberos application/reporting@EXAMPLE.NET con acceso de sólo lectura a la base de datos records:
use $external db.createUser( { user: "application/reporting@EXAMPLE.NET", roles: [ { role: "read", db: "records" } ] } )
Añada otros responsables según sea necesario. Para cada usuario que desee autenticar usando Kerberos, debe crear un usuario correspondiente en MongoDB. Para obtener más información sobre cómo crear y gestionar usuarios, consulta Comandos de gestión de usuarios.
Inicia mongod con compatibilidad para Kerberos.
Para iniciar mongod con soporte de Kerberos, establece la variable ambiental KRB5_KTNAME en la ruta del archivo keytab y el parámetro mongod authenticationMechanisms a GSSAPI en el siguiente formato:
env KRB5_KTNAME=<path to keytab file> \ mongod \ --setParameter authenticationMechanisms=GSSAPI \ <additional mongod options>
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.
Por ejemplo, lo siguiente inicia una instancia autónoma mongod con soporte para Kerberos:
env KRB5_KTNAME=/opt/mongodb/mongod.keytab \ /opt/mongodb/bin/mongod --auth \ --setParameter authenticationMechanisms=GSSAPI \ --dbpath /opt/mongodb/data --bind_ip localhost,<hostname(s)|ip address(es)>
La ruta a su archivo mongod y a su archivo keytab puede ser diferente. El archivo keytab solo debe ser accesible para el propietario del mongod proceso.
Con los paquetes oficiales .deb o .rpm, puedes configurar el KRB5_KTNAME en un archivo de configuración de entorno. Consulte KRB5_KTNAME para más detalles.
Conecta mongosh a mongod y autentícalo.
Conecta el cliente mongosh como el principal Kerberos application/reporting@EXAMPLE.NET. Antes de conectarse, debe haber utilizado el programa kinit de Kerberos para obtener credenciales para application/reporting@EXAMPLE.NET.
Puedes conectarte y autenticarte desde la línea de comandos.
mongosh --host hostname.example.net --authenticationMechanism=GSSAPI --authenticationDatabase='$external' --username application/reporting@EXAMPLE.NET
Si se está conectando a un sistema cuyo nombre de host coincide con el nombre de Kerberos, asegúrate de especificar el nombre de dominio completo (FQDN) para la opción --host, en lugar de una dirección IP o un nombre de host no calificado.
Si se conecta a un sistema cuyo nombre de host no coincide con el nombre de Kerberos, primero conectemongoshamongody luego, desdemongosh, utilice el métododb.auth()para autenticarse en la base de datos $external.
use $external db.auth( { mechanism: "GSSAPI", user: "application/reporting@EXAMPLE.NET" } )
Consideraciones adicionales
KRB5_KTNAME
Si instaló MongoDB Enterprise usando uno de los paquetes oficiales .deb o .rpm y usa los scripts init/upstart incluidos para controlar la instancia, puede configurar mongod la KRB5_KTNAME variable en el archivo de configuración del entorno predeterminado en lugar de configurar la variable cada vez.
Las versiones recientes de sistemas basados en Red Hat y Debian utilizan systemd. Las versiones anteriores utilizan init para la inicialización del sistema. Sigue las instrucciones apropiadas para configurar la variable KRB5_KTNAME de tu sistema.
systemd Archivos de configuración
systemd Almacena la configuración en archivos de unidad. Actualice el archivo de unidad para configurar la variable KRB5_KTNAME.
Editar el archivo de unidad
Añade la línea editada al archivo de unidad. El archivo de unidad editado tendrá el siguiente aspecto:
[Unit] Description=High-performance, schema-free document-oriented database After=network.target Documentation=https://docs.mongodb.org/manual [Service] User=mongodb Group=mongodb ExecStart=/usr/bin/mongod --config /etc/mongod.conf Environment="KRB5_KTNAME=/etc/mongod.keytab" PIDFile=/var/run/mongodb/mongod.pid file size LimitFSIZE=infinity cpu time LimitCPU=infinity virtual memory size LimitAS=infinity open files LimitNOFILE=64000 processes/threads LimitNPROC=64000 locked memory LimitMEMLOCK=infinity total threads (user+kernel) TasksMax=infinity TasksAccounting=false Recommended limits for for mongod as specified in http://docs.mongodb.org/manual/reference/ulimit/#recommended-settings [Install] WantedBy=multi-user.target
Reinicia el servicio mongod
sudo systemctl restart mongod
init Archivos de configuración
Para las instalaciones de .rpm, el archivo de configuración por defecto del entorno es /etc/sysconfig/mongod.
Para .deb instalaciones, el archivo es /etc/default/mongodb.
Establece el valor de KRB5_KTNAME añadiendo una línea que se asemeje a la siguiente:
KRB5_KTNAME="<path to keytab>"
Configura mongos para Kerberos
Para iniciar mongos con compatibilidad con Kerberos, configure la variable de entorno KRB5_KTNAME en la ruta de su archivo keytab y el parámetro mongos authenticationMechanisms en GSSAPI en el siguiente formato:
env KRB5_KTNAME=<path to keytab file> \ mongos \ --setParameter authenticationMechanisms=GSSAPI \ <additional mongos options>
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.
Por ejemplo, lo siguiente inicia una instancia con soporte mongos Kerberos:
env KRB5_KTNAME=/opt/mongodb/mongos.keytab \ mongos \ --setParameter authenticationMechanisms=GSSAPI \ --configdb shard0.example.net, shard1.example.net,shard2.example.net \ --keyFile /opt/mongodb/mongos.keyfile \ --bind_ip localhost,<hostname(s)|ip address(es)>
La ruta a su archivo mongos y a su archivo keytab puede ser diferente. El archivo keytab solo debe ser accesible para el propietario del mongos proceso.
Modifica o incluye cualquier opción adicional de mongos según sea necesario para tu configuración. Por ejemplo, en lugar de utilizar --keyFile para la autenticación interna de los nodos del clúster, puedes utilizar la autenticación de nodos X.509 en su lugar.
Utiliza un archivo de configuración
Para configurar mongod o mongos para compatibilidad con Kerberos mediante un archivo de configuración, especifique la authenticationMechanisms configuración en el archivo de configuración.
Si utilizas el formato de archivo de configuración YAML:
setParameter: authenticationMechanisms: GSSAPI
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.
Por ejemplo, si /opt/mongodb/mongod.conf contiene los siguientes parámetros de configuración para un PKI autónomo mongod:
security: authorization: enabled setParameter: authenticationMechanisms: GSSAPI storage: dbPath: /opt/mongodb/data net: bindIp: localhost,<hostname(s)|ip address(es)>
Para iniciar mongod con soporte de Kerberos, usa el siguiente formulario:
env KRB5_KTNAME=/opt/mongodb/mongod.keytab \ /opt/mongodb/bin/mongod --config /opt/mongodb/mongod.conf
La ruta a, al mongod archivo keytab y al archivo de configuración puede variar. El archivo keytab solo debe ser accesible para el propietario del mongod proceso.
Solución de problemas de configuración de Kerberos para MongoDB
Si encuentra problemas al iniciar mongod o con la autenticación Kerberos, consulte Solucionar mongosproblemas de autenticación Kerberos autoadministrada.
Incorpora mecanismos de autenticación adicionales.
La autenticación de Kerberos (GSSAPI (Kerberos)) puede funcionar junto con:
El mecanismo de autenticación SCRAM de MongoDB:
El mecanismo de autenticación de MongoDB para LDAP:
PLAIN (SASL LDAP)
El mecanismo de autenticación de MongoDB para X.509:
Especifica los mecanismos de la siguiente forma:
--setParameter authenticationMechanisms=GSSAPI,SCRAM-SHA-256
Agregue los demás mecanismos solo si están en uso. Esta configuración no afecta la autenticación interna de los miembros del clúster por parte de MongoDB.
Pruebas y verificación
Después de completar los pasos de configuración, puedes validar tu configuración con la mongokerberos herramienta.
mongokerberos proporciona un método conveniente para comprobar la configuración de Kerberos de la plataforma con MongoDB y para verificar que la autenticación Kerberos de un cliente MongoDB funciona como se espera. Consulta la documentación de mongokerberos para obtener más información.
mongokerberos está disponible solo en MongoDB Enterprise.