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

OIDC (Federación de identidad de carga de trabajo)

El mecanismo de autenticación OpenID Connect (OIDC) permite autenticarse en MongoDB usando un proveedor de identidad de terceros, como Azure o Google Cloud Platform (GCP).

Puede utilizar este mecanismo solo para autenticarse en MongoDB Atlas o MongoDB Enterprise Advanced, y solo cuando se autentique en MongoDB v7.0 o posterior.

Tip

Autenticación OIDC

Para obtener más información sobre cómo configurar MongoDB Atlas para la autenticación OIDC, consulta Configurar Workforce Identity Federation con OIDC en la documentación de Atlas.

Para obtener más información sobre el uso de la autenticación OIDC con MongoDB, consulta Autenticación OpenID Connect y Parámetros del MongoDB Server en el manual del MongoDB Server.

Los ejemplos de código en esta página utilizan los siguientes marcadores de posición:

  • +srv: Incluir esta opción en el prefijo de su cadena de conexión solamente si está conectando a un clúster de MongoDB Atlas. Para obtener más información sobre la opción +srv, consulte Formatos de cadena de conexión en el manual del servidor de MongoDB.

  • <Azure ID>ID de cliente o ID de la aplicación de la identidad gestionada de Azure o de la aplicación empresarial, si está realizando la autenticación con Azure IMDS.

  • <hostname>: La dirección de red de tu implementación de MongoDB.

  • <port>: El número de puerto de tu implementación de MongoDB. Si omites este parámetro, el driver usará el puerto por defecto (27017). No necesitas especificar un puerto al conectar a un clúster de MongoDB Atlas.

  • <audience>:El valor del parámetro audience configurado en su implementación de MongoDB.

Para utilizar los ejemplos de código en esta página, reemplace estos marcadores de posición con sus propios valores.

Importante

Codificación porcentaje

Debes codificar porcentualmente un nombre de usuario y contraseña antes de incluirlos en una URI de MongoDB. El método quote_plus(), disponible en el urllib.parse módulo, es una forma de realizar esta tarea. Por ejemplo, al llamar a quote_plus("and / or") se devuelve la string and+%2F+or.

No codifiques en porcentaje el nombre de usuario o la contraseña al pasarlos como argumentos a MongoClient.

Las siguientes secciones describen cómo utilizar el mecanismo de autenticación MONGODB-OIDC para autenticarse en varias plataformas.

Nota

Debido a que la librería estándar de Python no admite solicitudes HTTP asíncronas, todas las solicitudes OIDC de PyMongo son síncronas. A partir de PyMongo v4.14, Las solicitudes OIDC síncronas no bloquean el ciclo asyncio.

Si tu aplicación se ejecuta en una máquina virtual de Azure, o utiliza el Servicio de metadatos de instancia de Azure (IMDS), puedes autenticarte en MongoDB utilizando el soporte de funcionalidad incorporada para Azure de PyMongo.

Puedes configurar OIDC para Azure IMDS de dos maneras: pasando argumentos al constructor MongoClient o mediante parámetros en tu cadena de conexión.

Nota

Si los valores de authMechanismProperties incluyen una coma, debes utilizar el constructor MongoClient para configurar las opciones de autenticación.

Primero, cree un diccionario de Python para las propiedades de su mecanismo de autenticación, como se muestra en el siguiente ejemplo:

properties = {"ENVIRONMENT": "azure", "TOKEN_RESOURCE": "<audience>"}

A continuación, configure las siguientes opciones de conexión:

  • username:Si usa una identidad administrada de Azure, configúrelo en el identificador de cliente de la identidad administrada.

  • authMechanism:Establecer en "MONGODB-OIDC".

  • authMechanismProperties: Establezca en el diccionario properties que creó en el paso anterior.

El siguiente ejemplo de código muestra cómo establecer estas opciones al crear un MongoClient:

from pymongo import MongoClient
# define properties and MongoClient
properties = {"ENVIRONMENT": "azure", "TOKEN_RESOURCE": "<audience>"}
client = MongoClient(
"mongodb[+srv]://<hostname>:<port>",
username="<Azure ID>",
authMechanism="MONGODB-OIDC",
authMechanismProperties=properties
)

Incluya las siguientes opciones de conexión en su cadena de conexión:

  • username:Si usa una identidad administrada de Azure, configúrelo en el identificador de cliente de la identidad administrada.

  • authMechanism:Establecer en MONGODB-OIDC.

  • authMechanismProperties:Establecer en ENVIRONMENT:azure,TOKEN_RESOURCE:<audience>.

    El siguiente ejemplo de código muestra cómo configurar estas opciones en su cadena de conexión:

from pymongo import MongoClient
# define URI and MongoClient
uri = ("mongodb[+srv]://<hostname>:<port>/?"
"username=<username>"
"&authMechanism=MONGODB-OIDC"
"&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:<percent-encoded audience>")
client = MongoClient(uri)

Tip

Si su aplicación se está ejecutando en una VM de Azure y sólo una identidad administrada está asociada a la VM, puede omitir la opción de conexión username.

Si tu aplicación se ejecuta en una máquina virtual de Google Compute Engine, o si utiliza el Servicio de metadatos de instancia de GCP, puedes autenticarte en MongoDB usando la compatibilidad de PyMongo con GCP con funcionalidad incorporada.

Puedes configurar OIDC para GCP IMDS de dos maneras: pasando argumentos al constructor MongoClient o a través de parámetros en tu cadena de conexión.

Nota

Si los valores de authMechanismProperties incluyen una coma, debes utilizar el constructor MongoClient para configurar las opciones de autenticación.

Primero, cree un diccionario de Python para las propiedades de su mecanismo de autenticación, como se muestra en el siguiente ejemplo.

properties = {"ENVIRONMENT": "gcp", "TOKEN_RESOURCE": "<audience>"}

A continuación, configure las siguientes opciones de conexión:

  • authMechanism:Establecer en "MONGODB-OIDC".

  • authMechanismProperties: Establezca en el diccionario properties que creó en el paso anterior.

El siguiente ejemplo de código muestra cómo establecer estas opciones al crear un MongoClient:

from pymongo import MongoClient
# define properties and MongoClient
properties = {"ENVIRONMENT": "gcp", "TOKEN_RESOURCE": "<audience>"}
client = MongoClient(
"mongodb[+srv]://<hostname>:<port>",
authMechanism="MONGODB-OIDC",
authMechanismProperties=properties
)

Incluya las siguientes opciones de conexión en su cadena de conexión:

  • authMechanism:Establecer en MONGODB-OIDC.

  • authMechanismProperties:Establecer en ENVIRONMENT:gcp,TOKEN_RESOURCE:<audience>.

El siguiente ejemplo de código muestra cómo configurar estas opciones en su cadena de conexión:

from pymongo import MongoClient
# define URI and MongoClient
uri = ("mongodb[+srv]://<hostname>:<port>/?"
"&authMechanism=MONGODB-OIDC"
"&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:<percent-encoded audience>")
client = MongoClient(uri)

Si su aplicación se ejecuta en Funciones de Azure, entorno de servicios de aplicaciones (ASE) o Servicio de Kubernetes de Azure (AKS), puede utilizar el paquete azure-identity para obtener credenciales de autenticación.

Primero, use pip para instalar la librería azure-identity, como se muestra en el siguiente ejemplo:

python3 -m pip install azure-identity

A continuación, define una clase que herede de la clase OIDCCallback. Esta clase debe implementar un método fetch(), que retorna el token OIDC en forma de un objeto OIDCCallbackResult.

El siguiente ejemplo muestra cómo definir una clase de función de retorno llamada MyCallback. Esta clase incluye un método fetch() que recupera un token OIDC de un archivo en la ubicación estándar del archivo de tokens de la cuenta de servicio.

audience = "<audience>"
client_id = "<Azure ID>"
class MyCallback(OIDCCallback):
def fetch(self, context: OIDCCallbackContext) -> OIDCCallbackResult:
credential = DefaultAzureCredential(managed_identity_client_id=client_id)
token = credential.get_token(f"{audience}/.default").token
return OIDCCallbackResult(access_token=token)

Después de definir su clase de devolución de llamada, cree un diccionario de Python que contenga una clave, "OIDC_CALLBACK", cuyo valor sea una instancia de su clase de devolución de llamada personalizada:

properties = {"OIDC_CALLBACK": MyCallback()}

Por último, configure las siguientes opciones de conexión pasando los siguientes argumentos al constructor MongoClient:

  • authMechanism:Establecer en "MONGODB-OIDC".

  • authMechanismProperties: Establezca en el diccionario properties que creó en el paso anterior.

Selecciona el Synchronous o la pestaña Asynchronous para ver el código correspondiente:

client = MongoClient(
"mongodb[+srv]://<hostname>:<port>",
authMechanism="MONGODB-OIDC",
authMechanismProperties=properties
)
client = AsyncMongoClient(
"mongodb[+srv]://<hostname>:<port>",
authMechanism="MONGODB-OIDC",
authMechanismProperties=properties
)

Si tu aplicación se ejecuta en un clúster de GCP Google Kubernetes Engine (GKE) con una cuenta de servicio configurada, puedes leer el token de OIDC desde la ubicación estándar del archivo de token de la cuenta de servicio.

Primero, defina una clase que herede de la clase OIDCCallback. Esta clase debe implementar un método fetch(), que devuelve el token OIDC como un objeto OIDCCallbackResult.

El siguiente ejemplo muestra cómo definir una clase de función de retorno llamada MyCallback. Esta clase incluye un método fetch() que recupera un token OIDC de un archivo en la ubicación estándar del archivo de tokens de la cuenta de servicio.

class MyCallback(OIDCCallback):
def fetch(self, context: OIDCCallbackContext) -> OIDCCallbackResult:
with open("/var/run/secrets/kubernetes.io/serviceaccount/token") as fid:
token = fid.read()
return OIDCCallbackResult(access_token=token)

Después de definir su clase de devolución de llamada, cree un diccionario de Python que contenga una clave, "OIDC_CALLBACK", cuyo valor sea una instancia de su clase de devolución de llamada personalizada:

properties = {"OIDC_CALLBACK": MyCallback()}

Finalmente, definir las siguientes opciones de conexión pasando los siguientes argumentos al constructor MongoClient:

  • authMechanism:Establecer en "MONGODB-OIDC".

  • authMechanismProperties: Establezca en el diccionario properties que creó en el paso anterior.

Selecciona la pestaña Synchronous o Asynchronous para ver el código correspondiente:

client = MongoClient(
"mongodb[+srv]://<hostname>:<port>",
authMechanism="MONGODB-OIDC",
authMechanismProperties=properties
)
client = AsyncMongoClient(
"mongodb[+srv]://<hostname>:<port>",
authMechanism="MONGODB-OIDC",
authMechanismProperties=properties
)

Si tu aplicación se ejecuta en un clúster de Kubernetes, puedes autenticarte en MongoDB utilizando el soporte de Kubernetes incorporado de PyMongo.

Puede configurar OIDC para Kubernetes de dos maneras: pasando argumentos al constructor MongoClient o mediante parámetros en su cadena de conexión. Seleccione una de las siguientes pestañas para ver cómo habilitar la autenticación de Kubernetes para su aplicación:

properties = {"ENVIRONMENT": "k8s"}
client = MongoClient(
"mongodb[+srv]://<hostname>:<port>",
authMechanism="MONGODB-OIDC",
authMechanismProperties=properties
)
uri = ("mongodb[+srv]://<hostname>:<port>/?"
"authMechanism=MONGODB-OIDC"
"&authMechanismProperties=ENVIRONMENT:k8s")
client = MongoClient(uri)
properties = {"ENVIRONMENT": "k8s"}
client = AsyncMongoClient(
"mongodb[+srv]://<hostname>:<port>",
authMechanism="MONGODB-OIDC",
authMechanismProperties=properties
)
uri = ("mongodb[+srv]://<hostname>:<port>/?"
"authMechanism=MONGODB-OIDC"
"&authMechanismProperties=ENVIRONMENT:k8s")
client = AsyncMongoClient(uri)

Si se especifica Kubernetes OIDC como el mecanismo de autenticación, el driver lee el contenido del token OIDC desde una de las siguientes ubicaciones:

Debes almacenar tu token OIDC en la ubicación que corresponda al servicio que utilizas para ejecutar tu aplicación.

Volver

AWS IAM

En esta página