Docs 菜单
Docs 主页
/ / /
Node.js 驱动程序
/ /

AWS IAM 身份验证机制

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身份验证机制使用AmazonAmazon Web Services Web Services Identity and Access Management ( Amazon Web ServicesAmazon Web Services IAM) 档案对用户进行凭证验证。如果您还没有AmazonAmazon Web Services Web Services签名库 ,请使用以下npm 命令进行安装:

npm install aws4

要连接到启用了 MONGODB-AWS 身份验证的 MongoDB 实例,请指定 MONGODB-AWS 身份验证机制。

驱动程序会按顺序在以下来源中检查是否存在您的档案:

  1. 连接字符串

  2. 环境变量

  3. 网络身份令牌文件

  4. AWS ECS 端点 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI

  5. AWS EC2 端点。有关更多信息,请参阅针对任务的 IAM 角色

重要

驱动程序只会按照上述列表中的顺序,从其检测到的第一个方法读取凭证。例如,如果您在连接字符串中指定了 AWS 凭证,则驱动程序将忽略您在环境变量中指定的任何凭证。

要使用连接字符串连接到 MongoDB 实例,请在尝试连接时将您的 AWS_ACCESS_KEY_IDAWS_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);

MongoDBAmazon Web Services要使用存储在环境变量中的 档案对 实例进行身份验证,请使用shell 设置以下变量:

export AWS_ACCESS_KEY_ID=<awsKeyId>
export AWS_SECRET_ACCESS_KEY=<awsSecretKey>
export AWS_SESSION_TOKEN=<awsSessionToken>

注意

如果您不需要该角色的 AWS 会话令牌,请省略包含AWS_SESSION_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);

您可以使用从 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>

AWS 建议使用区域 AWS STS 终结点而不是全局终结点,以减少延迟、建立冗余并提高会话令牌的有效性。要设置 AWS 区域,请将 AWS_REGIONAWS_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 服务终结点参考的区域终结点部分。

警告

请查阅您的 SDK 文档以设置 AWS 区域

您无法像以上示例那样,使用环境变量为所有 SDK 设置 AWS 区域。有关配置 AWS 区域,请参阅 SDK 的具体文档。

设置上述环境变量后,在连接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 档案

从MongoDB版本 4.11 开始,当您安装可选的 aws-sdk/credential-providers 依赖项时,驾驶员会使用 AWS SDK 从环境中检索凭证。因此,如果您有共享的 AWS凭证文件或配置文件,驾驶员将默认使用这些凭证。

您可以通过执行下列操作之一来覆盖此行为:

  • 在 shell 中设置 AWS_SHARED_CREDENTIALS_FILE 变量以指向您的档案文件。

  • 在应用程序中设置等效的环境变量以指向您的凭证文件。

  • 为您的 MongoDB 档案创建 AWS 配置文件,并将 AWS_PROFILE 环境变量设置为该配置文件的名称。

要学习;了解有关本页讨论的任何方法或类型的更多信息,请参阅以下API文档:

后退

x.509

在此页面上

  • Overview
  • 指定 MONGODB-AWS 身份验证
  • API 文档