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

Nota

La autenticación de AWS solo está disponible en la MongoDB Enterprise Edition para MongoDB 4.4 y posteriores.

La MONGODB-AWS El mecanismo de autenticación utiliza AWS Gestión de identidades y accesos (IAM) y AWS Security Token Service (STS) para demostrar la identidad del cliente en una implementación de MongoDB. Los siguientes pasos describen el proceso de autenticación de AWS:

  1. El cliente utiliza las credenciales de AWS IAM para crear una firma y enviarla a la implementación de MongoDB.

  2. La implementación utiliza la firma del cliente para enviar una solicitud a AWS STS.

  3. Si la solicitud tiene éxito, STS devuelve el Nombre de recurso de Amazon (ARN) del usuario o rol de IAM que corresponde a las credenciales del cliente.

  4. La implementación utiliza el ARN devuelto para buscar al usuario. El cliente se autentica como este usuario.

Nota

El cliente y el servidor utilizan diferentes nombres de usuario. El cliente envía el ID de clave de acceso de AWS como nombre de usuario. El servidor utiliza el ARN del usuario o rol de IAM correspondiente a la ID de clave de acceso como nombre de usuario.

Para autenticarse con este mecanismo:

  • Crea un usuario en la base de datos $external cuyo nombre sea la ARN del usuario o rol de IAM con el que se desea autenticar.

  • Configure el cliente para utilizar el mecanismo de autenticación MONGODB-AWS.

Las credenciales de AWS incluyen los siguientes componentes:

  • ID de clave de acceso

  • Clave secreta de acceso

  • Token de sesión opcional

La autenticación con credenciales AWS IAM usa la clave de acceso ID y la clave de acceso secreta. La autenticación con credenciales temporales de AWS IAM usa los tres componentes: ID de clave de acceso, clave de acceso secreta y token de sesión.

Nota

El driver nunca envía la clave secreta de acceso ni el token de sesión a través de la red.

Se utilizan credenciales temporales con:

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

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

  • <port>Número de puerto de tu implementación de MongoDB.

  • <aws_access_key_id>: El ID de clave de acceso de AWS.

  • <aws_secret_access_key>: La clave secreta de acceso de AWS.

  • <aws_session_token>El 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.

El controlador de C++ puede recuperar credenciales de AWS IAM del entorno, o puede proporcionarlas explícitamente en el código de su aplicación.

Cuando utilices el mecanismo de autenticación MONGODB-AWS, el controlador de C++ intentará recuperar las credenciales de AWS de las siguientes fuentes, en este orden:

  1. Credenciales transmitidas en el URI de conexión

  2. Variables de entorno

  3. Solicitud de AWS EKS AssumeRoleWithWebIdentity

  4. Metadatos de contenedor ECS

  5. Metadatos de la instancia EC2

Puedes proporcionar credenciales de IAM a largo plazo (no temporales) en el URI de la conexión. Para hacerlo, establezca los siguientes parámetros URI:

  • username: Configúralo en tu ID de clave de acceso de AWS.

  • password: Configura tu clave de acceso secreta de AWS.

  • authMechanism: Establecer en MONGODB-AWS.

Puedes usar el URI de conexión por sí solo o el URI de conexión con opciones TLS configuradas usando las clases mongocxx::options::tls y mongocxx::options::client. Selecciona el Connection URI o Client Options with TLS pestaña para ver la sintaxis correspondiente:

auto uri = mongocxx::uri("mongodb://<aws_access_key_id>:<aws_secret_access_key>@<hostname>:<port>/?"
"authMechanism=MONGODB-AWS");
auto client = mongocxx::client(uri);
mongocxx::options::client client_options;
mongocxx::options::tls tls_options;
tls_options.ca_file("/path/to/ca.pem");
client_options.tls_opts(tls_options);
auto uri = mongocxx::uri("mongodb://<aws_access_key_id>:<aws_secret_access_key>@<hostname>:<port>/?"
"authMechanism=MONGODB-AWS&tls=true");
auto client = mongocxx::client(uri, client_options);

Nota

Si proporciona credenciales en una URI, codifique por porcentaje cualquier carácter especial en el ID de clave de acceso o en la clave secreta de acceso.

Se pueden proporcionar credenciales IAM temporales en el URI de conexión incluyendo el token de sesión en el parámetro authMechanismProperties del URI de conexión.

Selecciona la pestaña Connection URI o Client Options with TLS para ver la sintaxis correspondiente:

auto uri = mongocxx::uri("mongodb://<aws_access_key_id>:<aws_secret_access_key>@<hostname>:<port>/?"
"authMechanism=MONGODB-AWS&authMechanismProperties=AWS_SESSION_TOKEN:<aws_session_token>");
auto client = mongocxx::client(uri);
mongocxx::options::client client_options;
mongocxx::options::tls tls_options;
tls_options.ca_file("/path/to/ca.pem");
client_options.tls_opts(tls_options);
auto uri = mongocxx::uri("mongodb://<aws_access_key_id>:<aws_secret_access_key>@<hostname>:<port>/?"
"authMechanism=MONGODB-AWS"
"&authMechanismProperties=AWS_SESSION_TOKEN:<aws_session_token>&tls=true");
auto client = mongocxx::client(uri, client_options);

Cuando se especifica el MONGODB-AWS mecanismo de autenticación y se omiten el username y el password, el driver de C++ intenta automáticamente recuperar las credenciales de AWS desde variables de entorno, roles de identidad web y puntos finales de metadatos de AWS.

El controlador de C++ primero verifica las credenciales de las siguientes variables de entorno:

  • AWS_ACCESS_KEY_ID

  • AWS_SECRET_ACCESS_KEY

  • AWS_SESSION_TOKEN (Opcional)

Estas variables son reconocidas por muchas herramientas y SDKs de AWS, como la AWS CLI, y también suelen configurarse en entornos AWS Lambda.

Ejemplo de configuración de estas variables:

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>

Después de configurar estas variables de entorno, establece el parámetro authMechanism en tu URI de conexión a "MONGODB-AWS". Seleccione la pestaña Connection URI o Client Options with TLS para ver la sintaxis correspondiente:

auto uri = mongocxx::uri("mongodb://<hostname>:<port>/?"
"authMechanism=MONGODB-AWS");
auto client = mongocxx::client(uri);
mongocxx::options::client client_options;
mongocxx::options::tls tls_options;
tls_options.ca_file("/path/to/ca.pem");
client_options.tls_opts(tls_options);
auto uri = mongocxx::uri("mongodb://<hostname>:<port>/?"
"authMechanism=MONGODB-AWS&tls=true");
auto client = mongocxx::client(uri, client_options);

Si su aplicación se ejecuta en un clúster de Amazon EKS y se autentica a través de un proveedor de identidad OpenID Connect (OIDC), el driver C++ puede utilizar una solicitud AssumeRoleWithWebIdentity. Esta solicitud intercambia el token OIDC por credenciales temporales de AWS para su aplicación.

Para configurar este mecanismo:

  1. Crea o actualiza tu archivo de configuración de AWS. Para aprender a crear este archivo de configuración, consulta <a class=\" \" target=\" \" href=\" \"} Configuración global de los SDK y herramientas de AWS. <svg class=\" \" height=\" \" width=\" \" role=\" \" aria-hidden=\" \" alt=\" \" viewbox=\" \"><path d=\" \" fill=\" \"> <path d=\" \" fill=\" \">

  2. Configure las siguientes variables de entorno:

    • AWS_ROLE_ARN⚠️ warning: Establecer el ARN del rol IAM a suponer.

    • AWS_WEB_IDENTITY_TOKEN_FILE: Configurado en la ruta del archivo que contiene el token OIDC para la cuenta de servicio.

    • AWS_ROLE_SESSION_NAME (opcional): Establecido en un identificador para la asunción de la sesión de rol. Si omites esta variable, el driver genera un identificador aleatorio.

  3. Establece el parámetro authMechanism en tu URI de conexión en "MONGODB-AWS".

Selecciona la pestaña Connection URI o Client Options with TLS para ver la sintaxis correspondiente:

auto uri = mongocxx::uri("mongodb://<hostname>:<port>/?"
"authMechanism=MONGODB-AWS");
auto client = mongocxx::client(uri);
mongocxx::options::client client_options;
mongocxx::options::tls tls_options;
tls_options.ca_file("/path/to/ca.pem");
client_options.tls_opts(tls_options);
auto uri = mongocxx::uri("mongodb://<hostname>:<port>/?"
"authMechanism=MONGODB-AWS&tls=true");
auto client = mongocxx::client(uri, client_options);

Para aprender más sobre la autenticación con roles de identidad web, consulta API AssumeRoleWithWebIdentity.

Si su aplicación se ejecuta en un contenedor de Amazon ECS, el controlador C++ puede recuperar credenciales temporales de AWS desde el endpoint de metadatos de la tarea de ECS.

Para activar este comportamiento, configure la variable de entorno AWS_CONTAINER_CREDENTIALS_RELATIVE_URI al URI relativo del punto final de metadatos de tareas de ECS, como se muestra en el siguiente ejemplo:

export AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=<relative URI of the ECS task metadata endpoint>

Luego, crea el cliente con el authMechanism configurado en "MONGODB-AWS". Selecciona la pestaña Connection URI o Client Options with TLS para ver la sintaxis correspondiente:

auto uri = mongocxx::uri("mongodb://<hostname>:<port>/?"
"authMechanism=MONGODB-AWS");
auto client = mongocxx::client(uri);
mongocxx::options::client client_options;
mongocxx::options::tls tls_options;
tls_options.ca_file("/path/to/ca.pem");
client_options.tls_opts(tls_options);
auto uri = mongocxx::uri("mongodb://<hostname>:<port>/?"
"authMechanism=MONGODB-AWS&tls=true");
auto client = mongocxx::client(uri, client_options);

Si la aplicación se ejecuta en una instancia EC2 de Amazon, el controlador C++ puede recuperar credenciales temporales de AWS desde el endpoint de metadatos de la instancia EC2.

Para habilitar este comportamiento, establezca el parámetro authMechanism en su URI de conexión en "MONGODB-AWS". Seleccione la pestaña Connection URI o Client Options with TLS para ver la sintaxis correspondiente:

auto uri = mongocxx::uri("mongodb://<hostname>:<port>/?"
"authMechanism=MONGODB-AWS");
auto client = mongocxx::client(uri);
mongocxx::options::client client_options;
mongocxx::options::tls tls_options;
tls_options.ca_file("/path/to/ca.pem");
client_options.tls_opts(tls_options);
auto uri = mongocxx::uri("mongodb://<hostname>:<port>/?"
"authMechanism=MONGODB-AWS&tls=true");
auto client = mongocxx::client(uri, client_options);

Nota

Si configuras alguna de las variables de entorno de los métodos de autenticación de AWS anteriores, el driver de C++ intentará recuperar las credenciales utilizando esos métodos antes de intentar obtenerlas de una instancia EC2. Para intentar recuperar credenciales solo desde una instancia EC2, asegúrese de que las variables de entorno no estén configuradas.

Si una aplicación se ejecuta en un contenedor ECS en una instancia EC2 y se permite que el contenedor acceda a los metadatos de la instancia, el controlador intenta recuperar las credenciales de AWS desde el punto final de metadatos de instancia EC2. Si el controlador recupera las credenciales de esta manera, tu aplicación puede autenticarse como el rol de IAM asignado a la instancia EC2.

Para aprender cómo evitar que los contenedores accedan a los metadatos de instancia de EC2, consulta la documentación de AWS.

Para obtener más información sobre cómo crear un objeto mongocxx::client en el controlador de C++ o configurar TLS, consulta la siguiente documentación de la API:

Volver

X.509

En esta página