Overview
MONGODB-AWS身份验证机制使用Amazon Web Services Identity and Access Management (Amazon Web Services IAM)凭证对MongoDB进行用户身份验证。 只有在向MongoDB Atlas进行身份验证时才能使用此机制。
提示
为Amazon Web Services IAM 身份验证配置Atlas
要学习;了解有关为Amazon Web Services IAM身份验证配置MongoDB Atlas 的更多信息,请参阅Atlas文档中的使用Amazon Web Services IAM 设置身份验证。
指定 MONGODB-AWS 身份验证
The MONGODB-AWS authentication mechanism uses your Amazon Web Services Identity and Access Management (AWS IAM) credentials to authenticate your user. If you do not already have the AWS signature library, use the following npm command to install it:
npm install aws4
要连接到启用了 MONGODB-AWS 身份验证的 MongoDB 实例,请指定 MONGODB-AWS 身份验证机制。
重要
直接在连接字符串中指定 MONGODB-AWS凭证的做法已弃用,并将在 Node.js驱动程序版本 7.0 及更高版本中删除。为避免使用已弃用的功能,请使用环境变量或其他方法提供 AWS凭证。
驱动程序会按顺序在以下来源中检查是否存在您的档案:
连接字符串
可通过进程.env 获取环境变量
网络身份令牌文件
AWS ECS 端点
AWS_CONTAINER_CREDENTIALS_RELATIVE_URIAWS EC2 终结点。有关更多信息,请参阅针对任务的 IAM 角色。
重要
驱动程序只会按照上述列表中的顺序,从其检测到的第一个方法读取凭证。例如,如果您在连接字符串中指定了 AWS 凭证,则驱动程序将忽略您在环境变量中指定的任何凭证。
重要
直接在连接字符串中指定 MONGODB-AWS凭证的做法已弃用,并将在 Node.js驱动程序版本 7.0 及更高版本中删除。为避免使用已弃用的功能,请使用环境变量或其他方法提供 AWS凭证。
要使用连接字符串连接到 MongoDB 实例,请在尝试连接时将您的 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 档案传递给驱动程序。如果您的 AWS 登录需要会话令牌,请同时包含您的 AWS_SESSION_TOKEN。
以下代码显示了使用连接字符串指定 MONGODB-AWS 身份验证机制和档案的示例:
重要
始终使用 encodeURIComponent 方法对用户名和证书文件路径进行 URI 编码,以确保对其进行正确解析。
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);
要使用存储在可通过 process.env 获取的环境变量中的 AWS 凭证对 MongoDB 实例进行身份验证,使用shell设立以下变量:
export AWS_ACCESS_KEY_ID=<awsKeyId> export AWS_SECRET_ACCESS_KEY=<awsSecretKey> export AWS_SESSION_TOKEN=<awsSessionToken>
注意
如果您不需要该角色的 AWS 会话令牌,请省略包含AWS_SESSION_TOKEN的行。
AWS 建议使用区域 AWS STS 终结点而不是全局终结点,以减少延迟、建立冗余并提高会话令牌的有效性。要设置 AWS 区域,请将 AWS_REGION 和 AWS_STS_REGIONAL_ENDPOINTS 设置为环境变量,如下所示:
export AWS_STS_REGIONAL_ENDPOINTS=regional // Enables regional endpoints export AWS_REGION=us-east-1 // Sets your AWS region
如果未设置这两个环境变量,则默认区域为 us-east-1。有关可用 AWS 区域的列表,请参阅 AWS 文档中 AWS 服务终结点参考的区域终结点部分。
设置上述环境变量后,在连接string中指定 MONGODB-AWS 身份验证机制,如以下示例所示:
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);
您可以使用从 Web 身份提供商获取的 OpenID Connect (OIDC) 令牌对 Amazon Elastic Kubernetes Service (EKS) 或其他服务进行身份验证。
To authenticate with your OIDC token you must first install @aws-sdk/credential-providers. You can install this dependency using the following npm command:
npm install @aws-sdk/credential-providers
接下来,创建一个包含 OIDC 令牌的文件。 然后使用 shell 在环境变量中设置此文件的绝对路径,如以下示例所示:
export AWS_WEB_IDENTITY_TOKEN_FILE=<absolute path to file containing your OIDC token>
设置上述环境变量后,在连接string中指定 MONGODB-AWS 身份验证机制,如以下示例所示:
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);
手动指定 AWS 凭证
当您安装可选的 aws-sdk/credential-providers 依赖项时,驱动程序会按照 AWS SDK 定义的优先级顺序检索凭证。如果您有共享的 AWS 凭证文件或配置文件,则驱动程序默认使用这些凭证。
提示
要详细学习;了解aws-sdk/credential-providers 依赖项如何检索凭证,请参阅Amazon Web Services SDK 文档。
要手动指定要检索的Amazon Web Services凭证,可以将 AWS_CREDENTIAL_PROVIDER属性设立为Amazon Web Services SDK 中定义的档案提供商。 以下示例将提供商链从Amazon Web Services SDK 传递到Amazon Web Services身份验证机制:
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() } });
要使用自定义提供商,您可以传递任何异步函数,将您的凭证返回到 AWS_CREDENTIAL_PROVIDER身份验证机制属性。以下示例展示如何将从环境变量获取凭证的自定义提供商程序函数传递给Amazon Web Services身份验证机制:
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 } } } });
自定义凭证提供商优先于任何其他形式的身份验证。
API 文档
要学习;了解有关本页讨论的任何方法或类型的更多信息,请参阅以下API文档: