Overview
Nota
La autenticación de AWS solo está disponible en la MongoDB Enterprise Edition para MongoDB 4.4 y posteriores.
El mecanismo de autenticación de AWS utiliza AWS Gestión de Identidad y Acceso (IAM) y AWS Security Token Service (STS) para demostrar la identidad del cliente ante una implementación de MongoDB. Los siguientes pasos describen el proceso de autenticación de AWS:
El cliente utiliza credenciales de AWS IAM para crear una firma que se envía a la implementación de MongoDB.
La implementación utiliza la firma del cliente para enviar una solicitud a AWS STS.
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.
La implementación utiliza el ARN devuelto para buscar al usuario. El cliente está autenticado como este usuario.
Nota
El cliente y el servidor usan nombres de usuario diferentes. El cliente utiliza el ID de clave de acceso a AWS, pero el servidor utiliza el ARN del usuario o rol de IAM que corresponde al ID de la clave de acceso.
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 de AWS IAM utiliza el ID de clave de acceso y la clave de acceso secreta. La autenticación con credenciales temporales de AWS IAM utiliza los tres componentes.
Nota
El driver nunca envía la clave secreta de acceso ni el token de sesión a través de la red.
Las credenciales temporales se utilizan con:
Solicitudes de asumir roles de STS.
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 tu implementación de MongoDB<aws-access-key-id>ID de clave de acceso de AWS<aws_secret_access_key>: La clave de acceso secreta de AWS<aws_session_token>:El token de sesión de AWS
Usar la autenticación de AWS IAM en tu aplicación
Las siguientes secciones describen cómo utilizar el mecanismo de autenticación AWS IAM en su aplicación.
Proporcionar credenciales explícitamente
Puede facilitar credenciales regulares (no temporales) de IAM como opciones de cliente o mediante un URI. Elija el Connection String o Client Options pestaña para ver la sintaxis correspondiente:
client = Mongo::Client.new( 'mongodb://<aws_access_key_id>:<aws_secret_access_key>@host/?authMechanism=MONGODB-AWS')
client = Mongo::Client.new(['<host>'], auth_mech: :aws, user: '<aws_access_key_id>', password: '<aws_secret_access_key>')
Nota
Si proporciona credenciales en una URI, debe codificarlas con un porcentaje.
Proporcionar credenciales temporales
Para proporcionar credenciales temporales, especifique el token de sesión en las opciones del cliente o mediante una URI. Seleccione la pestaña Connection String o Client Options para ver la sintaxis correspondiente:
client = Mongo::Client.new( 'mongodb://<aws_access_key_id>:<aws_secret_access_key>@host/?authMechanism=MONGODB-AWS&authMechanismProperties=AWS_SESSION_TOKEN:<<aws_session_token>>')
client = Mongo::Client.new(['<host>'], auth_mech: :aws, user: '<aws_access_key_id>', password: '<aws_secret_access_key>', auth_mech_properties: { aws_session_token: '<<aws_session_token>>', })
Recuperación automática de credenciales
El cliente puede recuperar credenciales del entorno o desde los endpoints de metadatos EC2 o ECS. Para recuperar credenciales automáticamente, especifique el mecanismo de autenticación de AWS, pero no indique un nombre de usuario ni una contraseña. Selecciona la pestaña Connection String o Client Options para ver la sintaxis correspondiente:
client = Mongo::Client.new( 'mongodb://host/?authMechanism=MONGODB-AWS')
client = Mongo::Client.new(['<hostname>'], auth_mech: :aws) )
El controlador intenta obtener credenciales de las siguientes fuentes, en el orden especificado:
AWS_ACCESS_KEY_IDy tenga en cuenta los parámetros de entornoAWS_SECRET_ACCESS_KEYyAWS_SESSION_TOKEN. Estas variables de entorno son reconocidas por una variedad de librerías y herramientas relacionadas con AWS, como el SDK oficial de AWS para Ruby y la AWS CLI. También se definen cuando se ejecutan en un entorno AWS Lambda.Acción AssumeRoleWithWebIdentity de AWS STS. Este mecanismo devuelve las credenciales asociadas al token de la cuenta de servicio y requiere que se configuren las siguientes variables de entorno:
AWS_WEB_IDENTITY_TOKEN_FILE: Ruta a un archivo que contiene el token de cuenta de servicio.AWS_ROLE_ARN:El nombre de recurso de Amazon (ARN) del rol que asume el llamador.AWS_ROLE_SESSION_NAME(opcional): Identificador para la sesión del rol asumido. Si esta variable está vacía, el controlador genera un identificador aleatorio.
El endpoint de metadatos de tareas de ECS de AWS. Este endpoint devuelve las credenciales asociadas con el rol de tarea ECS asignado al contenedor.
El endpoint de metadatos de instancia EC2 de AWS. Este endpoint devuelve las credenciales asociadas con el rol de instancia EC2 asignado a la instancia.
Importante
Una fuente de credenciales debe proporcionar un conjunto completo de credenciales. Por ejemplo, si tu aplicación utiliza las variables de entorno AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY, el controlador generará un error si solo una de estas variables tiene un valor.
Nota
Si una aplicación se ejecuta en un contenedor ECS en una instancia EC2 y el contenedor tiene acceso a los metadatos de la instancia, el controlador intenta recuperar las credenciales de AWS desde el punto de conexión de metadatos de la instancia EC2. Si el controlador recupera las credenciales de esta manera, la aplicación puede autenticarse con el rol de IAM asignado a la instancia EC2.
Para saber cómo evitar que los contenedores accedan a los metadatos de la2 instancia EC, consulte la documentación de AWS.
Documentación de la API
Para obtener más información sobre cualquiera de los métodos o tipos analizados en esta página, consulte la siguiente documentación de API: