Amazon Web Services身份和访问管理
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 设置身份验证。
代码占位符
本页上的代码示例使用以下占位符:
<awsKeyId>
:您的Amazon Web Services访问密钥ID<atlasUri>
: MongoDB Atlas部署的网络解决<awsSecretKey>
:您的Amazon Web Services秘密访问权限密钥<awsSessionToken>
:您的Amazon Web Services会话令牌<hostname>
: MongoDB Atlas部署的主机名<port>
: MongoDB Atlas部署的端口
要使用本页上的代码示例,请将这些占位符替换为您自己的值。
指定 MONGODB-AWS 身份验证
要指示驱动程序使用此身份验证机制,您可以指定 MONGODB-AWS
作为连接字符串中的参数或使用 MongoCredential.createAwsCredential()
工厂方法。
本节介绍如何指定此身份验证机制以及提供 AWS IAM凭证的各种方法。
使用适用于Java的 AWS 开发工具包
重要
这种提供 MONGODB-AWS
凭证的方法仅在Java驾驶员v4.8 及更高版本中可用。
您可以使用适用于Java的 AWS SDK v1 或 v2 来指定凭证,它提供以下功能:
获取档案的多种选项
档案缓存可帮助应用程序避免速率限制
与 Elastic Kubernetes Service 一起使用的档案提供商程序管理。
要使用适用于Java的 AWS 开发工具包进行 MONGODB-AWS
身份验证,您必须执行以下操作:
指定身份验证机制
将该 SDK 作为依赖项添加到项目中
使用凭证提供提供商链中的方法之一提供凭证
要使用 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, Java驾驶员使用 software.amazon.awssdk:auth:2.18.9
依赖项进行测试。
对于 AWS SDK for Java v1, Java驾驶员使用 com.amazonaws:aws-java-sdk-core:1.12.337
依赖项进行测试。
要提供档案,请参阅以下 AWS 文档,了解您需要的版本:
要进一步了解驱动程序用于获取凭证的 AWS SDK for Java v2 类,请参阅 DefaultCredentialsProvider API 文档。
从使用默认凭证提供者链部分了解如何向该课程提供凭证。
如需进一步了解驱动程序用于获取凭证的 AWS SDK for Java v1 类,请参阅 DefaultAWSCredentialsProviderChain API 文档。
从使用默认凭证提供者链部分了解如何向该课程提供凭证。
注意
如果在您的项目中同时包含适用于 Java 的 AWS SDK v1 和 v2,则必须使用 v2 方法提供凭证。
使用环境变量
您可以通过指示驱动程序使用 MONGODB-AWS
身份验证机制并设置适当的环境变量来提供 AWS IAM 档案。
要使用环境变量提供凭证,您必须执行以下操作:
指定身份验证机制
添加适当的环境变量
您可以使用 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 实例
您可以使用 MongoCredential
实例向 MongoClient
提供您的 AWS IAM凭证。要构造用于 MONGODB-AWS
身份验证的 MongoCredential
实例,请使用 createAwsCredential()
工厂方法。
您只能为 MongoCredential.createAwsCredential()
方法提供编程访问权限密钥。如果必须提供 ECS 或 EC2容器凭证,请按照“使用环境变量”或“使用适用于Java的 AWS SDK”部分中的说明进行操作。
要使用 MongoCredential
进行 MONGODB-AWS
身份验证,您必须执行以下操作:
指定身份验证机制
提供档案
要使用 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 文档
要学习;了解有关本页讨论的任何方法或类型的更多信息,请参阅以下API文档: