Overview
注意
MONGODB-AWS 身份验证机制可用于 MongoDB Atlas 上的 MongoDB 部署。
MONGODB-AWS身份验证机制使用Amazon Web Services Identity and Access 管理 (AWS IAM)凭证对用户进行身份验证。要学习有关配置MongoDB Atlas 的更多信息,请参阅《使用 AWS IAM 角色设置无密码身份验证》指南。
要指示驱动程序使用此身份验证机制,可以在连接字符串中指定 MONGODB-AWS 作为参数,或使用 MongoCredential.createAwsCredential() 工厂方法。
代码占位符
本页上的代码示例使用以下占位符:
awsKeyId- 您的 AWS 访问密钥 ID 的值awsSecretKey- 您的 AWS 秘密访问密钥的值atlasUri- MongoDB Atlas 部署的网络地址hostname- MongoDB Atlas 部署的主机名port— MongoDB Atlas 部署的端口awsSessionToken— AWS 会话令牌的价值
Amazon Web Services SDK
可以使用 AWS SDK for Java v1 或 v2 来指定档案。此方法具有以下功能:
获取档案的多种选项
档案缓存可帮助应用程序避免速率限制
与 Elastic Kubernetes Service 一起使用的档案提供商程序管理。
要使用 AWS SDK for Java 进行 MONGODB-AWS 身份验证,您必须执行以下操作:
指定身份验证机制
将该 SDK 作为依赖项添加到项目中
使用档案提供程序链中的一种方法提供档案
要使用 MongoCredential 指定身份验证机制,请使用 MongoCredential.createAwsCredential() 工厂方法并将 MongoCredential 实例添加到您的 MongoClient,如下所示:
val credential = MongoCredential.createAwsCredential(null, null) val settings = MongoClientSettings.builder() .applyToClusterSettings { builder: ClusterSettings.Builder -> builder.hosts( listOf(ServerAddress("<atlasUri>")) ) } .credential(credential) .build() val mongoClient = MongoClient.create(settings)
要在连接字符串中指定身份验证机制,请将其添加为参数,如下所示:
val mongoClient = MongoClient.create("mongodb://<atlasUri>?authMechanism=MONGODB-AWS")
如需将 AWS SDK 作为依赖添加到项目中,请参阅以下 AWS 文档了解所需的版本:
注意
对于 AWS SDK for Java v2,Java 驱动程序当前使用software.amazon.awssdk:auth:2.30.31 依赖项进行测试。
对于 AWS SDK for Java v1,Java 驱动程序当前使用com.amazonaws:aws-java-sdk-core:1.12.782依赖项进行测试。
要提供档案,请参阅以下 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,如下所示:
val credential = MongoCredential.createAwsCredential(null, null) val settings = MongoClientSettings.builder() .applyToClusterSettings { builder: ClusterSettings.Builder -> builder.hosts( listOf(ServerAddress("<atlasUri>")) ) } .credential(credential) .build() val mongoClient = MongoClient.create(settings)
要在连接字符串中指定身份验证机制,请将其添加为参数,如下所示:
val mongoClient = MongoClient.create("mongodb://<atlasUri>?authMechanism=MONGODB-AWS")
以下示例展示如何通过为以下类型的身份验证设置环境变量来提供凭证:
编程访问密钥
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的行。
要使用 ECS 容器档案进行身份验证,请使用 bash或类似 shell 在环境变量中设置 ECS 端点相对 URI,如以下示例所示:
export AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=<your ECS endpoint>
要使用 EC2 容器档案进行身份验证,请确保没有设置上述环境变量。驱动程序会从默认 IPv4 EC2 实例元数据端点获取档案。
在 MongoCredential 中指定您的档案
您可以使用 MongoCredential 实例向 MongoClient 提供您的 AWS IAM 档案。要构造用于 MONGODB-AWS 身份验证的 MongoCredential 实例,请使用 createAwsCredential() 工厂方法。
您只能向MongoCredential.createAwsCredential()方法提供编程访问权限密钥。 如果您需要提供 ECS 或 EC2 容器凭证,请按照在环境或Amazon Web Services SDK 中 指定档案中 的说明进行操作。
要使用 MongoCredential 进行 MONGODB-AWS 身份验证,您必须执行以下操作:
指定身份验证机制
提供档案
要使用 MongoCredential 指定身份验证机制,请使用 MongoCredential.createAwsCredential() 工厂方法并将 MongoCredential 实例添加到您的 MongoClient,如下所示:
val credential = MongoCredential.createAwsCredential("<awsKeyId>", "<awsSecretKey>".toCharArray()) val settings = MongoClientSettings.builder() .applyToClusterSettings { builder: ClusterSettings.Builder -> builder.hosts( listOf(ServerAddress("<atlasUri>")) ) } .credential(credential) .build() val mongoClient = MongoClient.create(settings)
如果需要指定 AWS 会话令牌,请将其传递给 withMechanismProperty() 方法,如以下示例所示:
val credential = MongoCredential.createAwsCredential("<awsKeyId>", "<awsSecretKey>".toCharArray()) .withMechanismProperty("AWS_SESSION_TOKEN", "<awsSessionToken>") val settings = MongoClientSettings.builder() .applyToClusterSettings { builder: ClusterSettings.Builder -> builder.hosts( listOf(ServerAddress("<atlasUri>")) ) } .credential(credential) .build() val mongoClient = MongoClient.create(settings)
要刷新您的档案,您可以声明一个返回新档案的Supplier lambda 表达式,如以下示例所示:
val awsFreshCredentialSupplier: Supplier<AwsCredential> = Supplier { // Add your code here to fetch new credentials // Return the new credentials AwsCredential("<awsKeyId>", "<awsSecretKey>", "<awsSessionToken>") } val credential = MongoCredential.createAwsCredential("<awsKeyId>", "<awsSecretKey>".toCharArray()) .withMechanismProperty(MongoCredential.AWS_CREDENTIAL_PROVIDER_KEY, awsFreshCredentialSupplier) val settings = MongoClientSettings.builder() .applyToClusterSettings { builder -> builder.hosts(listOf(ServerAddress("<hostname>", "<port>"))) } .credential(credential) .build() val mongoClient = MongoClient.create(settings)
如果必须在连接字符串中提供Amazon Web Services IAM凭证,可以通过调用applyConnectionString() 方法将其添加到 MongoClientSettings 中:
val credential = MongoCredential.createAwsCredential("<awsKeyId>", "<awsSecretKey>".toCharArray()) val connectionString = ConnectionString("mongodb://<atlasUri>/?authMechanism=MONGODB-AWS&authMechanismProperties=AWS_SESSION_TOKEN:<awsSessionToken>") val settings = MongoClientSettings.builder() .applyConnectionString(connectionString) .credential(credential) .build() val mongoClient = MongoClient.create(settings)