AWS IAM 身份验证机制
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
身份验证机制使用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
身份验证机制。
驱动程序会按顺序在以下来源中检查是否存在您的档案:
连接字符串
环境变量
网络身份令牌文件
AWS ECS 端点
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
AWS EC2 端点。有关更多信息,请参阅针对任务的 IAM 角色。
重要
驱动程序只会按照上述列表中的顺序,从其检测到的第一个方法读取凭证。例如,如果您在连接字符串中指定了 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);
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_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 服务终结点参考的区域终结点部分。
警告
请查阅您的 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 文档
要学习;了解有关本页讨论的任何方法或类型的更多信息,请参阅以下API文档: