Overview
El MONGODB-AWS El mecanismo de autenticación utiliza credenciales de Amazon Web Services Identity and Access Management (AWS IAM) 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.
Especificar la autenticación de MONGODB-AWS
El MONGODB-AWS mecanismo de autenticación utiliza sus credenciales de Amazon Web Services Identity and Access Management (AWS IAM) para autenticar a su usuario. Si aún no tiene la biblioteca de firmas de AWS, use el siguiente npm comando para instalarla:
npm install aws4
Para conectarse a una instancia de MongoDB con la autenticación MONGODB-AWS habilitada, especifique el mecanismo de autenticación MONGODB-AWS.
Importante
Especificar las credenciales MONGODB-AWS directamente en la cadena de conexión está obsoleto y se eliminará en la versión 7.0 del controlador Node.js y posteriores. Para evitar usar esta funcionalidad obsoleta, utilice variables de entorno u otro método para proporcionar sus credenciales de AWS.
El controlador verifica tus credenciales en las siguientes fuentes en este orden:
Cadena de conexión
Variables de entorno disponibles a través de process.env
Archivo de token de identidad web
Punto final de AWS ECS especificado en
AWS_CONTAINER_CREDENTIALS_RELATIVE_URIPunto de conexión de AWS EC. Para2 obtener más información, consulte Roles de IAM para tareas.
Importante
El controlador solo lee las credenciales del primer método que detecta en el orden indicado en la lista anterior. Por ejemplo, si especifica sus credenciales de AWS en la cadena de conexión, el controlador ignora las credenciales especificadas en las variables de entorno.
Importante
Especificar las credenciales MONGODB-AWS directamente en la cadena de conexión está obsoleto y se eliminará en la versión 7.0 del controlador Node.js y posteriores. Para evitar usar esta funcionalidad obsoleta, utilice variables de entorno u otro método para proporcionar sus credenciales de AWS.
Para conectarse a su instancia de MongoDB con una cadena de conexión, pase sus credenciales AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY al controlador al intentar conectarse. Si su inicio de sesión de AWS requiere un token de sesión, incluya también sus credenciales AWS_SESSION_TOKEN.
El siguiente código muestra un ejemplo de cómo especificar el mecanismo de autenticación MONGODB-AWS y las credenciales con una cadena de conexión:
Importante
Siempre codifique en URI el nombre de usuario y la ruta del archivo del certificado utilizando el encodeURIComponent método para garantizar que se analicen correctamente.
const { MongoClient } = require("mongodb"); // Replace the following with values for your environment. const accessKeyId = encodeURIComponent("<AWS_ACCESS_KEY_ID>"); const secretAccessKey = encodeURIComponent("<AWS_SECRET_ACCESS_KEY>"); const clusterUrl = "<cluster_url>"; const authMechanism = "MONGODB-AWS"; let uri = `mongodb+srv://${accessKeyId}:${secretAccessKey}@${clusterUrl}/?authSource=%24external&authMechanism=${authMechanism}`; // Uncomment the following lines if your AWS authentication setup requires a session token. // const sessionToken = encodeURIComponent("<AWS_SESSION_TOKEN>"); // uri = uri.concat(`&authMechanismProperties=AWS_SESSION_TOKEN:${sessionToken}`); // Create a new MongoClient. const client = new MongoClient(uri); async function run() { try { // Establish and verify connection. await client.db("admin").command({ ping: 1 }); console.log("Connected successfully to server."); } finally { // Ensure that the client closes when it finishes/errors. await client.close(); } } run().catch(console.dir);
Para autenticarse en su instancia de MongoDB utilizando las credenciales de AWS almacenadas en las variables de entorno disponibles a través de process.env, configure las siguientes variables mediante un shell:
export AWS_ACCESS_KEY_ID=<awsKeyId> export AWS_SECRET_ACCESS_KEY=<awsSecretKey> export AWS_SESSION_TOKEN=<awsSessionToken>
Nota
Omita la línea que contiene AWS_SESSION_TOKEN si no necesita un token de sesión de AWS para esa función.
AWS recomienda usar puntos de conexión regionales de AWS STS en lugar de puntos de conexión globales para reducir la latencia, integrar redundancia y aumentar la validez del token de sesión. Para configurar la región de AWS, configure AWS_REGION y AWS_STS_REGIONAL_ENDPOINTS como variables de entorno, como se muestra en el siguiente ejemplo:
export AWS_STS_REGIONAL_ENDPOINTS=regional // Enables regional endpoints export AWS_REGION=us-east-1 // Sets your AWS region
Si no se configuran estas dos variables de entorno, la región predeterminada us-east-1 es. Para obtener una lista de las regiones de AWS disponibles, consulte la sección "Puntos de conexión regionales" de la referencia de puntos de conexión de servicio de AWS en la documentación de AWS.
Después de configurar las variables de entorno anteriores, especifique el mecanismo de autenticación MONGODB-AWS en su cadena de conexión como se muestra en el siguiente ejemplo:
const { MongoClient } = require("mongodb"); // Remember to specify your AWS credentials in environment variables. const clusterUrl = "<cluster_url>"; const authMechanism = "MONGODB-AWS"; let uri = `mongodb+srv://${clusterUrl}/?authSource=%24external&authMechanism=${authMechanism}`; // Create a new MongoClient. const client = new MongoClient(uri); async function run() { try { // Establish and verify connection. await client.db("admin").command({ ping: 1 }); console.log("Connected successfully to server."); } finally { // Ensure that the client closes when it finishes/errors. await client.close(); } } run().catch(console.dir);
Puede utilizar el token OpenID Connect (OIDC) obtenido de un proveedor de identidad web para autenticarse en Amazon Elastic Kubernetes Service (EKS) u otros servicios.
Para autenticarse con su token OIDC, primero debe instalar @aws-sdk/credential-providers. Puede instalar esta dependencia con el siguiente npm comando:
npm install @aws-sdk/credential-providers
A continuación, cree un archivo que contenga su token OIDC. A continuación, establezca la ruta absoluta de este archivo en una variable de entorno mediante un shell, como se muestra en el siguiente ejemplo:
export AWS_WEB_IDENTITY_TOKEN_FILE=<absolute path to file containing your OIDC token>
Después de configurar la variable de entorno anterior, especifique el mecanismo de autenticación MONGODB-AWS en su cadena de conexión como se muestra en el siguiente ejemplo:
const { MongoClient } = require("mongodb"); // Remember to specify your AWS credentials in environment variables. const clusterUrl = "<cluster_url>"; const authMechanism = "MONGODB-AWS"; let uri = `mongodb+srv://${clusterUrl}/?authSource=%24external&authMechanism=${authMechanism}`; // Create a new MongoClient. const client = new MongoClient(uri); async function run() { try { // Establish and verify connection. await client.db("admin").command({ ping: 1 }); console.log("Connected successfully to server."); } finally { // Ensure that the client closes when it finishes/errors. await client.close(); } } run().catch(console.dir);
Especificar manualmente las credenciales de AWS
Al instalar la dependencia opcional aws-sdk/credential-providers, el controlador recupera las credenciales según el orden de prioridad definido por el SDK de AWS. Si tiene un archivo de credenciales o un archivo de configuración de AWS compartido, el controlador las usa de forma predeterminada.
Tip
Para más información sobre cómo la dependencia aws-sdk/credential-providers recupera credenciales, consulta la documentación de AWS SDK.
Para especificar manualmente las credenciales de AWS que se recuperarán, puede establecer la propiedad AWS_CREDENTIAL_PROVIDER en un proveedor de credenciales definido desde el SDK de AWS. El siguiente ejemplo transfiere una cadena de proveedores desde el SDK de AWS al mecanismo de autenticación de AWS:
const { MongoClient } = require('mongodb'); const { fromNodeProviderChain } = require('@aws-sdk/credential-providers'); const client = new MongoClient('<cluster_url>?authMechanism=MONGODB-AWS', { authMechanismProperties: { AWS_CREDENTIAL_PROVIDER: fromNodeProviderChain() } });
Para usar un proveedor personalizado, puede pasar cualquier función asíncrona que devuelva sus credenciales a la propiedad del mecanismo de autenticación AWS_CREDENTIAL_PROVIDER. El siguiente ejemplo muestra cómo pasar una función de proveedor personalizada que obtiene credenciales de las variables de entorno al mecanismo de autenticación de AWS:
const { MongoClient } = require('mongodb'); const client = new MongoClient('<cluster_url>?authMechanism=MONGODB-AWS', { authMechanismProperties: { AWS_CREDENTIAL_PROVIDER: async () => { return { accessKeyId: process.env.ACCESS_KEY_ID, secretAccessKey: process.env.SECRET_ACCESS_KEY } } } });
Un proveedor de credenciales personalizado tiene prioridad sobre cualquier otra forma de autenticación.
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: