エンタープライズ認証メカニズム
Overview
MongoDB Enterprise Edition には、 MongoDB Community Edition では使用できない認証メカニズムが含まれています。 このガイドでは、これらの認証メカニズムを使用してMongoDBを認証する方法を学習できます。 MongoDBで利用可能なその他の認証メカニズムについて詳しくは、「 認証メカニズムのガイド」をご覧ください。
認証メカニズムを指定する
MongoDBに接続するときに、次のいずれかの方法を使用して認証メカニズムと認証情報を指定できます。
接続文字列
MongoCredential
ファクトリー メソッド
接続string (接続 URIとも呼ばれます)は、 MongoDBクラスターへの接続と認証の方法を指定します。
接続文字列 を使用して認証するには、 接続string stringに設定を含め、それを MongoClients.create()
メソッドに渡して MongoClient
をインスタンス化します。 Connection String接続 を使用して認証するための構文を確認するには、次のセクションで {2string タブを選択します。
また、認証の詳細を指定するために、 MongoCredential
クラスを使用することもできます。 MongoCredential
クラスには、認証メカニズムと認証情報を含む インスタンスを構築する静的ファクトリー メソッドが含まれています。 MongoCredential
ヘルパークラスを使用する場合は、接続設定を構成するためにMongoClientSettings.Builder
クラスを使用します。 MongoCredential
を使用して認証する構文を確認するには、次のセクションでMongoCredentialタブを選択します。
メカニズム
Kerberos (GSSAPI)
ジェネリック セキュリティ サービスAPI (GSSAPI)認証メカニズムを使用すると、プリンシパル名を使用して Kerberos サービスで認証できます。
次のセクションには、次のプレースホルダーを使用するコード例が含まれています。
username
: URL エンコードされたプリンシパル名(例:"username%40REALM.ME"
hostname
: クライアントがアクセスできる MongoDB 配置のネットワーク アドレスport
: MongoDB 配置のポート番号
Connection StringMongoCredential対応する構文を確認するには、 タブまたは タブを選択します。
次の例では、接続stringを使用して GSSAPI を認証します。
MongoClient mongoClient = MongoClients .create("<username>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI");
MongoCredential
クラスを使用して GSSAPI認証メカニズムを指定するには、次の例に示すように、 createGSSAPICredential()
メソッドを呼び出します。
MongoCredential credential = MongoCredential.createGSSAPICredential("<username>"); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());
Kerberosチケット を取得するには、GSSAPI Javaライブラリは、 邦土と KDC(Key Expression Center)システム プロパティを指定する必要があります。次の例に示すように、これらの設定を設定できます。
java.security.krb5.realm=MYREALM.ME java.security.krb5.kdc=mykdc.myrealm.me
Kerberos の設定によっては、次の追加のMongoCredential
メカニズム プロパティを 1 つ以上指定する必要がある場合があります。
SERVICE_NAME
CANONICALIZE_HOST_NAME
JAVA_SUBJECT
JAVA_SASL_CLIENT_PROPERTIES
JAVA_SUBJECT_PROVIDER
重要
次の GSSAPI プロパティは、 MongoCredential
クラスでのみ指定できます。
JAVA_SUBJECT
JAVA_SASL_CLIENT_PROPERTIES
JAVA_SUBJECT_PROVIDER
これらのプロパティを指定する方法については、 MongoCredentialタブを選択してください。
GSSAPI 追加プロパティを指定するには、接続stringにプロパティを形式のURLパラメータとして含めます: <PROPERTY_NAME>:<value>
。
次の例では、GSSAPI で認証し、追加のプロパティを指定しています。
MongoClient mongoClient = MongoClients .create("<username>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:myService");
GSSAPI 追加プロパティを指定するには、 MongoCredential
インスタンスでwithMechanismProperty()
メソッドを呼び出し、プロパティ名と値をパラメーターとして渡します。 MongoCredential
クラスで定義されているプロパティ名定数を使用します。
対応するプロパティを指定する方法を確認するには、 SERVICE_NAME_KEYタブまたはJAVA_SUBJECT_KEYタブを選択します。
MongoCredential credential = MongoCredential .createGSSAPICredential("<username>"); credential = credential .withMechanismProperty(MongoCredential.SERVICE_NAME_KEY, "<myService>");
LoginContext loginContext = new LoginContext(<LoginModule implementation from JAAS config>); loginContext.login(); Subject subject = loginContext.getSubject(); MongoCredential credential = MongoCredential .createGSSAPICredential("<username>"); credential = credential .withMechanismProperty(MongoCredential.JAVA_SUBJECT_KEY, subject);
デフォルトでは 、 Java Reactive Streams ドライバーはMongoClient
インスタンスによって Kerberos チケットをキャッシュします。 配置でMongoClient
インスタンスが頻繁に作成され、破棄される場合は、デフォルトの Kerberosチケットキャッシュ動作を プロセスごとにキャッシュすることでパフォーマンスを向上させることができます。
プロセスごとにKerberosチケットをキャッシュするには、 MongoCredential
認証メカニズムを使用する必要があります。接続string認証メカニズムでは JAVA_SUBJECT_PROVIDER
メカニズムプロパティがサポートされていないためです。 プロセス別に Kerberos チケットをキャッシュする方法については、 MongoCredentialタブを選択してください。
プロセスごとに KerberosJAVA_SUBJECT_PROVIDER
MongoCredential
チケットをキャッシュするには、 メカニズムプロパティを指定し、 KerberosSubjectProvider を提供します 次の例に示すように、 インスタンスに が含まれます。
/* All MongoClient instances sharing this instance of KerberosSubjectProvider will share a Kerberos ticket cache */ String myLoginContext = "myContext"; MongoCredential credential = MongoCredential .createGSSAPICredential(<username>); /* Login context defaults to "com.sun.security.jgss.krb5.initiate" if unspecified in KerberosSubjectProvider */ credential = credential .withMechanismProperty(MongoCredential.JAVA_SUBJECT_PROVIDER_KEY, new KerberosSubjectProvider(myLoginContext));
LDAP (PLAIN)
ディレクトリ サーバーのユーザー名とパスワードを使用して、LDAP(Lightweight Directory Access Protocol)サーバーで認証できます。
Tip
認証メカニズムは 、RFC-4616 で定義されている PLAIN 簡易認証とセキュリティ層(SASL) を使用して認証するため、 ではなく という名前が付けられていますPLAIN
LDAP
。
次のセクションには、次のプレースホルダーを使用するコード例が含まれています。
ldap_username
: LDAP ユーザー名ldap_password
: LDAP ユーザーのパスワードhostname
: クライアントがアクセスできる MongoDB 配置のネットワーク アドレスport
: MongoDB 配置のポート番号
Connection StringMongoCredential対応する構文を確認するには、 タブまたは タブを選択します。
MongoClient mongoClient = MongoClients .create("<ldap_username>:<ldap_password>@<hostname>:<port>/?authSource=$external&authMechanism=PLAIN");
MongoCredential
クラスを使用して LDAP(PLAIN)認証メカニズムを指定するには、次の例に示すように、 createPlainCredential()
メソッドを呼び出します。
MongoCredential credential = MongoCredential .createPlainCredential(<ldap_username>, "$external", <ldap_password>); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());
MONGODB-OIDC
重要
MONGODB-OIDC 認証メカニズムでは、Linux プラットフォーム上で MongoDB Server v 7.0以降を実行する必要があります。
次のセクションでは、MONGODB-OIDC 認証メカニズムを使用してさまざまなプラットフォームに認証する方法について説明します。
MONGODB-OIDC 認証メカニズムの詳細については、 MongoDB ServerMongoDB Serverマニュアルの 「 OpenID Connect 認証 」 と 「 パラメーター 」 を参照してください。
Azure IMDS
アプリケーションがAzure VM 上で実行され、 や Azureインスタンス メタデータ サービス が使用される場合 (MDS)では、 Java Reactive Streams ドライバーの組み込みAzureサポートを使用してMongoDBで認証できます。
Azure IMDS OIDC 認証は、MongoCredential
を使用するか、 接続stringの一部として指定できます。
Connection StringMongoCredential対応する構文を確認するには、 タブまたは タブを選択します。
<username>
プレースホルダーを、 Azureが管理する IdP またはエンタープライズアプリケーションのクライアントIDまたはアプリケーションIDに置き換えます。 次のコード内の<percent-encoded audience>
プレースホルダーを、 MongoDBデプロイに構成されたオーディエンスサーバーパラメータのパーセント エンコードされた値に置き換えます。
カンマ( ,
)文字とそのエンコーディング( %2C
)は予約されており、これらの文字を値で使用すると、ドライバーはカンマをキーと値のペアの区切り文字として解釈します。 MongoCredentialタブに示されているように、 MongoCredential
インスタンスではカンマを含む値を指定する必要があります。
MongoClient mongoClient = MongoClients.create( "mongodb://<username>@<hostname>:<port>/?" + "?authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:<percent-encoded audience>");
<username>
プレースホルダーを、Azure が管理する IdP またはエンタープライズ アプリケーションのクライアント ID またはアプリケーション ID に置き換えます。 <audience>
プレースホルダーを、MongoDB 配置に構成されたaudience
サーバー パラメータの値に置き換えます。
MongoCredential credential = MongoCredential.createOidcCredential("<username>") .withMechanismProperty("ENVIRONMENT", "azure") .withMechanismProperty("TOKEN_RESOURCE", "<audience>"); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());
GCP IMDS
アプリケーションが Google Compute Engine VM で実行され、または GCPインスタンス メタデータ サービス を使用している場合 、 Java Reactive Streams ドライバーに組み込まれているGCPサポートを使用して、 MongoDBに認証できます。
GCP IMDS OIDC 認証は、MongoCredential
を使用するか、接続stringの一部として指定できます。
次のセクションには、次のプレースホルダーを使用するコード例が含まれています。
hostname
: クライアントがアクセスできる MongoDB 配置のネットワーク アドレスport
: MongoDB 配置のポート番号
Connection StringMongoCredential対応する構文を確認するには、 タブまたは タブを選択します。
次のコード内の<percent-encoded audience>
プレースホルダーを、MongoDB 配置に構成されたオーディエンス サーバー パラメータのパーセント エンコードされた値に置き換えます。
カンマ( ,
)文字とそのエンコーディング( %2C
)は予約されており、これらの文字を値で使用すると、ドライバーはカンマをキーと値のペアの区切り文字として解釈します。 MongoCredentialタブに示されているように、 MongoCredential
インスタンスではカンマを含む値を指定する必要があります。
MongoClient mongoClient = MongoClients.create( "mongodb://<hostname>:<port>/?" + "authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:<percent-encoded audience>");
<audience>
プレースホルダーを、MongoDB 配置に構成されたaudience
サーバー パラメータの値に置き換えます。
MongoCredential credential = MongoCredential.createOidcCredential() .withMechanismProperty("ENVIRONMENT", "gcp") .withMechanismProperty("TOKEN_RESOURCE", "<audience>"); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());
カスタム コールバック
Java Reactive Streams ドライバーでは、 Azure Functions やAzure Kubernetes Service(AKS)を含むすべてのプラットフォームで組み込みサポートを提供していません。 代わりに、OIDC を使用してこれらのプラットフォームから認証するためのカスタムコールバックを定義する必要があります。 これを行うには、次のコード例に示すように、 "OIDC_CALLBACK"
認証プロパティを使用します。
MongoCredential credential = MongoCredential.createOidcCredential(null) .withMechanismProperty("OIDC_CALLBACK", (context) -> { String accessToken = ... return new OidcCallbackResult(accessToken); });
"OIDC_CALLBACK"
プロパティの値は、 OidcCallbackContext
をパラメータとして受け入れ、 OidcCallbackResult
を返すOidcCallback
関数インターフェースの Lambda またはその他の実装である必要があります。
次の例では、サンプル コールバックを使用して、ローカル ファイル システム内の"access-token.dat"
という名前のファイルから OIDC トークンを検索します。
MongoCredential credential = MongoCredential.createOidcCredential(null) .withMechanismProperty("OIDC_CALLBACK", (context) -> { string accessToken = new String(Files.readAllBytes(Paths.get("access-token.dat")); return new OidcCallbackResult(accessToken); }); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());