El operador de Kubernetes admite OpenID Connect (OIDC) como mecanismo de autenticación. Al configurar la autenticación OIDC, las aplicaciones cliente presentan un token web JSON (JWT) al recurso de MongoDB. MongoDB valida el JWT con el proveedor de identidad (IdP) de OIDC configurado y utiliza notificaciones dentro del token para determinar la identidad del usuario y, opcionalmente, su pertenencia a grupos para la asignación de roles.
Esta guía describe cómo configurar la autenticación OIDC para aplicaciones cliente que se conectan a sus implementaciones de MongoDB mediante el operador de Kubernetes.
Nota
No es posible proteger una instancia independiente 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: Debe tener un proveedor de identidad (IdP) de OIDC preexistente y configurado. El operador de Kubernetes no administra el IdP.
Autorización: El operador de Kubernetes configura la autenticación (verificación de identidad) mediante OIDC. La autorización (otorgación de permisos) se gestiona asignando notificaciones de OIDC a roles de MongoDB dentro del recurso personalizado de MongoDB.
Federación: MongoDB admite tanto la federación de identidad de carga de trabajo (para la autenticación de máquina a máquina) como la federación de identidad de fuerza de trabajo (para la autenticación de usuarios humanos).
Cifrado TLS: Para mejorar la seguridad, se recomienda implementar un conjunto de réplicas o un clúster fragmentado cifrados con TLS. Si bien la comunicación de OIDC con su proveedor de identidad está protegida mediante HTTPS, al habilitar TLS en su recurso MongoDB se cifra la conexión entre la aplicación cliente y la base de datos. Esto protege el token de OIDC y el resto del tráfico de la base de datos de las amenazas de red.
Requisitos generales
Antes de configurar la autenticación OIDC para sus implementaciones de MongoDB, complete las siguientes tareas:
Asegúrese de implementar el recurso de base de datos MongoDB Enterprise. Las bases de datos de la comunidad MongoDB no admiten la autenticación OIDC.
Implemente el conjunto de réplicas o implemente el clúster fragmentado cuya autenticación de cliente desea proteger con OpenID Connect.
Detalles de configuración de OIDC
Campo | Tipo y necesidad | Descripción | Ejemplo |
| matriz de cadenas; obligatorio | Una serie de mecanismos de autenticación para habilitar. Debe incluir "OIDC" para habilitar la autenticación OIDC. |
|
| cadena; requerido | Un nombre lógico único para esta configuración de proveedor. Este nombre se utiliza al asignar roles. |
|
| cadena; requerido | La URI del punto final de descubrimiento del proveedor de OIDC. |
|
| cadena; requerido | El ID de cliente de la aplicación registrada con su proveedor de OIDC. |
|
| cadena; requerido | 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 |
|
| cadena; requerido | El método de federación. Puede ser |
|
| cadena; requerido | El modelo de autorización. Puede ser |
|
| matriz de cadenas; opcional | Una lista de alcances adicionales para solicitar al proveedor de 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 se autentique.
GroupMembershipEste es el enfoque más común y escalable. Con este tipo, MongoDB utiliza una notificación específica en el JWT (definida porgroupsClaim) que contiene una lista de los grupos a los que pertenece el usuario. A continuación, se asignan estos nombres de grupo a roles de MongoDB. Requiere quegroupsClaimesté configurado.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, debe otorgar permisos. El método que utilice para hacerlo dependerá del authorizationType seleccionado.
Método 1: Asignación de roles para la pertenencia a un grupo
Si usa authorizationType: GroupMembership, otorga permisos añadiendo asignaciones de roles a la matriz spec.security.roles de su recurso MongoDB. El campo de rol debe tener el formato <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 utiliza authorizationType: UserID, debe crear un recurso MongoDBUser separado para otorgar permisos.
Para obtener más información, consulte 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 de la fuerza laboral con membresía grupal
Utilice esto para autenticar usuarios humanos según su pertenencia a un grupo en su IdP. 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.
Reclamaciones principales: Asegúrese de que las
issreclamaciones (emisor) yaud(audiencia) del token coincidan exactamente con la configuración de su proveedor OIDC. Compruebe que el token no esté caducadoexp(reclamación).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 nombre de usuario para la autenticación de ID de usuario: El
MongoDBUsernombre de usuario debe tener el mismo formato<configurationName>/<userClaimValue>que. El debe<configurationName>coincidir con el nombre del proveedor de OIDC en suMongoDBrecurso.Confirmar el uso de labase de datos $external: Para la autorización, el
UserIDMongoDBUserrecurso debedb: "$external"especificar. Los usuarios autenticados por una fuente externa siempre se resuelven a través de esta base de datos virtual.Verifique la asignación de roles degrupo para la autenticación de membresía de grupo: asegúrese de que el rol definido en la sección del recurso MongoDB
spec.security.rolestenga el formato correcto<configurationName>/<groupName>como, donde<groupName>coincida exactamente con un grupo en delgroupsClaimJWT.Validar permisos de roles asignados: verifique que los roles de MongoDB asignados al usuario o grupo de OIDC realmente otorguen los permisos necesarios (por ejemplo,
readWriteen la base de datos correcta).Verificar la referencia del recurso MongoDBUser: para
UserIDla autorización, asegúrese de que elspec.mongodbResourceRef.nameen elMongoDBUserrecurso apunte correctamente al nombre de suMongoDBimplementación.