Docs 菜单
Docs 主页
/ / /
Java (Sync) 驱动程序
/ /

Amazon Web Services身份和访问管理

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 设置身份验证。

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

  • <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() 工厂方法。

本节介绍如何指定此身份验证机制以及提供 AWS IAM凭证的各种方法。

重要

这种提供 MONGODB-AWS凭证的方法仅在Java驾驶员v4.8 及更高版本中可用。

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

要使用适用于Java的 AWS 开发工具包进行 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(Arrays.asList(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驾驶员使用 software.amazon.awssdk:auth:2.18.9 依赖项进行测试。

对于 AWS SDK for Java v1, Java驾驶员使用 com.amazonaws:aws-java-sdk-core:1.12.337 依赖项进行测试。

要提供档案,请参阅以下 AWS 文档,了解您需要的版本:

注意

如果在您的项目中同时包含适用于 Java 的 AWS SDK v1 和 v2,则必须使用 v2 方法提供凭证。

您可以通过指示驱动程序使用 MONGODB-AWS 身份验证机制并设置适当的环境变量来提供 AWS 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(Arrays.asList(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>

如果您不需要该角色的 AWS 会话令牌,请省略包含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 容器档案进行身份验证,请使用 bash或类似 shell 在环境变量中设置 ECS 端点相对 URI,如以下示例所示:

export AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=<your ECS endpoint>

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

您可以使用 MongoCredential实例向 MongoClient 提供您的 AWS 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(Arrays.asList(new ServerAddress("<hostname>"))))
.credential(credential)
.build());

如果必须指定 AWS 会话令牌,请将其传递给 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(Arrays.asList(new ServerAddress("<hostname>"))))
.credential(credential)
.build());

要刷新您的档案,您可以声明一个返回新档案的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());

注意

如果必须在连接字符串中提供 AWS IAM凭证,请参阅 v4.7 或更早版本的Java驾驶员文档。

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

后退

x.509

在此页面上

  • Overview
  • 代码占位符
  • 指定 MONGODB-AWS 身份验证
  • 使用适用于Java的 AWS 开发工具包
  • 使用环境变量
  • 使用 MongoCredential 实例
  • API 文档