Docs Menu
Docs Home
/ /

Configurar la autenticación OIDC de un solo clúster

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.

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.

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.

Campo

Tipo y necesidad

Descripción

Ejemplo

spec.security.authentication.modes

matriz de cadenas; obligatorio

Una serie de mecanismos de autenticación para habilitar. Debe incluir "OIDC" para habilitar la autenticación OIDC.

["SCRAM", "OIDC"]

spec.security.authentication.oidcProviderConfigs.configurationName

cadena; requerido

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

cadena; requerido

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

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

spec.security.authentication.oidcProviderConfigs.clientId

cadena; requerido

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

"0oa1b2c3d4e5f6g7h8"

spec.security.authentication.oidcProviderConfigs.audience

cadena; requerido

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

cadena; requerido

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

"WorkforceIdentityFederation"

spec.security.authentication.oidcProviderConfigs.authorizationType

cadena; requerido

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

"GroupMembership"

spec.security.authentication.oidcProviderConfigs.requestedScopes

matriz de cadenas; opcional

Una lista de alcances adicionales para solicitar al proveedor de 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 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 por groupsClaim) 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 que groupsClaim esté configurado.

  • 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 (el MongoDBUser debe crearse por separado). Esto ofrece mayor granularidad 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, debe otorgar permisos. El método que utilice para hacerlo dependerá del authorizationType seleccionado.

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"

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.

Siga estos pasos para configurar OIDC para un conjunto de réplicas.

1

Si ya tiene un archivo de definición de conjunto de réplicas, ábralo. De lo contrario, puede copiar los ejemplos de trabajo completos 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 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: MongoDB
metadata:
name: my-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"

Ejemplo B: Federación de carga de trabajo con ID de usuario

Úselo para autenticar una aplicación o servicio con una identidad específica. Es ideal para cuentas de servicio.

apiVersion: mongodb.com/v1
kind: MongoDB
metadata:
name: my-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: "billing-service-auth"
issuerURI: "https://<your-idp-uri>"
clientId: "<billing-service-client-id>"
audience: "mongodb-api"
userClaim: "sub"
authorizationMethod: "WorkloadIdentityFederation"
authorizationType: "UserID"

Nota

Nota: Para otorgar permisos a esta identidad, también debe crear un recurso MongoDBUser. El nombre de usuario de ese recurso debe ser billing-service-auth/<user-subject-from-jwt>.

Para obtener más información,consulte Administrar usuarios de bases de datos mediante la autenticación OIDC.

Ejemplo C: Federación de fuerza laboral con ID de usuario

Utilice esto para otorgarle a un usuario humano específico permisos únicos que no estén cubiertos por sus membresías de grupo.

apiVersion: mongodb.com/v1
kind: MongoDB
metadata:
name: my-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-special-user"
issuerURI: "https://<your-idp-domain>"
clientId: "<your-client-id>"
audience: "api://default"
userClaim: "sub"
authorizationMethod: "WorkforceIdentityFederation"
authorizationType: "UserID"

Nota

Nota: Para otorgar permisos a esta identidad, también debe crear un recurso MongoDBUser. El nombre de usuario de ese recurso debe ser billing-service-auth/<user-subject-from-jwt>.

Para obtener más información,consulte Administrar usuarios de bases de datos mediante la autenticación OIDC.

Ejemplo D: Federación de carga de trabajo con membresía de grupo

Utilice esto para autenticar un grupo de servicios o aplicaciones relacionados que requieren los mismos permisos.

apiVersion: mongodb.com/v1
kind: MongoDB
metadata:
name: my-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: "reporting-services"
issuerURI: "https://<your-idp-uri>"
clientId: "<reporting-services-client-id>"
audience: "mongodb-api"
groupsClaim: "service-roles"
authorizationMethod: "WorkloadIdentityFederation"
authorizationType: "GroupMembership"
roles:
- role: "reporting-services/report-generators"
db: "admin"
roles:
- role: "read"
db: "sales-data"
3
kubectl apply -f <your-replica-set-file>.yaml
4
kubectl get mdb <resource-name> -o yaml -w

Utilice el siguiente ejemplo para configurar OIDC para un clúster fragmentado. Los principios y las opciones de configuración son idénticos a los de un conjunto de réplicas.

apiVersion: mongodb.com/v1
kind: MongoDB
metadata:
name: my-oidc-shardedcluster
spec:
type: ShardedCluster
shardCount: 2
mongodsPerShardCount: 3
mongosCount: 2
configServerCount: 3
version: 7.0.11-ent
opsManager:
configMapRef:
name: <my-project-configmap>
credentials: <my-credentials-secret>
security:
authentication:
modes: ["SCRAM", "OIDC"]
oidcProviderConfigs:
# Provider 1: For human users (Workforce/Group)
- configurationName: "idp0-human-users"
issuerURI: "https://<your-idp0-domain>"
clientId: "<human-users-client-id>"
audience: "api://default"
groupsClaim: "groups"
authorizationMethod: "WorkforceIdentityFederation"
authorizationType: "GroupMembership"
# Provider 2: For service accounts (Workload/UserID)
- configurationName: "service-accounts"
issuerURI: "https://<your-idp-uri>"
clientId: "<services-client-id>"
audience: "mongodb-api"
userClaim: "sub"
authorizationMethod: "WorkloadIdentityFederation"
authorizationType: "UserID"
roles:
# Role mapping for the human user group
- role: "idp0-human-users/db-admins"
db: "admin"
roles:
- role: "readWriteAnyDatabase"
db: "admin"
  • Validar manualmente el token JWT: utilice una herramienta para decodificar el token OIDC.
    • Reclamaciones principales: Asegúrese de que las iss reclamaciones (emisor) y aud (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 ()userClaim y 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 MongoDBUser nombre de usuario debe tener el mismo formato <configurationName>/<userClaimValue> que. El debe <configurationName> coincidir con el nombre del proveedor de OIDC en su MongoDB recurso.

  • Confirmar el uso de labase de datos $external: Para la autorización, el UserID MongoDBUser recurso debe db: "$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.roles tenga el formato correcto <configurationName>/<groupName> como, donde <groupName> coincida exactamente con un grupo en del groupsClaim JWT.

  • 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, readWrite en la base de datos correcta).

  • Verificar la referencia del recurso MongoDBUser: para UserID la autorización, asegúrese de que el spec.mongodbResourceRef.name en el MongoDBUser recurso apunte correctamente al nombre de su MongoDB implementación.