Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

AWS Identity and Access gestión

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.

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.

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:

  1. Argumentos nombrados pasados al constructor MongoClient o parámetros en la cadena de conexión

  2. Variables de entorno

  3. Archivo de credenciales compartidas

  4. Archivo de configuración de AWS

  5. AssumeRole solicitud al Servicio de tokens de seguridad (STS) de AWS

  6. AssumeRoleWithWebIdentity solicitud al AWS STS

  7. Servicio 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.

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)

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_ID

  • AWS_SECRET_ACCESS_KEY

  • AWS_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.

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_FILE en 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_PROFILE con el nombre del perfil que creaste.

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)

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 solicitud AssumeRole. Codifica este valor antes de incluirlo en una cadena de conexión.

  • passwordfunción AWS IAM de acceso secreto devuelta por la solicitud AssumeRole. Codifica este valor en porcentaje antes de incluirlo en una cadena de conexión.

  • authMechanismProperties: Se establece en AWS_SESSION_TOKEN: y en el token de sesión de AWS devuelto por la solicitud AssumeRole.

  • 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:

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:

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)

Para obtener más información sobre cómo autenticar tu aplicación en PyMongo, consulta la siguiente documentación de la API:

Volver

X.509

En esta página