Overview
La MONGODB-AWS El mecanismo de autenticación utiliza AWS Identity and Access Management (AWS IAM) o las credenciales de AWS Lambda para autenticar a un usuario en MongoDB. Puede usar este mecanismo solo cuando se autentique en MongoDB Atlas.
Tip
Configura Atlas para la autenticación IAM de AWS
Para obtener más información sobre cómo configurar MongoDB Atlas para la autenticación de AWS IAM, consulta Configure la autenticación con AWS IAM en la documentación de Atlas.
Marcadores de posición de código
Los ejemplos de código en esta página utilizan los siguientes marcadores de posición:
<hostname>La dirección de red de su implementación de MongoDB Atlas<AWS IAM access key ID>: Su clave de acceso de AWS ID<AWS IAM secret access key>Tu clave secreta de acceso de AWS<AWS session token>Token de sesión de AWS
Para usar los ejemplos de código en esta página, reemplaza estos marcadores de posición con tus 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.
Usar la autenticación de AWS IAM en tu aplicación
Para utilizar la autenticación de AWS IAM, debes instalar PyMongo con la opción aws, como se muestra en el siguiente ejemplo:
python -m pip install pymongo[aws]
PyMongo utiliza Boto3, el SDK de AWS para Python, para gestionar las credenciales. Boto3 intenta recuperar las credenciales de AWS desde las siguientes fuentes, en el orden indicado:
Argumentos nombrados pasados al constructor
MongoCliento parámetros en la cadena de conexiónVariables de entorno
Archivo de credenciales compartidas
Archivo de configuración de AWS
AssumeRolesolicitud al Servicio de tokens de seguridad (STS) de AWSAssumeRoleWithWebIdentitysolicitud al AWS STSServicio de metadatos de instancia en una instancia de Amazon EC2 con un rol de IAM configurado
Las siguientes secciones describen cómo utilizar PyMongo para recuperar credenciales de estas fuentes y usarlas para autenticar su aplicación.
MongoClient credenciales
Primero, PyMongo verifica si has proporcionado credenciales de AWS al constructor MongoClient, ya sea como un argumento con nombre o como parte de la cadena de conexión. Para pasar sus credenciales a MongoClient, configure las siguientes opciones de conexión:
usernameEl ID de clave de acceso de AWS IAM para autenticarse. Codifica este valor en porcentaje antes de incluirlo en la cadena de conexión.password: La clave secreta de acceso de IAM de AWS. Codifica este valor en porcentaje antes de incluirlo en una cadena de conexión.authMechanism: Establecer en"MONGODB-AWS".
Puedes establecer estas opciones de dos maneras: pasando argumentos al constructor de MongoClient o a través de parámetros en tu cadena de conexión.
client = pymongo.MongoClient("mongodb+srv://<hostname>", username="<AWS IAM access key ID>", password="<AWS IAM secret access key>", authMechanism="MONGODB-AWS")
uri = ("mongodb+srv://<percent-encoded AWS IAM access key ID>:" "<percent-encoded AWS IAM secret access key>" "@<hostname>/?" "&authMechanism=MONGODB-AWS") client = pymongo.MongoClient(uri)
client = pymongo.AsyncMongoClient("mongodb+srv://<hostname>", username="<AWS IAM access key ID>", password="<AWS IAM secret access key>", authMechanism="MONGODB-AWS")
uri = ("mongodb+srv://<percent-encoded AWS IAM access key ID>:" "<percent-encoded AWS IAM secret access key>" "@<hostname>/?" "&authMechanism=MONGODB-AWS") client = pymongo.AsyncMongoClient(uri)
Variables de entorno
Si no proporciona un nombre de usuario y una contraseña cuando construye su objeto MongoClient, PyMongo intenta recuperar las credenciales de AWS de las siguientes variables de entorno:
AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN
Para utilizar estas variables de entorno para autenticar tu aplicación, primero configúralas con los valores de IAM de AWS necesarios para la autenticación, como se muestra en el siguiente ejemplo de código:
export AWS_ACCESS_KEY_ID=<AWS IAM access key ID> export AWS_SECRET_ACCESS_KEY=<AWS IAM secret access key> export AWS_SESSION_TOKEN=<AWS session token>
Importante
No codifiques en porcentaje los valores en estas variables de entorno.
Después de configurar estas variables de entorno, establece la opción de conexión authMechanism en "MONGODB-AWS". Puedes configurar esta opción de dos maneras: pasando un argumento al constructor MongoClient o mediante un parámetro en tu cadena de conexión.
client = pymongo.MongoClient("mongodb+srv://<hostname>", authMechanism="MONGODB-AWS")
uri = "mongodb+srv://<hostname>/?&authMechanism=MONGODB-AWS" client = pymongo.MongoClient(uri)
client = pymongo.AsyncMongoClient("mongodb+srv://<hostname>", authMechanism="MONGODB-AWS")
uri = "mongodb+srv://<hostname>/?&authMechanism=MONGODB-AWS" client = pymongo.AsyncMongoClient(uri)
Tip
AWS Lambda
Los entornos de ejecución de AWS Lambda pueden configurar automáticamente estas variables de entorno durante la inicialización. Para obtener más información sobre cómo usar las variables de entorno en un entorno AWS Lambda, consulta Uso de variables de entorno en Lambda en la documentación de AWS.
Archivo de Credenciales Compartidas
Si PyMongo no encuentra las credenciales de AWS en las variables de entorno anteriores, intenta leerlas desde un archivo de credenciales compartidas.
Para utilizar un archivo de credenciales compartido para autenticar tu aplicación, asegúrate de que el archivo exista en tu entorno y esté configurado correctamente. Para aprender cómo crear un archivo compartido con credenciales, consulta Credenciales en la documentación de Boto3 y Configuración en la documentación de AWS.
Después de crear el archivo de credenciales compartidas, establezca la opción de conexión authMechanism en "MONGODB-AWS". Puedes configurar esta opción de dos maneras: pasando un argumento al constructor MongoClient o mediante un parámetro en tu cadena de conexión.
client = pymongo.MongoClient("mongodb+srv://<hostname>", authMechanism="MONGODB-AWS")
uri = "mongodb+srv://<hostname>/?&authMechanism=MONGODB-AWS" client = pymongo.MongoClient(uri)
client = pymongo.AsyncMongoClient("mongodb+srv://<hostname>", authMechanism="MONGODB-AWS")
uri = "mongodb+srv://<hostname>/?&authMechanism=MONGODB-AWS" client = pymongo.AsyncMongoClient(uri)
Tip
Para evitar que PyMongo utilice un archivo de credenciales compartidas para la autenticación, realiza una de las siguientes acciones:
Configura la variable de entorno
AWS_SHARED_CREDENTIALS_FILEen tu terminal como"".Añade
os.environ["AWS_SHARED_CREDENTIALS_FILE"] = ""a tu script o aplicación.Cree un perfil de AWS específicamente para sus credenciales de MongoDB. Establece la variable de entorno
AWS_PROFILEcon el nombre del perfil que creaste.
Archivo de configuración de AWS
Si PyMongo no encuentra credenciales en el archivo compartido de credenciales, intenta leerlas de un archivo de configuración de AWS.
Para utilizar un archivo de configuración de AWS para autenticar tu aplicación, asegúrate de que el archivo exista en tu entorno y esté configurado correctamente. Para aprender a crear un archivo de configuración de AWS, consulta Credenciales en la documentación de Boto3 y Configuración en la documentación de AWS.
Después de crear el archivo de configuración, establezca la opción de conexión authMechanism en "MONGODB-AWS". Puedes configurar esta opción de dos formas: pasando un argumento al constructor MongoClient o a través de un parámetro en tu cadena de conexión.
client = pymongo.MongoClient("mongodb+srv://<hostname>", authMechanism="MONGODB-AWS")
uri = "mongodb+srv://<hostname>/?&authMechanism=MONGODB-AWS" client = pymongo.MongoClient(uri)
client = pymongo.AsyncMongoClient("mongodb+srv://<hostname>", authMechanism="MONGODB-AWS")
uri = "mongodb+srv://<hostname>/?&authMechanism=MONGODB-AWS" client = pymongo.AsyncMongoClient(uri)
Solicitud de asumir rol
En lugar de almacenar las credenciales de AWS en su archivo de configuración de AWS, puede indicar a PyMongo que realice una solicitud AssumeRole a un endpoint AWS STS. Esta solicitud devuelve credenciales temporales que su aplicación puede usar para autenticarse.
Para autenticarte con credenciales temporales de AWS IAM devueltas por una solicitud de AssumeRole, asegúrate de que el archivo de configuración de AWS exista en tu entorno y esté configurado correctamente. Para aprender a crear y configurar un archivo de configuración de AWS, consulta Credenciales en la documentación de Boto3 y Configuración en la documentación de AWS.
Después de crear el archivo de configuración, configure las siguientes opciones de conexión:
username: El ID de clave de acceso de AWS IAM para autenticarse devuelto por la solicitudAssumeRole. Codifica este valor antes de incluirlo en una cadena de conexión.passwordfunción AWS IAM de acceso secreto devuelta por la solicitudAssumeRole. Codifica este valor en porcentaje antes de incluirlo en una cadena de conexión.authMechanismProperties: Se establece enAWS_SESSION_TOKEN:y en el token de sesión de AWS devuelto por la solicitudAssumeRole.authMechanism: Establecer en"MONGODB-AWS".
Puedes establecer estas opciones de dos maneras: pasando argumentos al constructor de 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.
client = pymongo.MongoClient("mongodb+srv://@<hostname>", username="<AWS IAM access key ID>", password="<AWS IAM secret access key>", authMechanismProperties="AWS_SESSION_TOKEN:<AWS session token>", authMechanism="MONGODB-AWS")
uri = ("mongodb+srv://<percent-encoded AWS IAM access key ID>:" "<percent-encoded AWS IAM secret access key>" "@<hostname>/?" "authMechanismProperties=AWS_SESSION_TOKEN:<AWS session token>" "&authMechanism=MONGODB-AWS") client = pymongo.MongoClient(uri)
client = pymongo.AsyncMongoClient("mongodb+srv://@<hostname>", username="<AWS IAM access key ID>", password="<AWS IAM secret access key>", authMechanismProperties="AWS_SESSION_TOKEN:<AWS session token>", authMechanism="MONGODB-AWS")
uri = ("mongodb+srv://<percent-encoded AWS IAM access key ID>:" "<percent-encoded AWS IAM secret access key>" "@<hostname>/?" "authMechanismProperties=AWS_SESSION_TOKEN:<AWS session token>" "&authMechanism=MONGODB-AWS") client = pymongo.AsyncMongoClient(uri)
Para obtener más información sobre cómo usar la solicitud AssumeRole para autenticar su aplicación, consulte la siguiente documentación de AWS:
AsumeRolConIdentidadWeb
Importante
Su aplicación debe usar pymongo_auth_aws v1.1.0 o posterior para el soporte con EKS.
Si su aplicación verifica la identidad de los usuarios de su clúster EKS a través de un proveedor de identidad OpenID Connect (OIDC), PyMongo puede realizar una solicitud AssumeRoleWithWebIdentity para intercambiar el token OIDC por credenciales temporales de AWS para su aplicación.
Para autenticarte con credenciales temporales de AWS IAM devueltas por una solicitud de AssumeRoleWithWebIdentity, asegúrate de que el archivo de configuración de AWS exista en tu entorno y esté configurado correctamente. Para aprender a crear y configurar un archivo de configuración de AWS, consulta Credenciales en la documentación de Boto3 y Configuración en la documentación de AWS.
Después de configurar tu entorno para una solicitud AssumeRoleWithWebIdentity, configura la opción de conexión authMechanism en "MONGODB-AWS". Puede configurar esta opción de dos maneras: pasando un argumento al constructor MongoClient o mediante un parámetro en su cadena de conexión.
client = pymongo.MongoClient("mongodb+srv://<hostname>", authMechanism="MONGODB-AWS")
uri = "mongodb+srv://<hostname>/?&authMechanism=MONGODB-AWS" client = pymongo.MongoClient(uri)
client = pymongo.AsyncMongoClient("mongodb+srv://<hostname>", authMechanism="MONGODB-AWS")
uri = "mongodb+srv://<hostname>/?&authMechanism=MONGODB-AWS" client = pymongo.AsyncMongoClient(uri)
Para obtener más información sobre el uso de una solicitud AssumeRoleWithWebIdentity para autenticar tu aplicación, consulta la siguiente documentación de AWS:
Contenedor de ECS o instancia de EC2
Si su aplicación se ejecuta en una instancia de Amazon Elastic Cloud Compute (EC2) en un contenedor Elastic Container Service (ECS), PyMongo puede recuperar automáticamente credenciales temporales de AWS de un endpoint ECS.
Para usar credenciales temporales desde una instancia EC2, configure la opción de conexión authMechanism en "MONGODB-AWS". Puede configurar esta opción de dos maneras: pasando un argumento al constructor MongoClient o mediante un parámetro en su cadena de conexión.
client = pymongo.MongoClient("mongodb+srv://<hostname>", authMechanism="MONGODB-AWS")
uri = "mongodb+srv://<hostname>/?&authMechanism=MONGODB-AWS" client = pymongo.MongoClient(uri)
client = pymongo.AsyncMongoClient("mongodb+srv://<hostname>", authMechanism="MONGODB-AWS")
uri = "mongodb+srv://<hostname>/?&authMechanism=MONGODB-AWS" client = pymongo.AsyncMongoClient(uri)
Documentación de la API
Para obtener más información sobre cómo autenticar tu aplicación en PyMongo, consulta la siguiente documentación de la API: