Docs Menu
Docs Home
/ /

Configurar la autorización de Kerberos y Active Directory

MongoDB Enterprise permite consultar un servidor LDAP para los grupos LDAP a los que pertenece un usuario autenticado. MongoDB asigna los nombres distinguidos de LDAP (DN) de cada grupo devuelto a roles el admin Base de datos. MongoDB autoriza al usuario en función de los roles mapeados y sus privilegios asociados. Consulta Autorizacion LDAP para más información.

MongoDB Enterprise admite la autenticación utilizando un servicio Kerberos. Kerberos es un protocolo estándar de autenticación de la industria para grandes sistemas cliente/servidor.

Este tutorial describe cómo configurar MongoDB para realizar autenticación a través de un servidor Kerberos y autorización a través de un servidor Active Directory (AD) mediante las librerías de la plataforma.

Importante

Familiarízate minuciosamente con los siguientes temas antes de continuar:

Una descripción completa de AD está fuera del alcance de este tutorial. Este tutorial asume un conocimiento previo de AD.

MongoDB admite el soporte de mecanismos SASL para establecer la conexión entre el servidor de MongoDB y AD. Una descripción completa de SASL, los mecanismos SASL o de los requisitos específicos de configuración de AD para un mecanismo SASL concreto queda fuera del ámbito de este tutorial. Este tutorial presupone conocimientos previos sobre SASL y temas relacionados.

Configurar y gestionar la implementación de Kerberos está más allá del alcance de este documento. Este tutorial asume que has configurado un principal de servicio Kerberos para cada mongod y mongos instancia en tu implementación de MongoDB, y tienes un archivo keytab válido para cada mongod y mongos instancia.

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.

Para comprobar que está utilizando MongoDB Enterprise, pase la opción de línea de comandos --version a mongod o a 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.

Este tutorial explica la configuración de MongoDB para la autenticación con Kerberos y la autorización de AD.

Para realizar este procedimiento en su propio servidor de MongoDB, debe modificar los procedimientos dados con respecto a su propia infraestructura específica, especialmente las configuraciones de Kerberos, construir consultas AD o gestionar usuarios.

Por defecto, MongoDB crea una conexión TLS/SSL al hacer binding al servidor AD. Esto requiere configurar el host del servidor MongoDB para que tenga acceso a los certificados de la Autoridad de Certificación (CA) del servidor AD.

Este tutorial proporciona instrucciones para las configuraciones del host requeridas.

Este tutorial asume que tienes acceso a los certificados CA del servidor AD y que puedes crear una copia de los certificados en el servidor MongoDB.

Este tutorial utiliza el siguiente ejemplo de objetos de AD como base para las consultas, configuraciones y resultados proporcionados. Cada objeto muestra solo un subconjunto de los atributos posibles.

dn:CN=bob,CN=Users,DC=marketing,DC=example,DC=com
userPrincipalName: bob@marketing.example.com
memberOf: CN=marketing,CN=Users,DC=example,DC=com
dn:CN=alice,CN=Users,DC=engineering,DC=example,DC=com
userPrincipalName: alice@engineering.example.com
memberOf: CN=web,CN=Users,DC=example,DC=com
memberOf: CN=PrimaryApplication,CN=Users,DC=example,DC=com
dn:CN=sam,CN=Users,DC=dba,DC=example,DC=com
userPrincipalName: sam@dba.example.com
memberOf: CN=dba,CN=Users,DC=example,DC=com
memberOf: CN=PrimaryApplication,CN=Users,DC=example,DC=com
dn:CN=joe,CN=Users,DC=analytics,DC=example,DC=com
userPrincipalName: joe@analytics.example.com
memberof: CN=marketing,CN=Users,DC=example,DC=com
dn:CN=marketing,CN=Users,DC=example,DC=com
member:CN=bob,CN=Users,DC=marketing,DC=example,DC=com
member:CN=joe,CN=Users,DC=analytics,DC=example,DC=com
dn:CN=engineering,CN=Users,DC=example,DC=com
member:CN=web,CN=Users,DC=example,DC=com
member:CN=dba,CN=users,DC=example,DC=com
dn:CN=web,CN=Users,DC=example,DC=com
member:CN=alice,CN=Users,DC=engineering,DC=example,DC=com
dn:CN=dba,CN=Users,DC=example,DC=com
member:CN=sam,CN=Users,DC=dba,DC=example,DC=com
dn:CN=PrimaryApplication,CN=Users,DC=example,DC=com
member:CN=sam,CN=Users,DC=dba,DC=example,DC=com
member:CN=alice,CN=Users,DC=engineering,DC=example,DC=com

Este tutorial utiliza un nombre de usuario y una contraseña para realizar queries en el servidor AD. Las credenciales proporcionadas deben tener privilegios suficientes en el servidor AD para admitir queries relacionadas con security.ldap.userToDNMapping o security.ldap.authz.queryTemplate.

La autorización LDAP de MongoDB requiere que cada mongod en el set de réplicas esté al menos en MongoDB 3.4.0 o posterior.

La autorización LDAP de MongoDB requiere que cada mongod y mongos en el clúster fragmentado estén al menos en MongoDB 3.4.0 o posterior.

1

Para conectarse al servidor AD (AD) mediante TLS/SSL, el mongod o el mongos requieren acceso al certificado de la Autoridad de Certificación (CA) del servidor AD.

En Linux, especifique los certificados CA del servidor AD mediante la opción TLS_CACERT o TLS_CACERTDIR en el archivo ldap.conf.

El gestor de paquetes de la plataforma crea el archivo ldap.conf al instalar la dependencia libldap de MongoDB Enterprise. Para obtener documentación completa sobre el archivo de configuración o las opciones referenciadas, consulte ldap.conf.

En Microsoft Windows, carga los certificados de la Autoridad de Certificación (CA) del servidor AD con la herramienta de gestión de credenciales de la plataforma. La herramienta exacta de gestión de credenciales depende de la versión de Windows. Para utilizar la herramienta, consulte la documentación para tu versión de Windows.

Si mongod o mongos no pueden acceder a los archivos de AD CA, no podrán crear conexiones TLS/SSL al servidor Active Directory.

Opcionalmente, configure security.ldap.transportSecurity en none para deshabilitar TLS/SSL.

Advertencia

Configurar transportSecurity en none transmite información en texto claro, incluyendo credenciales de usuario, entre MongoDB y el servidor AD.

2

Para los servidores de MongoDB que funcionan en el sistema operativo Windows, debe usar setspn.exe para asignar el nombre principal del servicio (SPN) a la cuenta que ejecuta el servicio de MongoDB.

setspn.exe -S <service>/<fully qualified domain name> <service account name>

Ejemplo

Por ejemplo, si un mongod se ejecuta como un servicio llamado mongodb en mongodbserver.example.com con el nombre de cuenta de servicio mongodb_dev@example.com, el comando para asignar el SPN sería el siguiente:

setspn.exe -S mongodb/mongodbserver.example.com mongodb_dev@example.com

Nota

Windows servidor 2003 no admite setspn.exe -S. Para obtener documentación completa sobre setspn.exe, consulte setspn.exe.

3

Para los servidores MongoDB que se ejecutan en la plataforma Linux, debes asegurarte de que el servidor tenga una copia del archivo keytab específico para la instancia de MongoDB que se ejecuta en ese servidor.

Debe otorgar permisos de lectura sobre el archivo keytab al usuario de Linux que ejecuta el servicio MongoDB. Toma nota de la ruta completa de la ubicación del archivo keytab.

4

Conéctese al servidor de MongoDB usando mongosh usando las opciones --host y --port.

mongosh --host <hostname> --port <port>

Si tu servidor de MongoDB actualmente aplica la autenticación, debes autenticarte en la admin base de datos como un usuario con privilegios de gestión de roles, como los proporcionados por userAdmin o userAdminAnyDatabase. Incluye el --authenticationMechanism adecuado para el mecanismo de autenticación configurado del servidor de MongoDB.

mongosh --host <hostname> --port <port> --username <user> --password <pass> --authenticationDatabase="admin" --authenticationMechanism="<mechanism>"

Nota

Para las implementaciones de MongoDB en Windows, deberías reemplazar mongosh con mongo.exe

5

Para administrar los usuarios de MongoDB usando AD, necesitas crear al menos un rol en la base de datos admin que pueda crear y gestionar roles, como los que proporcionan userAdmin o userAdminAnyDatabase.

El nombre del rol debe coincidir exactamente con el Nombre Distinguido de un grupo AD. El grupo debe tener al menos un usuario de AD como nodo.

Dado que se dispone de los grupos de Active Directory, la siguiente operación:

  • Crea un rol nombrado para el grupo AD CN=dba,CN=Users,DC=example,DC=com, y

  • Le asigna el rol userAdminAnyDatabase en la base de datos admin.

var admin = db.getSiblingDB("admin")
admin.createRole(
{
role: "CN=dba,CN=Users,DC=example,DC=com",
privileges: [],
roles: [ "userAdminAnyDatabase" ]
}
)

También puede otorgar el rol userAdmin para cada base de datos sobre la que el usuario deba tener privilegios administrativos de usuario. Estos roles proporcionan los privilegios necesarios para la creación y gestión de roles.

Importante

Considere aplicar el principio de mínimo privilegio al configurar roles de MongoDB, grupos AD o pertenencia a grupos.

6

Un archivo de configuración de MongoDB es un archivo de texto en YAML con la extensión de archivo .conf.

  • Si va a actualizar una implementación existente de MongoDB, copie el archivo de configuración actual y trabaje a partir de esa copia.

  • (Solo para Linux) Si esto es una nueva implementación y se usó el gestor de paquetes de la plataforma para instalar MongoDB Enterprise, la instalación incluye el archivo de configuración por defecto /etc/mongod.conf. Utilice ese archivo de configuración por defecto o haga una copia de ese archivo para trabajar.

  • Si no existe un archivo de ese tipo, cree un archivo vacío con la extensión .conf y trabaje a partir de ese nuevo archivo de configuración.

7

En el archivo de configuración de MongoDB, configure security.ldap.servers al host y puerto del servidor AD. Si tu infraestructura de AD incluye varios servidores de AD con fines de replicación, especifica el host y el puerto de los servidores como una lista delimitada por comas en security.ldap.servers.

Ejemplo

Para conectarte a un servidor de AD ubicado en activedirectory.example.net, incluye lo siguiente en el archivo de configuración:

security:
ldap:
servers: "activedirectory.example.net"

MongoDB debe vincularse al servidor AD para realizar consultas. Por defecto, MongoDB utiliza el mecanismo de autenticación sencilla para vincularse al servidor AD.

Alternativamente, puedes configurar los siguientes ajustes en el archivo de configuración para vincularse al servidor AD usando SASL:

Este tutorial utiliza el mecanismo de autenticación LDAP por defecto de simple.

8

En el archivo de configuración de MongoDB, establezca security.authorization en enabled y setParameter authenticationMechanisms en GSSAPI

Para habilitar la autenticación a través de Kerberos, incluye lo siguiente en el archivo de configuración:

security:
authorization: "enabled"
setParameter:
authenticationMechanisms: "GSSAPI"
9

En el archivo de configuración de MongoDB, configure security.ldap.authz.queryTemplate en una RFC4516 plantilla de URL de query LDAP con formato.

En la plantilla, puedes usar:

  • {USER} espacio reservado para sustituir el nombre de usuario autenticado en la URL de la query LDAP.

  • {PROVIDED_USER} marcador de posición para sustituir el nombre de usuario suministrado, es decir, antes de la autenticación o la transformación LDAP, en la query LDAP.

Diseñá la plantilla de query para recuperar los grupos del usuario.

Nota

Una descripción completa de RFC4515, RFC4516 o AD consultas está fuera del alcance de este tutorial. El queryTemplate proporcionado en este tutorial es solo un ejemplo y puede no ser aplicable a su implementación específica de AD.

Ejemplo

La siguiente plantilla de query devuelve cualquier grupo que incluya a {USER} como miembro, siguiendo membresías de grupo recursivas. Esta query LDAP asume que los objetos de grupo rastrean la membresía de los usuarios almacenando el nombre distinguido completo del usuario (DN) usando el atributo member. La consulta incluye el identificador OID de la regla de coincidencia específica de AD 1.2.840.113556.1.4.1941 para LDAP_MATCHING_RULE_IN_CHAIN. Esta regla de concordancia es una extensión específica de AD para los filtros de búsqueda de LDAP.

security:
ldap:
authz:
queryTemplate:
"DC=example,DC=com??sub?(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={USER}))"

Usando la plantilla de query, MongoDB sustituye {USER} por el nombre de usuario autenticado para consultar el servidor LDAP.

Por ejemplo, un usuario se autentica como CN=sam,CN=Users,DC=dba,DC=example,DC=com. MongoDB crea una query LDAP basada en el queryTemplate, sustituyendo el token {USER} por el nombre de usuario autenticado. El servidor de Active Directory realiza una búsqueda recursiva de grupos para cualquier grupo que incluya al usuario como nodo directa o transitivamente. Basado en los grupos de Active Directory, el servidor de AD devuelve CN=dba,CN=Users,DC=example,DC=com y CN=engineering,CN=Users,DC=example,DC=com.

MongoDB asigna cada grupo devuelto nombre distinguido a un rol en la base de datos admin. Para cada grupo mapeado nombre distinguido, si existe un rol ya existente en la base de datos admin cuyo nombre coincida exactamente con el nombre distinguido, MongoDB concede al usuario los roles y privilegios asignados a ese rol.

La regla de concordancia LDAP_MATCHING_RULE_IN_CHAIN requiere proporcionar el nombre distinguido completo del usuario que se está autenticando. Dado que Kerberos requiere autenticarse con los userPrincipalName de un usuario, debes transformar los nombres de usuario entrantes en DN utilizando security.ldap.userToDNMapping. El siguiente paso proporciona orientación sobre cómo transformar los nombres de usuario entrantes para admitir el queryTemplate.

10

En el archivo de configuración de MongoDB, establece userToDNMapping para convertir el nombre de usuario proporcionado por el usuario que se autentica en un nombre distinguido de AD y así soportar el queryTemplate.

Ejemplo

La siguiente configuración userToDNMapping utiliza el filtro de expresión regular match para capturar el nombre de usuario proporcionado. MongoDB inserta el nombre de usuario capturado en la plantilla de ldapQuery query antes de ejecutar la query.

security:
ldap:
userToDNMapping:
'[
{
match : "(.+)",
ldapQuery: "DC=example,DC=com??sub?(userPrincipalName={0})"
}
]'

Debes modificar la configuración de muestra proporcionada para que coincida con tu implementación. Por ejemplo, la base nombre distinguido ldapQuery debe coincidir con la base nombre distinguido que contiene tus entidades de usuario. Pueden ser necesarias otras modificaciones para respaldar tu implementación de AD.

Ejemplo

Un usuario se autentica como alice@ENGINEERING.EXAMPLE.COM. MongoDB primero aplica cualquier transformación especificada en userToDNMapping. Según la configuración proporcionada, MongoDB captura el nombre de usuario en la etapa match y ejecuta una query LDAP:

DC=example,DC=com??sub?(userPrincipalName=alice@ENGINEERING.EXAMPLE.COM)

En función de los usuarios de Active Directory configurados, el servidor AD debe devolver CN=alice,CN=Users,DC=engineering,DC=example,DC=com.

MongoDB ejecuta a continuación la query LDAP configurada en queryTemplate, sustituyendo el token {USER} por el nombre de usuario transformado CN=alice,CN=Users,DC=engineering,DC=example,DC=com.

Importante

Si utiliza el parámetro substitution de userToDNMapping para transformar el nombre del grupo, then resultado de la sustitución debe ser una string escapada RFC4514.

11

MongoDB requiere credenciales para realizar consultas en el servidor AD.

Configura los siguientes ajustes en el archivo de configuración:

security:
ldap:
bind:
queryUser: "mongodbadmin@dba.example.com"
queryPassword: "secret123"

En los servidores de MongoDB en Windows, puede configurar security.ldap.bind.useOSDefaults a true para usar las credenciales del usuario del sistema operativo en lugar de queryUser y queryPassword.

El queryUser debe tener permiso para realizar todas las queries LDAP en nombre de MongoDB.

12

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.

13

Inicia el servidor MongoDB con la opción --config, especificando la ruta al archivo de configuración creado durante este procedimiento. Si el servidor MongoDB está actualmente en ejecución, realiza los preparativos adecuados para detener el servidor.

Linux MongoDB Servers

En Linux, debe especificar la variable de entorno KRB5_KTNAME, indicando la ruta al archivo keytab para el servidor de MongoDB.

env KRB5_KTNAME <path-to-keytab> mongod --config <path-to-config-file>

Microsoft Windows MongoDB Servers

En Windows, debes iniciar el servidor de MongoDB como la cuenta de servicio principal, tal como se configuró anteriormente en el procedimiento:

mongod.exe --config <path-to-config-file>
14

Conéctate al servidor de MongoDB, autenticándote como un usuario cuya membresía directa o transitiva en un grupo corresponda a un rol de MongoDB en la base de datos admin con userAdmin, userAdminAnyDatabase o un rol personalizado con privilegios equivalentes.

Uso mongosh para autenticarse en el servidor de MongoDB, establece las siguientes opciones:

Ejemplo

Anteriormente en este procedimiento, configuró el rol dn:CN=dba,CN=Users,DC=example,DC=com en la base de datos admin con los permisos requeridos. Este rol corresponde a un grupo de AD. Según los usuarios del AD configurados, puedes autenticarte como el usuario sam@dba.example.com y obtener los permisos necesarios.

mongosh --username sam@DBA.EXAMPLE.COM --password --authenticationMechanisms="GSSAPI" --authenticationDatabase "$external" --host <hostname> --port <port>

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

Windows Las implementaciones de MongoDB deben usar mongo.exe en lugar de mongosh.

Dados los usuarios de Active Directory configurados, el usuario se autentica con éxito y recibe los permisos correspondientes.

Nota

Si desea autenticarse como un usuario no$external existente, configure --authenticationMechanism con un mecanismo de autenticación SCRAM (por ejemplo, SCRAM-SHA-1 o SCRAM-SHA-256). Esto requiere que el setParameter del servidor de MongoDB authenticationMechanisms incluya SCRAM-SHA-1 y/o SCRAM-SHA-256, según corresponda.

15

Para cada grupo en el servidor AD que desees utilizar para la autorización de MongoDB, debes crear un rol correspondiente en la base de datos admin del servidor de MongoDB.

Ejemplo

La siguiente operación crea un rol con el nombre del AD grupo nombre distinguido CN=PrimaryApplication,CN=Users,DC=example,DC=com, asignando roles y privilegios apropiados a ese grupo:

db.getSiblingDB("admin").createRole(
{
role: "CN=PrimaryApplication,CN=Users,DC=example,DC=com",
privileges: [],
roles: [
{ role: "readWrite", db: "PrimaryApplication" }
]
}
)

Dado el grupo de directorio activo configurado, MongoDB otorga a un usuario que se autentica como sam@DBA.EXAMPLE.COM o alice@ENGINEERING.EXAMPLE.COM el rol de readWrite en la base de datos PrimaryApplication.

Nota

Para gestionar roles en la base de datos admin, debes estar autenticado como un usuario con userAdmin en admin, userAdminAnyDatabase o con un rol personalizado con privilegios equivalentes.

16

Si está actualizando una instalación existente con usuarios configurados en la base de datos $external, debe cumplir los siguientes requisitos para cada usuario para garantizar el acceso después de configurar MongoDB para la autenticación Kerberos y la autorización AD :

  • El usuario tiene un objeto de usuario correspondiente en el servidor AD.

  • El usuario tiene membresía en los grupos apropiados en el servidor AD.

  • MongoDB contiene los roles en la base de datos admin nombrados para los grupos AD del usuario, de modo que el usuario autorizado mantiene sus privilegios.

Ejemplo

El siguiente usuario existe en la base de datos $external:

{
user : "joe@ANALYTICS.EXAMPLE.COM",
roles: [
{ role : "read", db : "web_analytics" },
{ role : "read", db : "PrimaryApplication" }
]
}

Suponiendo que el usuario pertenezca al grupo AD CN=marketing,CN=Users,DC=example,DC=com, la siguiente operación crea un rol coincidente con los privilegios apropiados:

db.getSiblingDB("admin").createRole(
{
role: "CN=marketing,CN=Users,DC=example,DC=com",
privileges: [],
roles: [
{ role: "read", db: "web_analytics" }
{ role: "read", db: "PrimaryApplication" }
]
}
)

En base a la queryTemplate configurada, MongoDB autoriza a cualquier usuario que tenga una membresía directa o transitiva en el grupo CN=marketing,CN=Users,DC=example,DC=com a realizar operaciones read en las bases de datos web_analytics y PrimaryApplication.

Importante

Cuando configures un rol para un AD correspondiente, recuerda que todos los usuarios que sean miembros de ese grupo pueden recibir los roles y privilegios asignados. Considera aplicar el principio de mínimo privilegio al configurar roles de MongoDB, grupos AD o membresías de grupos.

Si desea seguir permitiendo que los usuarios de bases de datos que no sean$external accedan a MongoDB, debe incluir el mecanismo de autenticación SCRAM (p. ej. SCRAM-SHA-1 y/o SCRAM-SHA-256) en la opción de configuración setParameter authenticationMechanisms.

setParameter:
authenticationMechanisms: "GSSAPI,SCRAM-SHA-1,SCRAM-SHA-256"

En alternativa, haz la transición de los usuarios no-$external a AD siguiendo el procedimiento anterior.

Este procedimiento genera el siguiente archivo de configuración:

security:
authorization: "enabled"
ldap:
servers: activedirectory.example.net"
bind:
queryUser: "mongodbadmin@dba.example.com"
queryPassword: "secret123"
userToDNMapping:
'[
{
match: "(.+)"
ldapQuery: "DC=example,DC=com??sub?(userPrincipalName={0})"
}
]'
authz:
queryTemplate: "DC=example,DC=com??sub?(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={USER}))"
setParameter:
authenticationMechanisms: "GSSAPI"

Importante

La configuración de muestra proporcionada requiere modificaciones para coincidir con su esquema AD, estructura de directorio y configuración. También puede que requiera opciones adicionales de archivo de configuración para tu implementación.

Para obtener más información sobre cómo configurar roles y privilegios, consulte:

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.

Volver

Solucionar problemas

En esta página