Overview
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 ドライバーは、AWS SDK のバージ 2.30.31 および 1.12.782 で 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認証の指定
この認証メカニズムを使用するようにドライバーに指示するには、接続stringのパラメーターとして、または MongoCredential.createAwsCredential() ファクトリー メソッドを使用して MONGODB-AWS を指定できます。
このセクションでは、この認証メカニズムを指定する方法と、Java Reactive Streams ドライバーに Amazon Web Services IAM 認証情報を提供するための様々な方法について説明します。
Java用のAmazon Web Services SDK を使用
重要
MONGODB-AWS 認証情報を提供するこの方法は、Java Reactive Streams ドライバー v4.8 以降でのみ使用できます。
認証情報を指定するには、次の機能を提供するJava用Amazon Web Services SDK の v1 または v2 を使用します。
認証情報を取得するための複数のオプション
アプリケーションがレート制限を回避するのに役立つ認証情報キャッシュ
Elastic Kubernetes Service で使用するための認証情報プロバイダー管理。
MONGODB-AWS認証にAmazon Web Services SDK for Javaを使用するには、次のアクションを実行する必要があります。
認証メカニズムを指定します。
SDK を 依存関係としてプロジェクトに追加します 。
認証情報プロバイダー チェーンのいずれかの方法を使用して認証情報を提供します。
使用して認証メカニズムを指定する 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");
Amazon Web Services SDK 依存関係の追加
Amazon Web Services SDK を依存関係としてプロジェクトに追加するには、次の Amazon Web Services ドキュメントを参照してください。
Amazon Web Services SDK for Java v1 については、使用開始ガイドを参照してください。
注意
Amazon Web Services SDK for Java v2 の場合、Java Reactive Streams ドライバーは software.amazon.awssdk:auth:2.30.31 依存関係を使用してテストされます。
Amazon Web Services SDK for Java v1 の場合、Java Reactive Streams ドライバーは com.amazonaws:aws-java-sdk-core:1.12.782 依存関係を使用してテストされます。
認証情報の提供
Java Reactive Streams ドライバーに認証情報を提供するには、次の AWS ドキュメントを参照してください。
ドライバーが認証情報を取得するために使用する AWS SDK for Java v2 クラスの詳細について学ぶには、DefaultCredentialsProvider AWS API ドキュメントを参照してください。
AWS API ドキュメントの「デフォルトの認証情報プロバイダー チェーンの使用セクションから、このクラスに認証情報を提供する方法を学びます。
ドライバーが認証情報を取得するために使用する AWS SDK for Java v1 クラスの詳細については、DefaultAWSCredentialsProviderChain AWS API ドキュメントを参照してください。
Amazon Web Services API ドキュメントの「 デフォルトの認証情報プロバイダー チェーンの使用 」セクションから、このクラスに認証情報を提供する方法について学びます。
注意
プロジェクトに Amazon Web Services SDK for Java の v1 と v2 の両方を含める場合は、v2 メソッドを使用して Java Reactive Streams ドライバーに認証情報を提供する必要があります。
環境変数を使用する
MONGODB-AWS 認証メカニズムを使用するようドライバーに指示し、環境変数を設定することで、Amazon Web Services 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(Collections.singletonList(new ServerAddress("<hostname>")))) .credential(credential) .build());
接続文字列で認証メカニズムを指定するには、次の例に示すように、それをパラメータとして追加します。
MongoClient mongoClient = MongoClients.create("mongodb://<atlasUri>?authMechanism=MONGODB-AWS");
環境変数を設定する
環境変数を設定して、次のタイプの認証を有効にすることができます。
プログラムによるアクセス キー
Web ID プロバイダー
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を含むコマンドを省略します。
Web IdP
OpenID Connect(OIDC)互換のWeb ID プロバイダーを使用して、Amazon Elastic Kubernetes Service(EKS)またはその他のサービスを認証できます。
重要
プロジェクトには、Web IdP を使用して認証するためのAmazon Web Services SDK の v1 または v2 を依存関係として含める必要があります。
Web ID プロバイダーを使用するには、OIDC トークンを含む ファイルを作成します。 次に、次の例に示すように、 bashまたは同様の shell を使用して、環境変数をこのファイルへの絶対パスに設定します。
export AWS_WEB_IDENTITY_TOKEN_FILE=<absolute path to file containing your OIDC token>
ECS コンテナの認証情報
ECSコンテナ認証情報 を使用して認証するには、次の例に示すように、 または同様のシェル を使用して環境変数に ECS エンドポイントの相対的 URI を設定します。bash
export AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=<your ECS endpoint>
EC2 コンテナの認証情報
EC2コンテナの認証情報を使用して認証するには、このセクションで述べられている環境変数が設定されていないことを確認してください。ドライバーは、環境変数からではなく、デフォルトのIPv4 EC2インスタンスのメタデータエンドポイントとなる接続されたデバイスから認証情報を取得します。
MongoCredential インスタンスの使用
Amazon Web Services IAM 認証情報を MongoCredentialインスタンスを使用して MongoClient に提供できます。 MONGODB-AWS認証用の MongoCredentialインスタンスを構築するには、createAwsCredential() ファクトリー メソッドを使用します。
MongoCredential.createAwsCredential() メソッドにはプログラムによるアクセスキーのみを提供できます。ECS または EC2 コンテナの認証情報を提供する必要がある場合は、「環境変数の使用」または「Java用のAmazon Web Services SDK の使用セクションの手順を使用します。
MONGODB-AWS認証に MongoCredential を使用するには、次のアクションを実行する必要があります。
認証メカニズムを指定する
認証情報を提供する
使用して認証メカニズムを指定する MongoCredential
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());
認証情報の更新
Amazon Web Services 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 ドキュメント
このページで説明するメソッドやタイプの詳細については、次のAPIドキュメントを参照してください。