Docs Menu
Docs Home
/ /

Gestión de identidad y acceso de AWS

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.

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.

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:

  1. Argumentos con nombre 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 token de seguridad de AWS (STS)

  6. AssumeRoleWithWebIdentity solicitud al AWS STS

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

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)

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

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

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)

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

  • passwordClave de acceso secreta de AWS IAM devuelta por la solicitud AssumeRole. Codifique este valor porcentualmente antes de incluirlo en una cadena de conexión.

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

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

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:

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)

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

Volver

X.509

En esta página