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 身份验证
MONGODB-AWS 身份验证机制使用 Amazon Web Services Identity and Access Management (AWS IAM) 凭证对用户进行身份验证。如果你还没有 AWS 签名库,则使用以下 npm 命令进行安装:
npm install aws4
要连接到启用了 MONGODB-AWS 身份验证的 MongoDB 实例,请指定 MONGODB-AWS 身份验证机制。
驱动程序会按顺序在以下来源中检查是否存在您的档案:
自定义凭证提供商(如果提供给
MongoClient)可通过进程.env 获取环境变量
令牌缓存中的 SSO凭证
Web 身份令牌凭证,通过
AWS_WEB_IDENTITY_TOKEN_FILE共享凭证和配置
.ini文件EC2 或 ECS 实例元数据服务。有关更多信息,请参阅适用于任务的 IAM 角色。
重要
驱动程序仅按照前面列表给出的顺序从它检测到的第一个方法中读取凭证。示例,如果您在环境变量中指定 AWS凭证,驱动程序将忽略您在 Web 身份令牌文件中指定的任何凭证。
要使用存储在可通过 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) 或其他服务进行身份验证。
要使用 OIDC 令牌进行身份验证,必须首先安装 @aws-sdk/credential-providers。您可以使用以下 npm 命令安装此依赖项:
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文档: