对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

Amazon Web Services身份和访问管理

MONGODB-AWS身份验证机制使用Amazon Web Services Identity and Access Management (Amazon Web Services IAM)凭证对MongoDB进行用户身份验证。 只有在向MongoDB Atlas进行身份验证时才能使用此机制。

要学习;了解有关为Amazon Web Services IAM身份验证配置MongoDB Atlas 的更多信息,请参阅Atlas文档中的使用Amazon Web Services IAM 设置身份验证。

注意

Amazon Web Services SDK 测试

Java Reactive Streams 驱动程序使用 2.30.31 和 1.12.782 版本的 Amazon Web Services SDK 测试 MONGODB-AWS

本页上的代码示例使用以下占位符:

  • <awsKeyId>:您的Amazon Web Services访问密钥ID

  • <atlasUri>: MongoDB Atlas部署的网络解决

  • <awsSecretKey>:您的Amazon Web Services秘密访问权限密钥

  • <awsSessionToken>:您的Amazon Web Services会话令牌

  • <hostname>: MongoDB Atlas部署的主机名

  • <port>: MongoDB Atlas部署的端口

要使用本页上的代码示例,请将这些占位符替换为您自己的值。

要指示驱动程序使用此身份验证机制,您可以指定 MONGODB-AWS 作为连接字符串中的参数或使用 MongoCredential.createAwsCredential() 工厂方法。

本节介绍如何指定此身份验证机制以及向 Java Reactive Streams 驱动程序提供 Amazon Web Services IAM 凭证的各种方法。

重要

这种提供 MONGODB-AWS凭证的方法仅在 Java Reactive Streams 驱动程序 v4.8 及更高版本中可用。

您可以使用适用于Java的Amazon Web Services SDK v1 或 v2 来指定凭证,该 SDK 提供以下功能:

  • 获取档案的多种选项

  • 档案缓存可帮助应用程序避免速率限制

  • Elastic Kubernetes Service 一起使用的档案提供商程序管理。

要使用适用于Java的Amazon Web Services SDK 进行MONGODB-AWS身份验证,必须执行以下操作:

  1. 指定身份验证机制。

  2. 将 SDK 作为依赖项添加到项目中。

  3. 使用凭证提供商程序链中的方法之一提供凭证。

要使用 MongoCredential 指定身份验证机制,请使用 MongoCredential.createAwsCredential() 工厂方法并将 MongoCredential 实例添加到您的 MongoClient 中,如下示例所示:

MongoCredential credential = MongoCredential.createAwsCredential(null, null);
// Creates a MongoClient that receives configuration information from a MongoCredential and environment variables
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Collections.singletonList(new ServerAddress("<hostname>"))))
.credential(credential)
.build());

要在连接字符串中指定身份验证机制,请将其添加为参数,如下示例所示:

MongoClient mongoClient = MongoClients.create("mongodb://<atlasUri>?authMechanism=MONGODB-AWS");

要将 AWS SDK 作为依赖项目添加到项目中,请参阅以下 AWS 文档:

  • 对于 AWS SDK for Java v2,请参阅设置指南。

  • 对于 AWS SDK for Java v1,请参阅入门指南。

注意

对于 AWS SDK for Java v2,Java Reactive Streams 驱动程序使用 software.amazon.awssdk:auth:2.30.31 依赖项进行测试。

对于 AWS SDK for Java v1,Java Reactive Streams 驱动程序使用 com.amazonaws:aws-java-sdk-core:1.12.782 依赖项进行测试。

要向 Java Reactive Streams 驱动程序提供凭证,请参阅以下 AWS 文档:

注意

如果在项目中包含 v1 和 v2 的 Amazon Web Services SDK for Java,则必须使用 v2 方法向 Java Reactive Streams 驱动程序提供凭证。

您可以指示驱动程序使用 MONGODB-AWS 身份验证机制并设置环境变量来提供 Amazon Web Services IAM 凭证。

要使用环境变量提供凭证,您必须执行以下操作:

  1. 指定身份验证机制

  2. 添加环境变量

您可以使用 MongoCredential 或在连接字符串中指定身份验证机制。

要使用 MongoCredential 指定身份验证机制,请使用 MongoCredential.createAwsCredential() 工厂方法并将 MongoCredential 实例添加到您的 MongoClient 中,如下示例所示:

MongoCredential credential = MongoCredential.createAwsCredential(null, null);
// Creates a MongoClient that receives configuration information from a MongoCredential and environment variables
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Collections.singletonList(new ServerAddress("<hostname>"))))
.credential(credential)
.build());

要在连接字符串中指定身份验证机制,请将其添加为参数,如下示例所示:

MongoClient mongoClient = MongoClients.create("mongodb://<atlasUri>?authMechanism=MONGODB-AWS");

您可以设置环境变量以启用以下类型的身份验证:

  • 编程访问密钥

  • Web 身份提供程序

  • ECS 容器档案

  • EC2 容器档案

以下示例显示如何使用 bash 或类似的 shell 在环境变量中设置编程访问密钥:

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

如果您不需要该角色的 Amazon Web Services 会话令牌,请省略包含 AWS_SESSION_TOKEN 的命令。

您可以使用与 OpenID Connect (OIDC) 兼容的 Web 身份提供者 对 Amazon Elastic Kubernetes Service (EKS) 或其他服务进行身份验证。

重要

您的项目必须包含 AWS 开发工具包 v1 或 v2 作为依赖项,才能使用 Web 身份提供商进行身份验证。

要使用 Web 身份提供程序,请创建一个包含 OIDC 令牌的文件。接下来,使用 bash 或类似的 Shell 将环境变量设置为该文件的绝对路径,如以下示例所示:

export AWS_WEB_IDENTITY_TOKEN_FILE=<absolute path to file containing your OIDC token>

要使用 ECS容器凭证进行身份验证,请使用 或类似的Shell在环境变量中设立ECS 端点相对bash URI,如以下示例所示:

export AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=<your ECS endpoint>

要使用 EC2 容器凭证进行身份验证,请确保未设置本节中提到的任何环境变量。驱动程序从默认 IPv4 EC2 实例元数据终结点获取凭证,而不是从环境变量获取。

您可以使用 MongoCredential实例向 MongoClient 提供您的Amazon Web Services IAM凭证。 要构造用于 MONGODB-AWS身份验证的 MongoCredential实例,请使用 createAwsCredential() 工厂方法。

您只能向 MongoCredential.createAwsCredential() 方法提供编程访问密钥。如果您需要提供 ECS 或 EC2 容器凭证,请使用使用环境变量使用适用于 Java 的 AWS SDK部分中的说明。

要使用 MongoCredential 进行 MONGODB-AWS身份验证,您必须执行以下操作:

  1. 指定身份验证机制

  2. 提供档案

要使用 MongoCredential 指定身份验证机制,请使用 MongoCredential.createAwsCredential() 工厂方法并将 MongoCredential 实例添加到您的 MongoClient 中,如下示例所示:

MongoCredential credential = MongoCredential.createAwsCredential("<awsKeyId>", "<awsSecretKey>".toCharArray());
// Creates a MongoClient that receives AWS credentials from the MongoCredential instance
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Collections.singletonList(new ServerAddress("<hostname>"))))
.credential(credential)
.build());

如果需要指定 Amazon Web Services 会话令牌,请将其传递给 withMechanismProperty() 方法,如以下示例所示:

MongoCredential credential = MongoCredential.createAwsCredential("<awsKeyId>", "<awsSecretKey>".toCharArray())
.withMechanismProperty("AWS_SESSION_TOKEN", "<awsSessionToken>");
// Creates a MongoClient that receives configuration information from a MongoCredential instance
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Collections.singletonList(new ServerAddress("<hostname>"))))
.credential(credential)
.build());

要刷新 AWS IAM 凭证,请声明一个返回新凭证的 Supplier Lambda 表达式,如以下示例所示:

Supplier<AwsCredential> awsFreshCredentialSupplier = () -> {
// Add your code to fetch new credentials
return new AwsCredential("<awsKeyId>", "<awsSecretKey>", "<awsSessionToken>");
};
// Creates a MongoCredential instance to specify the new AWS credentials
MongoCredential credential = MongoCredential.createAwsCredential(null, null)
.withMechanismProperty(MongoCredential.AWS_CREDENTIAL_PROVIDER_KEY, awsFreshCredentialSupplier);
// Creates a MongoClient that receives new configuration information from a MongoCredential instance
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Collections.singletonList(new ServerAddress("<hostname>", <port>))))
.credential(credential)
.build());

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