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.
Considerations
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.
Requisitos generales previos
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.
Detalles de configuración de OIDC
Campo | Tipo y necesidad | Descripción | Ejemplo |
| arreglo de cadenas; requerido | Un arreglo de mecanismos de autenticación a habilitar. Debe incluir "OIDC" para activar la autenticación OIDC. |
|
| string; obligatorio | Un nombre lógico único para esta configuración de proveedor. Este nombre se utiliza al asignar roles. |
|
| string; obligatorio | La URI del punto final de descubrimiento del proveedor de OIDC. |
|
| string; obligatorio | El ID de cliente de la aplicación registrada con su proveedor de OIDC. |
|
| string; obligatorio | La audiencia reclamada para el JWT debe coincidir con la audiencia del token emitido por el IdP. |
|
| string; opcional | La reclamación JWT que MongoDB usa como nombre de usuario. El valor predeterminado es |
|
| string; opcional | La declaración JWT que contiene las membresías de grupo del usuario. Requerido si |
|
| string; obligatorio | El método de federación. Puede ser |
|
| string; obligatorio | El modelo de autorización. Puede ser |
|
| arreglo de cadenas; opcional | Una lista de ámbitos adicionales para solicitar al proveedor OIDC. |
|
Comprensión de los modelos de autorización de OIDC
La configuración de OIDC en MongoDB combina dos conceptos clave: el Método de federación y el Tipo de autorización.
Método de federación (authorizationMethod)
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.
Tipo de autorizaciónauthorizationType ()
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 porgroupsClaim) 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 configuregroupsClaim.UserIDCon este tipo, MongoDB utiliza una notificación que identifica de forma única al usuario (definido poruserClaim, cuyo valor predeterminado essub). 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.
Administración de roles y permisos de OIDC
Después de configurar un proveedor OIDC, debes conceder permisos. El método que utilices para hacer esto depende del authorizationType que hayas seleccionado.
Método 1: mapeo de roles para membresía de grupo
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"
Método 2: Creación de usuario para UserID
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.
Configura la autenticación de cliente OIDC para un set de réplicas multi-Kubernetes-clúster
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.
Agregue la configuración de autenticación de OIDC.
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
Solución de problemas de OIDC
- Validar manualmente el token JWT: utilice una herramienta para decodificar el token OIDC.
Afirmaciones principales: Asegúrese de que las afirmaciones
iss(emisor) yaud(audiencia) en el token coincidan exactamente con la configuración de su proveedor OIDC. Compruebe que el token no haya expirado (afirmaciónexp).Reclamaciones de usuario/grupo esperadas: verifique que las reclamaciones esperadas para la identidad de usuario ()
userClaimy 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
MongoDBUserdebe estar en el formato exacto<configurationName>/<userClaimValue>. El<configurationName>debe coincidir con el nombre del proveedor de OIDC en tu recursoMongoDB.Confirmar que se usa la base de datos $external: Para la autorización de
UserID, el recursoMongoDBUserdebe especificardb: "$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.rolesdel recurso de MongoDB esté formateado correctamente como<configurationName>/<groupName>, donde<groupName>coincida exactamente con un grupo en elgroupsClaimde 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,
readWriteen la base de datos correcta).Verifica la Referencia de Recursos MongoDBUser: Para la autorización
UserID, asegúrate de que elspec.mongodbResourceRef.nameen el recursoMongoDBUserapunte correctamente al nombre de tu implementaciónMongoDB.