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

Configurar autenticación OIDC multi-clúster

El operador de Kubernetes soporta OpenID Connect (OIDC) como un mecanismo de autenticación. Cuando se configura la autenticación OIDC, las aplicaciones cliente presentan un JSON Web Token (JWT) al recurso de MongoDB. MongoDB valida el JWT contra el Proveedor de Identidad (IdP) OIDC configurado y utiliza las afirmaciones dentro del token para determinar la identidad del usuario y, opcionalmente, sus membresías de grupo para la asignación de roles.

Esta guía describe cómo configurar la autenticación OIDC para aplicaciones clientes que se conectan a las implementaciones de MongoDB mediante el Operador de Kubernetes.

Nota

No se puede proteger una instancia autónoma de MongoDB con OIDC en un clúster de Kubernetes.

Al habilitar la autenticación OIDC, tenga en cuenta lo siguiente:

  • Proveedores de identidad: Debes tener un proveedor de identidad OIDC (IdP) configurado previamente. El operador de Kubernetes no gestiona el proveedor de identidad en sí.

  • Autorización: El Operador de Kubernetes configura la autenticación (verificación de identidad) a través de OIDC. La autorización (concesión de permisos) se gestiona mapeando los claims de OIDC a roles de MongoDB dentro del recurso personalizado de MongoDB.

  • Federación: MongoDB admite tanto la federación de identidades de cargas de trabajo (para autenticación de máquina a máquina) como la federación de identidades del personal (para autenticación de usuarios).

  • Cifrado TLS: Para mejorar la seguridad, se recomienda implementar un set de réplicas con cifrado TLS o un clúster con cifrado TLS. Aunque la comunicación OIDC con tu proveedor de identidad esté protegida mediante HTTPS, habilitar TLS en tu recurso de MongoDB cifra la conexión entre tu aplicación cliente y la base de datos. Esto protege el token OIDC y todo el tráfico de la base de datos de amenazas en la red.

Antes de configurar la autenticación OIDC para tus implementaciones de MongoDB, completa las siguientes tareas:

  • Asegúrate de implementar el recurso de base de datos MongoDB Enterprise. Las bases de datos Community de MongoDB no admiten autenticación OIDC.

  • Implementa el set de réplicas o implementa el clúster particionado cuya autenticación de cliente quieres asegurar con OpenID Connect.

Campo

Tipo y necesidad

Descripción

Ejemplo

spec.security.authentication.modes

arreglo de cadenas; requerido

Un arreglo de mecanismos de autenticación a habilitar. Debe incluir "OIDC" para activar la autenticación OIDC.

["SCRAM", "OIDC"]

spec.security.authentication.oidcProviderConfigs.configurationName

string; obligatorio

Un nombre lógico único para esta configuración de proveedor. Este nombre se utiliza al asignar roles.

"example-provider"

spec.security.authentication.oidcProviderConfigs.issuerURI

string; obligatorio

La URI del punto final de descubrimiento del proveedor de OIDC.

"https://dev-12345.provider.com"

spec.security.authentication.oidcProviderConfigs.clientId

string; obligatorio

El ID de cliente de la aplicación registrada con su proveedor de OIDC.

"0oa1b2c3d4e5f6g7h8"

spec.security.authentication.oidcProviderConfigs.audience

string; obligatorio

La audiencia reclamada para el JWT debe coincidir con la audiencia del token emitido por el IdP.

"api://default"

spec.security.authentication.oidcProviderConfigs.userClaim

string; opcional

La reclamación JWT que MongoDB usa como nombre de usuario. El valor predeterminado es sub.

"sub"

spec.security.authentication.oidcProviderConfigs.groupsClaim

string; opcional

La declaración JWT que contiene las membresías de grupo del usuario. Requerido si authorizationType es GroupMembership.

"groups"

spec.security.authentication.oidcProviderConfigs.authorizationMethod

string; obligatorio

El método de federación. Puede ser WorkloadIdentityFederation o WorkforceIdentityFederation.

"WorkforceIdentityFederation"

spec.security.authentication.oidcProviderConfigs.authorizationType

string; obligatorio

El modelo de autorización. Puede ser UserID o GroupMembership.

"GroupMembership"

spec.security.authentication.oidcProviderConfigs.requestedScopes

arreglo de cadenas; opcional

Una lista de ámbitos adicionales para solicitar al proveedor OIDC.

["openid", "profile", "groups"]

La configuración de OIDC en MongoDB combina dos conceptos clave: el Método de federación y el Tipo de autorización.

Esta configuración le informa a MongoDB sobre el tipo de identidad que se está autenticando.

  • WorkforceIdentityFederation: Use esto para usuarios humanos. Este método está diseñado para quienes inician sesión en los sistemas, como desarrolladores, analistas o administradores que se autentican mediante un IdP.

  • WorkloadIdentityFederation: Usa esto para aplicaciones o servicios (es decir, comunicación máquina a máquina). Este método es para identidades no humanas, como un microservicio, un trabajo por lotes o un script de automatización que necesita conectarse a la base de datos.

Esta configuración define cómo MongoDB debe otorgar permisos después de que un usuario o servicio esté autenticado.

  • GroupMembershipEste es el enfoque más común y escalable. Con este tipo, MongoDB utiliza un claim (claim) específico en el JWT (definido por groupsClaim) que contiene una lista de los grupos a los que pertenece el usuario. Luego se asignan estos nombres de grupo a roles de MongoDB. Se requiere que se configure groupsClaim.

  • UserIDCon este tipo, MongoDB utiliza una notificación que identifica de forma única al usuario (definido por userClaim, cuyo valor predeterminado es sub). A continuación, se asigna este ID de usuario específico a un MongoDBUser (debe crearse por separado). Esto es más granular y resulta útil para otorgar permisos a un solo usuario o a una identidad de servicio específica sin usar grupos.

Después de configurar un proveedor OIDC, debes conceder permisos. El método que utilices para hacer esto depende del authorizationType que hayas seleccionado.

Si usas authorizationType: GroupMembership, otorgas permisos añadiendo asignaciones de roles al arreglo spec.security.roles en tu recurso MongoDB. El campo de rol debe estar formateado como <configurationName>/<groupNameFromToken>.

roles:
- role: "idp-human-users/app-devs" # Maps the "app-devs" group from the IdP
db: "admin"
roles:
- role: "readWrite"
db: "app-data"

Si utilizas authorizationType: UserID, debes crear un recurso MongoDBUser separado para otorgar permisos.

Para aprender más, Autenticación y autorización con OIDC/OAuth 2.0.

Siga estos pasos para configurar OIDC para un conjunto de réplicas. Para ver más ejemplos, consulte Autenticación segura de clientes con OIDC.

1

Si tienes un archivo de definición de set de réplicas existente, ábrelo. De lo contrario, puedes copiar todos los ejemplos funcionales a continuación.

2

En tu archivo de definición, modifica la sección spec.security. Elija uno o más de los siguientes ejemplos según su caso de uso. Puedes combinar múltiples configuraciones de proveedor en el arreglo oidcProviderConfigs.

Ejemplo A: Federación laboral con membresía grupal

Utiliza esto para autenticar a los usuarios humanos según su pertenencia a grupos en tu proveedor de identidad. Este es el modelo más común para gestionar equipos de usuarios.

apiVersion: mongodb.com/v1
kind: MongoDBMultiCluster
metadata:
name: my-multi-cluster-oidc-replicaset
spec:
type: ReplicaSet
members: 3
version: 7.0.11-ent
opsManager:
configMapRef:
name: <my-project-configmap>
credentials: <my-credentials-secret>
security:
authentication:
modes: ["SCRAM", "OIDC"]
oidcProviderConfigs:
- configurationName: "idp-human-users"
issuerURI: "https://<your-idp-domain>"
clientId: "<your-client-id>"
audience: "api://default"
groupsClaim: "groups"
authorizationMethod: "WorkforceIdentityFederation"
authorizationType: "GroupMembership"
roles:
- role: "idp-human-users/app-devs"
db: "admin"
roles:
- role: "readWrite"
db: "app-data"
clusterSpecList:
- clusterName: ${MDB_CLUSTER_1_FULL_NAME}
members: 3
- clusterName: ${MDB_CLUSTER_2_FULL_NAME}
members: 2
- clusterName: ${MDB_CLUSTER_3_FULL_NAME}
members: 3
  • Validar manualmente el token JWT: utilice una herramienta para decodificar el token OIDC.
    • Afirmaciones principales: Asegúrese de que las afirmaciones iss (emisor) y aud (audiencia) en el token coincidan exactamente con la configuración de su proveedor OIDC. Compruebe que el token no haya expirado (afirmación exp).

    • Reclamaciones de usuario/grupo esperadas: verifique que las reclamaciones esperadas para la identidad de usuario ()userClaim y los gruposgroupsClaim () estén presentes en el token y contengan los valores correctos.

  • Verificar el formato del usuario para la autenticación UserID: El nombre de usuario MongoDBUser debe estar en el formato exacto <configurationName>/<userClaimValue>. El <configurationName> debe coincidir con el nombre del proveedor de OIDC en tu recurso MongoDB.

  • Confirmar que se usa la base de datos $external: Para la autorización de UserID, el recurso MongoDBUser debe especificar db: "$external". Los usuarios autenticados por una fuente externa siempre se resuelven a través de esta base de datos virtual.

  • Verificar la mapeo de roles de grupo para GroupMembership Auth: Asegúrese de que el rol definido en la sección spec.security.roles del recurso de MongoDB esté formateado correctamente como <configurationName>/<groupName>, donde <groupName> coincida exactamente con un grupo en el groupsClaim de JWT.

  • Validar los permisos del rol asignados: verifique que el rol de MongoDB asignado al usuario o grupo OIDC realmente otorgue los permisos necesarios (por ejemplo, readWrite en la base de datos correcta).

  • Verifica la Referencia de Recursos MongoDBUser: Para la autorización UserID, asegúrate de que el spec.mongodbResourceRef.name en el recurso MongoDBUser apunte correctamente al nombre de tu implementación MongoDB.