認証メカニズム
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。 このパラメータを省略すると、ドライバーはデフォルト値の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。 このパラメータを省略すると、ドライバーはデフォルト値の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。 このパラメータを省略すると、ドライバーはデフォルト値の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-AWS
認証メカニズムは、Amazon Web Services Identity and Access Management(AWS IAM)認証情報を使用してユーザーを認証します。
Amazon Web Servicesの認証情報を環境変数として保存することも、以下の例のようにインラインで挿入することもできます。 ドライバーは、次の順序で認証情報を確認します。
MongoCredential
オブジェクトまたは指定された 接続stringに指定された値。環境変数。 (
AWS_ACCESS_KEY_ID
、AWS_SECRET_ACCESS_KEY
、および任意でAWS_SESSION_TOKEN
)AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
環境変数で指定されたAmazon Web Services EC2 エンドポイント。デフォルトのAmazon Web Services EC2 エンドポイント。 詳しくは、「 タスクの IAM ロール 」を 参照してください。
次のコード スニペットは、次のプレースホルダーを使用して認証メカニズムを指定する方法を示しています。
awsKeyId
AWS_ACCESS_KEY_ID
の - 値。awsSecretKey
AWS_SECRET_ACCESS_KEY
の - 値。atlasUri
- MongoDB Atlas インスタンスのネットワークアドレス。awsSessionToken
AWS_SESSION_TOKEN
の - 値。 (任意)
重要
認証情報を URL エンコードする
バックスラッシュやその他の文字による解析エラーが発生しないように、必ず認証情報を URL エンコードしてください。 次のコード例は、プレースホルダーfieldValue
で表されるサンプル string を URL エンコードする方法を示しています。
String encodedField = java.net.URLEncoder.encode("<fieldValue>".toString(), "ISO-8859-1");
この認証メカニズムを指定するための手順とサンプル コードについては、以下の [ ] タブまたは [Connection String ] タブを選択してください。MongoCredential
接続文字列 を使用して MONGODB-AWS
認証メカニズムを指定するには、 接続stringで、authMechanism
パラメータに値 "MONGODB-AWS"
を割り当てstring 。 MongoClient
をインスタンス化するコードは次のようになります。
MongoClient mongoClient = MongoClients.create("mongodb://<awsKeyId>:<awsSecretKey>@<atlasUri>?authMechanism=MONGODB-AWS");
Amazon Web Servicesセッション トークンを指定する必要がある場合は、AWS_SESSION_TOKEN:<awsSessionToken>
形式を使用して次のように authMechanismProperties
パラメータに含めます。 セッション トークンを使用してMongoClient
をインスタンス化するコードは次のようになります。
MongoClient mongoClient = MongoClients.create("mongodb://<awsKeyId>:<awsSecretKey>@<atlasUri>?authMechanism=MONGODB-AWS&authMechanismProperties=AWS_SESSION_TOKEN:<awsSessionToken>");
MONGODB-AWS
MongoCredential
クラスを使用して 認証メカニズムを指定するには、 createAwsCredential() 使用して複数のドキュメントを挿入できます。MongoClient
をインスタンス化するコードは次のようになります。
MongoCredential credential = MongoCredential.createAwsCredential("<awsKeyId>", "<awsSecretKey>".toCharArray()); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>")))) .credential(credential) .build());
Amazon Web Servicesセッショントークンを指定する必要がある場合は、次のいずれかの選択を使用して追加できます。
接続 で Amazon Web Servicesセッション トークンを指定します。string
接続 で と一緒に のセッション トークンを渡す場合は、Amazon Web Servicesstring
MongoCredential
パラメータに認証メカニズムを指定し、authMechanism
パラメータにセッションauthMechanismProperties
トークンを指定します。次に、MongoClientSettings
applyConnectionString() メソッドを呼び出して に追加します メソッドを次のとおり使用します。MongoCredential credential = MongoCredential.createAwsCredential("<awsKeyId>", "<awsSecretKey>".toCharArray()); ConnectionString connectionString = new ConnectionString("mongodb://<atlasUri>/?authMechanism=MONGODB-AWS&authMechanismProperties=AWS_SESSION_TOKEN:<awsSessionToken>"); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyConnectionString(connectionString) .credential(credential) .build()); MongoCredential でAmazon Web Servicesセッション トークンを指定します。
withMechanismProperty() の呼び出しで Amazon Web ServicesAmazon Web Services セッション トークンを指定することで、 インスタンスに セッション
MongoCredential
トークンを含めることができます。 以下に示すように、MongoCredential credential = MongoCredential.createAwsCredential("<awsKeyId>", "<awsSecretKey>".toCharArray()).withMechanismProperty("AWS_SESSION_TOKEN", "<awsSessionToken>"); ConnectionString connectionString = new ConnectionString("mongodb://<atlasUri>/?authMechanism=MONGODB-AWS"); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyConnectionString(connectionString) .credential(credential) .build()); 環境変数でAmazon Web Servicesセッション トークンを指定します。
クライアント実行環境で、
AWS_SESSION_TOKEN
という環境変数を設定し、その環境にトークンを割り当てます。MONGODB-AWS
認証メカニズムを指定すると、値はMongoClient
によって自動的に選択されます。
認証情報の更新
ドライバーは、ロールを想定したり、 Elastic Kubernetes Serviceを使用したりする場合など、認証情報の更新をサポートしています。
Supplier<AwsCredential> awsFreshCredentialSupplier = () -> { // Add your code to fetch new credentials, such as assuming a role using the AWS SDK. // Ensure you return the temporary credentials. return new AwsCredential("<awsKeyId>", "<awsSecretKey>", "<awsSessionToken>"); }; MongoCredential credential = MongoCredential.createAwsCredential(null, null) .withMechanismProperty(MongoCredential.AWS_CREDENTIAL_PROVIDER_KEY, awsFreshCredentialSupplier); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Collections.singletonList(new ServerAddress("<hostname>", 27017)))) .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。 このパラメータを省略すると、ドライバーはデフォルト値の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 ガイド を参照してください。