Overview
El MONGODB-AWS El mecanismo de autenticación utiliza credenciales de Amazon Web Services Identity and Access Management (AWS IAM) o AWS Lambda para autenticar a un usuario en MongoDB. Este mecanismo solo se puede usar al autenticarse en MongoDB Atlas.
Tip
Configurar Atlas para la autenticación de AWS IAM
Para obtener más información sobre cómo configurar MongoDB Atlas para la autenticación de AWS IAM, consulte Configurar la autenticación con AWS IAM en la documentación de Atlas.
Marcadores de posición de código
Los ejemplos de código de 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 ID de clave de acceso de AWS<AWS IAM secret access key>:Su clave de acceso secreta de AWS<AWS session token>:Su token de sesión de AWS
Para utilizar los ejemplos de código en esta página, reemplace estos marcadores de posición con sus propios valores.
Importante
Codificación porcentual
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 codifique en porcentaje el nombre de usuario ni la contraseña al pasarlos como argumentos a MongoClient.
Uso de la autenticación de AWS IAM en su aplicación
Para utilizar la autenticación de AWS IAM, debe 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 de las siguientes fuentes, en el orden indicado:
Argumentos con nombre 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 token de seguridad de AWS (STS)AssumeRoleWithWebIdentitysolicitud al AWS STSServicio de metadatos de instancia en una instancia de Amazon EC2 con una función de IAM configurada
Las siguientes secciones describen cómo usar PyMongo para recuperar credenciales de estas fuentes y usarlas para autenticar su aplicación.
MongoClient Credenciales
Primero, PyMongo comprueba si has pasado las credenciales de AWS al constructor MongoClient, ya sea como argumento con nombre o como parte de la cadena de conexión. Para pasar tus credenciales a MongoClient, configura las siguientes opciones de conexión:
usernameEl ID de la clave de acceso de AWS IAM para la autenticación. Codifique este valor porcentualmente antes de incluirlo en una cadena de conexión.passwordClave de acceso secreta de AWS IAM. Codifique este valor porcentualmente antes de incluirlo en una cadena de conexión.authMechanism:Establecer en"MONGODB-AWS".
Puede configurar estas opciones de dos maneras: pasando argumentos al constructor MongoClient o mediante parámetros en su 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 usar estas variables de entorno para autenticar su aplicación, primero configúrelas con los valores de AWS IAM 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 codifique en porcentaje los valores en estas variables de entorno.
Después de configurar estas variables de entorno, 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 la 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 el uso de variables de entorno en un entorno de AWS Lambda, consulte "Uso de variables de entorno de 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 compartido.
Para usar un archivo de credenciales compartidas para autenticar su aplicación, asegúrese de que exista en su entorno y esté configurado correctamente. Para saber cómo crear un archivo de credenciales compartidas, consulte Credenciales en la3 documentación de Boto y Configuración en la documentación de AWS.
Después de crear el archivo de credenciales compartidas, 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 la 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, realice una de las siguientes acciones:
Establezca la variable de entorno
AWS_SHARED_CREDENTIALS_FILEen""en su terminal.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. Configure la variable de entorno
AWS_PROFILEcon el nombre del perfil que creó.
Archivo de configuración de AWS
Si PyMongo no encuentra las credenciales en el archivo de credenciales compartidas, intenta leerlas desde un archivo de configuración de AWS.
Para usar un archivo de configuración de AWS para autenticar su aplicación, asegúrese de que exista en su entorno y esté configurado correctamente. Para saber cómo crear un archivo de configuración de AWS, consulte Credenciales en la3 documentación de Boto y Configuración en la documentación de AWS.
Después de crear el archivo de configuración, 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 la 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, puede indicar a PyMongo que realice una solicitud AssumeRole a un punto de conexión de AWS STS. Esta solicitud devuelve credenciales temporales que su aplicación puede usar para la autenticación.
Para autenticarse con las credenciales temporales de AWS IAM devueltas por una AssumeRole solicitud, asegúrese de que el archivo de configuración de AWS exista en su entorno y esté configurado correctamente. Para aprender a crear y configurar un archivo de configuración de AWS, consulte Credenciales en la 3 documentación de Boto 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.passwordClave de acceso secreta de AWS IAM devuelta por la solicitudAssumeRole. Codifique este valor porcentualmente antes de incluirlo en una cadena de conexión.authMechanismProperties:Establecido enAWS_SESSION_TOKEN:y el token de sesión de AWS devuelto por la solicitudAssumeRole.authMechanism:Establecer en"MONGODB-AWS".
Puede configurar estas opciones de dos maneras: pasando argumentos al constructor MongoClient o mediante parámetros en su cadena de conexión.
Nota
Si sus valores authMechanismProperties incluyen una coma, debe utilizar el constructor MongoClient para configurar sus 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:
AsumirRolConIdentidadWeb
Importante
Su aplicación debe usar pymongo_auth_aws v1.1.0 o posterior para el soporte con EKS.
Si su aplicación autentica usuarios para su clúster EKS desde 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 autenticarse con las credenciales temporales de AWS IAM devueltas por una AssumeRoleWithWebIdentity solicitud, asegúrese de que el archivo de configuración de AWS exista en su entorno y esté configurado correctamente. Para aprender a crear y configurar un archivo de configuración de AWS, consulte Credenciales en la 3 documentación de Boto 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 cómo usar una solicitud AssumeRoleWithWebIdentity para autenticar su aplicación, consulte la siguiente documentación de AWS:
Contenedor ECS o instancia EC2
Si su aplicación se ejecuta en una instancia de Amazon Elastic Cloud Compute (EC2) en un contenedor de Elastic Container Service (ECS), PyMongo puede recuperar automáticamente credenciales temporales de AWS desde un punto final de 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 su aplicación en PyMongo, consulte la siguiente documentación de API: