Overview
Nota
La autenticación de AWS solo está disponible en MongoDB Enterprise Edition para MongoDB 4.4 y versiones posteriores.
El mecanismo de autenticación de AWS utiliza AWS Gestión de identidad y acceso (IAM)y el Servicio de Token de Seguridad de AWS (STS) para comprobar la identidad del cliente en una implementación de MongoDB. Los siguientes pasos describen el proceso de autenticación de AWS:
El cliente utiliza las 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 se autentica como este usuario.
Nota
El cliente y el servidor usan nombres de usuario diferentes. El cliente usa el ID de la clave de acceso de AWS, pero el servidor usa el ARN del usuario o rol de IAM correspondiente al ID de la clave de acceso.
Las credenciales de AWS incluyen los siguientes componentes:
ID de clave de acceso
Clave de acceso secreta
Token de sesión opcional
La autenticación con credenciales de AWS IAM utiliza el ID de la clave de acceso y la clave de acceso secreta. La autenticación con credenciales temporales de AWS IAM utiliza los tres componentes.
Nota
El controlador nunca envía la clave de acceso secreta 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 de esta página utilizan los siguientes marcadores de posición:
<hostname>:La dirección de red de su implementación de MongoDB<aws-access-key-id>:El ID de la 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
Uso de la autenticación de AWS IAM en su aplicación
Las siguientes secciones describen cómo utilizar el mecanismo de autenticación de AWS IAM en su aplicación.
Proporcionar credenciales explícitamente
Puede proporcionar credenciales de IAM regulares (no temporales) como opciones de cliente o mediante un URI. Seleccione Connection String o la pestaña Client Options 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 de los puntos finales de metadatos de EC2 o ECS. Para recuperar credenciales automáticamente, especifique el mecanismo de autenticación de AWS, pero no especifique un nombre de usuario ni una contraseña. Seleccione 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_IDVariables de entornoAWS_SECRET_ACCESS_KEYyAWS_SESSION_TOKEN. Estas variables de entorno son reconocidas por diversas bibliotecas y herramientas relacionadas con AWS, como el SDK oficial de AWS Ruby y la CLI de AWS. También se definen al ejecutarse en un entorno de 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 de la sesión del rol asumido. Si esta variable está vacía, el controlador genera un identificador aleatorio.
El punto de conexión de metadatos de la tarea de AWS ECS. Este punto de conexión devuelve las credenciales asociadas con el rol de tarea de ECS asignado al contenedor.
El punto de conexión de metadatos de la instancia de AWS EC. Este punto de conexión devuelve las credenciales asociadas con el2 2 rol de instancia de EC asignado a la instancia.
Importante
Una fuente de credenciales debe proporcionar un conjunto completo de credenciales. Por ejemplo, si su aplicación utiliza las variables de entorno AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY, el controlador genera 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: