Overview
La 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. Solo puede usar este mecanismo 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, consulta Configure la autenticación con AWS IAM en la documentación de Atlas.
Especificar la autenticación MONGODB-AWS
El mecanismo de autenticación MONGODB-AWS utiliza tus credenciales de Amazon Web Services Identity and Access Gestión (AWS IAM) para autenticar a tu usuario. Si aún no dispone de la librería de firmas de AWS, use el siguiente comando npm para instalarlo:
npm install aws4
Para conectarse a una instancia de MongoDB con 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 el controlador Node.js versión 7.0 y posteriores. Para evitar el uso de funcionalidades obsoletas, hay que utilizar variables de entorno u otro método para proporcionar las 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 final de AWS EC2. Para obtener más información, consulta Roles IAM para Tareas.
Importante
El controlador solo lee las credenciales del primer método que detecta en el orden indicado por la lista anterior. Por ejemplo, si se especifican las credenciales de AWS en la cadena de conexión, el controlador ignorará todas 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 el controlador Node.js versión 7.0 y posteriores. Para evitar el uso de funcionalidades obsoletas, hay que utilizar variables de entorno u otro método para proporcionar las credenciales de AWS.
Para conectarte a tu instancia de MongoDB con una cadena de conexión, pasa tus credenciales AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY al controlador cuando intentes conectarte. Si tu inicio de sesión de AWS requiere un token de sesión, también debes incluir tu 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 codifica en URI el nombre de usuario y la ruta del archivo del certificado usando el método encodeURIComponent para asegurar 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 autenticarte en tu instancia de MongoDB utilizando las credenciales de AWS almacenadas en las variables de entorno disponibles a través de process.env, establezca las siguientes variables utilizando una 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 endpoints regionales de AWS STS en lugar de endpoints globales para reducir la latencia, crear redundancia integrada y aumentar la validez del token de la sesión. Para establecer la región de AWS, configura 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 ninguna de estas variables de entorno está configurada, la región por defecto es us-east-1. Para obtener una lista de las regiones de AWS disponibles, consulta la sección puntos de enlace regionales de referencia de puntos de enlace de servicios de AWS en la documentación de AWS.
Después de establecer las variables de entorno anteriores, especificar el mecanismo de autenticación MONGODB-AWS en la 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);
Puedes utilizar el token OpenID Connect (OIDC) obtenido de un proveedor de identidad web para autenticarte en Amazon Elastic Kubernetes Service (EKS) u otros servicios.
Para autenticarte con tu token OIDC, primero debes instalar @aws-sdk/credential-providers. Puedes instalar esta dependencia utilizando el siguiente comando npm:
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 haber definido la variable de entorno anterior, especifica el mecanismo de autenticación MONGODB-AWS en tu 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
Cuando instalas la dependencia opcional aws-sdk/credential-providers, el controlador recupera las credenciales en un orden de prioridad definido por el SDK de AWS. Si tienes un archivo compartido de credenciales de AWS o un archivo de configuración, el controlador usará esas credenciales por defecto.
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 desean recuperar, puede configurar la propiedad AWS_CREDENTIAL_PROVIDER con un proveedor de credenciales definido del AWS SDK. El siguiente ejemplo pasa una cadena de proveedores del AWS SDK 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, puedes pasar cualquier función asíncrona que devuelva tus 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 obtenga 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: