認証メカニズム
Overview
このガイドでは、MongoDB Community Edition で利用可能な各認証メカニズムを使用して MongoDB で 認証 する方法を説明します。 認証メカニズムは、ドライバーと MongoDB 配置が ID を確認し、信頼を確立してセキュリティを確保するプロセスです。
MongoDB Community Edition の最新バージョンで使用できるメカニズムは次のとおりです。
Kerberos
またはLDAP
を使用して認証するには、 エンタープライズ認証メカニズムのガイドを参照してください。 MongoDB クラスターへの接続を確立する方法の詳細については、接続ガイド をお読みください。
認証メカニズムを指定する
次のいずれかを使用して MongoDB に接続するときに、認証メカニズムと認証情報を指定できます。
接続string
MongoCredential
ファクトリー メソッド
接続string (接続 URIとも呼ばれます)は、 MongoDBクラスターへの接続と認証の方法を指定します。
接続文字列 を使用して認証するには、接続string stringに設定を含め、それを MongoClients.create()
メソッドに渡して MongoClient
をインスタンス化します。 Connection String接続string を使用して認証する構文を確認するには、{2 タブを選択します。
あるいは、 MongoCredential
クラスを使用して認証の詳細を指定することもできます。 MongoCredential
クラスには、認証メカニズムと認証情報を含む インスタンスを構築する静的ファクトリー メソッドが含まれています。 MongoCredential
ヘルパー クラスを使用する場合は、 MongoClient
の構築時に接続設定を構成するためにMongoClientSettings.Builder
クラスを使用する必要があります。 MongoCredential
を使用して認証する構文を表示するには、 MongoCredentialタブを選択します。
これらのクラスとメソッドの詳細については、次の API ドキュメントを参照してください。
メカニズム
default
デフォルトの認証メカニズム設定では、MongoDB Server のバージョンがサポートするものに応じて、次のいずれかの認証メカニズムが使用されます。
SCRAM-SHA-256
SCRAM-SHA-1
MONGODB-CR
サーバー バージョン 3.6 以前では、デフォルト メカニズムとしてMONGODB-CR
が使用されています。 MongoDB Server の新しいバージョンでは、サポートを広告するメカニズムの 1 つが使用されます。
次のコード スニペットは、次のプレースホルダーを使用して認証メカニズムを指定する方法を示しています。
username
: MongoDB のユーザー名password
: MongoDB ユーザーのパスワードhostname
: クライアントがアクセスできる MongoDB 配置のネットワーク アドレスport
: MongoDB 配置のポート番号authenticationDb
: ユーザーの認証データが含まれる MongoDB database
注意
authenticationDb
パラメータを省略すると、ドライバーはデフォルトのadmin
データベースを使用します。
この認証メカニズムを指定するための手順とサンプル コードについては、以下の [ ] タブまたは [Connection String ] タブを選択してください。MongoCredential
接続stringを使用してデフォルトの認証メカニズムを指定するには、 メカニズムを省略します。 MongoClient
をインスタンス化するコードは次のようになります。
MongoClient mongoClient = MongoClients.create("mongodb://<db_username>:<db_password>@<hostname>:<port>/?authSource=<authenticationDb>");
MongoCredential
クラスを使用してデフォルトの認証メカニズムを指定するには、 createCredential()
メソッドを使用します。 MongoClient
をインスタンス化するコードは次のようになります。
MongoCredential credential = MongoCredential.createCredential("<db_username>", "<authenticationDb>", "<db_password>"); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());
がサポートするチャレンジ レスポンス (CR) および Salted Challenge Response 認証メカニズム (SCRAM )MongoDB SCRAMの詳細については、MongoDB Server マニュアルの「 」セクションを参照してください。
SCRAM-SHA-256
注意
SCRAM-SHA-256
は、MongoDB 4.0 以降の MongoDB のデフォルトの認証方法です。
SCRAM-SHA-256
は、 SHA-256
アルゴリズムで暗号化されたユーザー名とパスワードを使用してユーザーを認証する、Salted Challenge Response 認証メカニズム(SCRAM)です。
次のコード スニペットは、次のプレースホルダーを使用して認証メカニズムを指定する方法を示しています。
username
: MongoDB のユーザー名password
: MongoDB ユーザーのパスワードhostname
: クライアントがアクセスできる MongoDB 配置のネットワーク アドレスport
: MongoDB 配置のポート番号authenticationDb
: ユーザーの認証データが含まれる MongoDB database
注意
authenticationDb
パラメータを省略すると、ドライバーはデフォルトのadmin
データベースを使用します。
この認証メカニズムを指定するための手順とサンプル コードについては、以下の [ ] タブまたは [Connection String ] タブを選択してください。MongoCredential
接続文字列 を使用して SCRAM-SHA-256
認証メカニズムを指定するには、 接続stringで、authMechanism
パラメータに値 SCRAM-SHA-256
を割り当てstring 。 MongoClient
をインスタンス化するコードは次のようになります。
MongoClient mongoClient = MongoClients.create("mongodb://<db_username>:<db_password>@<hostname>:<port>/?authSource=<authenticationDb>&authMechanism=SCRAM-SHA-256");
MongoCredential
クラスを使用してデフォルトの認証メカニズムを指定するには、 createScrimSha256 Credential() を使用します 使用して複数のドキュメントを挿入できます。MongoClient
をインスタンス化するコードは次のようになります。
MongoCredential credential = MongoCredential.createScramSha256Credential("<db_username>", "<authenticationDb>", "<db_password>"); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());
SCRAM-SHA-1
注意
SCRAM-SHA-1
は、MongoDB バージョン 3.0、3.2、3.4、および 3.6 のデフォルトの認証方法です。
SCRAM-SHA-1
は、 SHA-1
アルゴリズムで暗号化されたユーザー名とパスワードを使用してユーザーを認証する、Salted Challenge Response Authentication Mechanism(SCRAM)です。
次のコード スニペットは、次のプレースホルダーを使用して認証メカニズムを指定する方法を示しています。
username
: MongoDB のユーザー名password
: MongoDB ユーザーのパスワードhostname
: クライアントがアクセスできる MongoDB 配置のネットワーク アドレスport
: MongoDB 配置のポート番号authenticationDb
: ユーザーの認証データが含まれる MongoDB database
注意
authenticationDb
パラメータを省略すると、ドライバーはデフォルトのadmin
データベースを使用します。
この認証メカニズムを指定するための手順とサンプル コードについては、以下の [ ] タブまたは [Connection String ] タブを選択してください。MongoCredential
接続文字列 を使用して SCRAM-SHA-1
認証メカニズムを指定するには、 接続stringで、authMechanism
パラメータに値 SCRAM-SHA-1
を割り当てstring 。 MongoClient
をインスタンス化するコードは次のようになります。
MongoClient mongoClient = MongoClients.create("mongodb://<db_username>:<db_password>@<hostname>:<port>/?authSource=<authenticationDb>&authMechanism=SCRAM-SHA-1");
MongoCredential
クラスを使用してデフォルトの認証メカニズムを指定するには、 createScrimSha1 Credential() を使用します 使用して複数のドキュメントを挿入できます。MongoClient
をインスタンス化するコードは次のようになります。
MongoCredential credential = MongoCredential.createScramSha1Credential("<db_username>", "<authenticationDb>", "<db_password>"); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());
MONGODB-CR
MONGODB-CR
ユーザー名とパスワードを使用してユーザーを認証するチャレンジレスポンスタイプの認証メカニズムです。 この認証メカニズムは MongoDB 3.6 以降、非推奨となり、MongoDB 4.0 ではサポートされなくなりました。
このメソッドを明示的に指定することはできません。 MONGODB-CR
を使用して接続するには、デフォルトの認証メカニズムが提供するフォールバックを参照してください。
MONGODB-AWS
注意
MONGODB-AWS 認証メカニズムは、MongoDB Atlas 上の MongoDB 配置で利用できます。
MONGODB-AWS
認証メカニズムは、 Amazon Web Services Identity and Access Management( Amazon Web Services IAM)認証情報を使用してユーザーを認証します。 MongoDB Atlasの設定の詳細については、「 Amazon Web Services IAM ロールを使用したパスワードレス認証の設定 」ガイドを参照してください。
この認証メカニズムを使用するようにドライバーに指示するには、接続stringのパラメーターとして、または MongoCredential.createAwsCredential()
ファクトリー メソッドを使用して MONGODB-AWS
を指定できます。
この認証メカニズムを指定する方法と、 Amazon Web Services IAM 認証情報を提供するためのさまざまな方法については、次のセクションを参照してください。
これらのセクションには、次のプレースホルダーを使用するコード例が含まれています。
awsKeyId
: Amazon Web ServicesアクセスキーIDの値awsSecretKey
: Amazon Web Servicesシークレット アクセス キーの値atlasUri
: MongoDB Atlas 配置のネットワークアドレスhostname
: MongoDB Atlas 配置のホスト名port
: MongoDB Atlas 配置のポートawsSessionToken
: Amazon Web Servicesセッション トークンの値
Amazon Web Services SDK for Java
バージョン 4.8 の新機能。
認証情報を指定するには、 v1 または v2 用のAmazon Web Services SDK のいずれかを使用できます。Javaこのメソッドは、次の機能を提供します。
認証情報を取得するための複数のオプション
アプリケーションがレート制限を回避するのに役立つ認証情報キャッシュ
MONGODB-AWS
認証にAmazon Web Services SDK for Javaを使用するには、次の手順を実行する必要があります。
認証メカニズムを指定する
SDK を依存関係としてプロジェクトに追加する
認証情報プロバイダー チェーンのいずれかの方法を使用して認証情報を提供する
重要
MONGODB-AWS
認証情報を提供するこの方法は、MongoDB Java ドライバー v4.8 以降でのみ使用できます。
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());
接続stringで認証メカニズムを指定するには、次の例に示すように、それをパラメーターとして追加します。
MongoClient mongoClient = MongoClients.create("mongodb://<atlasUri>?authMechanism=MONGODB-AWS");
Amazon Web Services SDK を依存関係としてプロジェクトに追加するには、必要なバージョンの次のAmazon Web Servicesドキュメントを参照してください。
Amazon Web ServicesSDK forJava v2 については、 設定 を参照してください ガイドを参照してください。
Amazon Web ServicesSDK forJava v1 については、 はじめ に を参照してください。 ガイドを参照してください。
注意
Amazon Web Services SDK for Java v2 の場合、 Javaドライバーは現在、software.amazon.awssdk:auth:2.18.9
依存関係を使用してテストしています。
Amazon Web Services SDK for Java v1 の場合、 Javaドライバーは現在、com.amazonaws:aws-java-sdk-core:1.12.337
依存関係を使用してテストしています。
認証情報を提供するには、必要なバージョンの次のAmazon Web Servicesドキュメントを参照してください。
ドライバーが認証情報を取得するために使用するAmazon Web Services Javav2 クラスの SDK の 詳細については、 DefaultCredentialsProvider を参照してくださいAPI ドキュメント。
デフォルトの認証情報プロバイダー チェーンを使用して 、このクラスに認証情報を提供する方法について学びます。 セクションを参照してください。
ドライバーが認証情報を取得するために使用するAmazon Web Services Javav1 クラスの SDK の 詳細については、 DefaultAWSCredentialsProviderCheck を参照してくださいAPI ドキュメント。
デフォルトの認証情報プロバイダー チェーンを使用して、 このクラスに認証情報を提供する方法について学びます。 セクションを参照してください。
注意
プロジェクトにAmazon Web Services SDK for Javaの v1 と v2 の両方を含める場合は、認証情報を提供するために v2 メソッドを使用する必要があります。
環境で認証情報を指定する
MONGODB-AWS
認証メカニズムを使用するようにドライバーに指示し、適切な環境変数を設定することで、 Amazon Web Services IAM 認証情報を提供できます。
環境変数を使用して認証情報を提供するには、次の操作を実行する必要があります。
認証メカニズムを指定する
適切な環境変数を追加する
認証メカニズムを指定するには、 接続stringで 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());
接続stringで認証メカニズムを指定するには、次の例に示すように、それをパラメーターとして追加します。
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
を含む行を省略します。
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 コンテナ認証情報を使用して認証するには、次の例に示すように、 bash
または同様の shell を使用して、環境変数に ECS エンドポイントの相対的 URI を設定します。
export AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=<your ECS endpoint>
EC2 コンテナの認証情報を使用して認証するには、このセクションで述べられた環境変数が設定されていないことを確認してください。 ドライバーは、環境変数ではなく、デフォルトの IPv4 EC2 インスタンスのメタデータ エンドポイントから認証情報を取得します。
MongoCredential で認証情報を指定する
MongoCredential
インスタンスを使用して、MongoClient
にAmazon Web Services IAM 認証情報を提供できます。 MongoCredential
認証用のMONGODB-AWS
インスタンスを構築するには、 createAwsCredential() ファクトリー メソッド。
MongoCredential.createAwsCredential()
メソッドにはプログラムによるアクセスキーのみを指定できます。 ECS または EC2 コンテナの認証情報を指定する必要がある場合は、「 環境またはAmazon Web Services SDK で認証情報を指定する 」の手順を使用しJava 。
MONGODB-AWS
認証に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(Arrays.asList(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(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());
注意
Amazon Web Services接続 で IAM 認証情報を提供する必要がある場合は、string MONGODB-Amazon Web Services ドライバーのドキュメントの以前のリリースを参照してください。
X.509
X.509
認証メカニズムは TLS を使用する X.509 証明書と併用して、クライアント証明書の相対的識別名(RDN)によって識別されるユーザーを認証できます。X.509
認証メカニズムを指定すると、サーバーはクライアント証明書のサブジェクト名を使用して接続を認証します。
次のコード スニペットは、次のプレースホルダーを使用して認証メカニズムを指定する方法を示しています。
hostname
: クライアントがアクセスできる MongoDB 配置のネットワーク アドレスport
: MongoDB 配置のポート番号authenticationDb
: ユーザーの認証データが含まれる MongoDB database
注意
authenticationDb
パラメータを省略すると、ドライバーはデフォルトのadmin
データベースを使用します。
この認証メカニズムを指定するための手順とサンプル コードについては、以下の [ ] タブまたは [Connection String ] タブを選択してください。MongoCredential
接続stringを使用して X.509
認証メカニズムを指定するには、authMechanism
パラメータに値 MONGODB-X509
を割り当て、tls
パラメータに true
値を割り当てて TLS を有効にします。 MongoClient
をインスタンス化するコードは次のようになります。
MongoClient mongoClient = MongoClients.create("mongodb://<hostname>:<port>/?authSource=<authenticationDb>&authMechanism=MONGODB-X509&tls=true");
クラスを使用して 認証メカニズムを指定するには、 createMongoX509 認証情報() X.509
を使用しますMongoCredential
使用して複数のドキュメントを挿入できます。また、 applyToSslSettings() メソッド を呼び出して TLS を有効にしますenabled
メソッドを使用して、true
SslSettings.Builder で プロパティを に設定する。 ブロック。MongoClient
をインスタンス化するコードは次のようになります。
MongoCredential credential = MongoCredential.createMongoX509Credential(); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .applyToSslSettings(builder -> builder.enabled(true); ) .credential(credential) .build());
証明書と TLS/SSL オプションを使用するようにアプリケーションを構成する方法の詳細については、 TLS/SSL ガイド を参照してください。