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 la autenticación OIDC de un solo 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.

  • UserID: Con este tipo, MongoDB utiliza una declaración que identifica de forma única al usuario (definida por userClaim, que por defecto es sub). A continuación, asignarás este ID de usuario específico e individual a un MongoDBUser (es necesario crear el MongoDBUser por separado). Esto es más detallado y es útil para conceder permisos a un solo usuario o a una identidad de servicio específica sin utilizar 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.

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: 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, consulta Gestionar usuarios de base de datos utilizando la autenticación OIDC.

Ejemplo C: Federación de la fuerza laboral con UserID

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, consulta Gestionar usuarios de base de datos utilizando la autenticación OIDC.

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

Utiliza esto para autenticar un grupo de servicios o aplicaciones relacionados que requieran 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

Utiliza el siguiente ejemplo para configurar OIDC en un clúster fragmentado. Los principios y las opciones de configuración son idénticos a los de un set 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.
    • 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.