ANNOUNCEMENT: Voyage AI joins MongoDB to power more accurate and trustworthy AI applications on Atlas.
Learn more
Docs Menu

エンタープライズ認証メカニズム

このガイドでは、MongoDB Enterprise Edition でのみ使用可能な各認証メカニズムを使用して MongoDB で認証する方法を学習できます。

MongoDB Enterprise Edition の最新バージョンでは、次のメカニズムを使用できます。

認証メカニズム のガイドを参照してください。

MongoDB クラスターへの接続を確立する方法の詳細については、接続ガイド をお読みください。

次のいずれかを使用して MongoDB に接続するときに、認証メカニズムと認証情報を指定できます。

  • 接続string

  • MongoCredentialファクトリー メソッド

接続string接続 URIとも呼ばれます)は、 MongoDBクラスターへの接続と認証の方法を指定します。

接続文字列 を使用して認証するには、接続string stringに設定を含め、それを MongoClient.create() メソッドに渡して MongoClient をインスタンス化します。 各セクションの Connection String タブには、接続stringを使用して認証するための構文が記載されています。

あるいは、 MongoCredentialクラスを使用して認証の詳細を指定することもできます。 MongoCredentialクラスには、認証メカニズムと認証情報を含む インスタンスを構築する静的ファクトリー メソッドが含まれています。 MongoCredentialヘルパー クラスを使用する場合は、 MongoClientの構築時に接続設定を構成するためにMongoClientSettings.Builderクラスを使用する必要があります。 各セクションのMongoCredentialタブには、 MongoCredentialを使用して認証するための構文が記載されています。

これらのクラスとメソッドの詳細については、次の API ドキュメントを参照してください。

汎用セキュリティ サービス API( GSSAPI )認証メカニズムにより、ユーザーはユーザーのプリンシパル名を使用して Kerberos サービスで認証できます。

注意

このメソッドでは、ドライバーはGSSAPI KerberosGSSAPI RFC-4652 を使用して認証するため、 ではなく 認証メカニズムが参照されます。 SASL メカニズム。

次のコード スニペットは、次のプレースホルダーを使用して認証メカニズムを指定する方法を示しています。

  • Kerberos principal - URL エンコードされたプリンシパル名(例: "username% 40 REALM.ME"

  • hostname - クライアントからアクセス可能な MongoDB サーバーのネットワーク アドレス

  • port - MongoDB サーバーのポート番号

この認証メカニズムを指定するための手順とサンプル コードについては、以下の [ ] タブまたは [Connection String ] タブを選択してください。MongoCredential

接続stringを使用して GSSAPI 認証メカニズムを指定するには、次の手順に従います。

  • authMechanism URL パラメータに値GSSAPIを割り当てます

  • (任意)authSource URL パラメータに値$externalを割り当てます

注意

GSSAPIメカニズムを指定する場合、 authSource$external以外の値に割り当てることはできません。

MongoClientをインスタンス化するコードは次のようになります。

val connectionString = ConnectionString("<Kerberos principal>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI")
val mongoClient = MongoClient.create(connectionString)

MongoCredentialクラスを使用して GSSAPI 認証メカニズムを指定するには、 createGSSAPICredential()メソッドを使用します。 MongoClientをインスタンス化するコードは次のようになります。

val credential = MongoCredential.createGSSAPICredential("<Kerberos principal>")
val settings = MongoClientSettings.builder()
.applyToClusterSettings { builder ->
builder.hosts(listOf(ServerAddress("<hostname>", <port>)))
}
.credential(credential)
.build()
val mongoClient = MongoClient.create(settings)

Kerberos チケット を取得するには 、GSSAPI Java ライブラリでは、Realm と KDC(Key Distributor)システム プロパティを指定する必要があります。次の例のサンプル設定を参照してください。

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 追加プロパティの 1 つを指定するには、次の形式を使用して接続string にURL パラメーターとして含めます:<PROPERTY_NAME>:<value>

GSSAPI と追加のプロパティを使用してMongoClientをインスタンス化するコードは、次のようになります。

val connectionString = ConnectionString("<Kerberos principal>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:myService")
val mongoClient = MongoClient.create(connectionString)

GSSAPI 追加プロパティの 1 つを指定するには、 MongoCredentialインスタンスでwithMechanismProperty()メソッドを呼び出し、プロパティ名と値をパラメーターとして渡します。 MongoCredentialクラスで定義されているプロパティ名定数を使用します。

[ SERVICE_NAME_KEY ] タブまたは [ Java_SUBJECT_KEY ] タブを選択して、GSSAPI と選択した プロパティを使用するMongoCredentialをインスタンス化するためのサンプル コードを確認します。

val credential = MongoCredential.createGSSAPICredential("<Kerberos principal>")
.withMechanismProperty(MongoCredential.SERVICE_NAME_KEY, "myService")
val loginContext = LoginContext("<LoginModule implementation from JAAS config>")
loginContext.login()
val subject: Subject = loginContext.subject
val credential = MongoCredential.createGSSAPICredential("<Kerberos principal>")
.withMechanismProperty(MongoCredential.JAVA_SUBJECT_KEY, subject)

デフォルトでは、 Kotlin ドライバーはMongoClientインスタンスごとに Kerberos チケットをキャッシュします。 配置でMongoClientインスタンスを頻繁に作成および破棄する必要がある場合は、デフォルトの Kerberos チケット キャッシュ動作を プロセスごとにキャッシュすることでパフォーマンスを向上させることができます。

プロセスごとにKerberosチケットをキャッシュするには、MongoCredential 認証メカニズムを使用する必要があります。接続string認証メカニズムでは JAVA_SUBJECT_PROVIDER メカニズムのプロパティがサポートされていないためです。 プロセスごとに Kerberos チケットをキャッシュする場合は、その方法について詳しくはMongoCredentialタブを選択してください。

プロセスによって Kerberos チケットをキャッシュするには、JAVA_SUBJECT_PROVIDER メカニズム プロパティを指定し、 KerberosSubjectProvider MongoCredentialを提供する必要があります。 インスタンスの場合プロセスごとに Kerberos チケットをキャッシュするように Kotlin ドライバーを構成するコードは、次のようになります。

/* All MongoClient instances sharing this instance of KerberosSubjectProvider
will share a Kerberos ticket cache */
val myLoginContext = "myContext"
/* Login context defaults to "com.sun.security.jgss.krb5.initiate"
if unspecified in KerberosSubjectProvider */
val credential = MongoCredential.createGSSAPICredential("<Kerberos principal>")
.withMechanismProperty(
MongoCredential.JAVA_SUBJECT_PROVIDER_KEY,
KerberosSubjectProvider(myLoginContext)
)

注意

Windows では、Oracle の JRE は LSA を使用しています では なく は、Windows Active Directory およびシングル サインオンの実装との相互運用性を制限します。詳しくは、次の記事を参照してください。

MongoDB Enterprise Edition 3.4 以降で利用可能です。

ディレクトリ サーバーのユーザー名とパスワードを使用して、LDAP(Lightweight Directory Access Protocol)サーバーで認証できます。

Tip

認証メカニズムは 、RFC-4616 で定義されている PLAIN 簡易認証とセキュリティ層(SASL) を使用して認証するため、 ではなく という名前が付けられていますPLAIN LDAP

この認証メカニズムを指定するには、authMechanism パラメータをPLAIN LDAPに設定し、 接続string に ユーザー名とパスワードを含めます。

次のコード スニペットは、次のプレースホルダーを使用して認証メカニズムを指定する方法を示しています。

  • LDAP username - LDAP ユーザー名

  • password - LDAP ユーザーのパスワード

  • hostname - クライアントからアクセス可能な MongoDB サーバーのネットワーク アドレス

  • port - MongoDB サーバーのポート番号

この認証メカニズムを指定するための手順とサンプル コードについては、以下の [ ] タブまたは [Connection String ] タブを選択してください。MongoCredential

LDAP接続 を使用して (PLAIN)認証メカニズムを指定するには、string

  • authMechanism URL パラメータに値PLAINを割り当てます

  • (任意)authSource URL パラメータに値$externalを割り当てます

注意

PLAINメカニズムを指定する場合、 authSource$external以外の値に割り当てることはできません。

MongoClientをインスタンス化するコードは次のようになります。

val connectionString = ConnectionString("<LDAP username>:<password>@<hostname>:<port>/?authSource=$external&authMechanism=PLAIN")
val mongoClient = MongoClient.create(connectionString)

MongoCredentialクラスを使用して LDAP(PLAIN)認証メカニズムを指定するには、 createPlainCredential()メソッドを使用します。 MongoClientをインスタンス化するコードは次のようになります。

val credential = MongoCredential.createPlainCredential("<LDAP username>", "$external", "<password>".toCharArray())
val settings = MongoClientSettings.builder()
.applyToClusterSettings { builder ->
builder.hosts(listOf(ServerAddress("<hostname>", <port>)))
}
.credential(credential)
.build()
val mongoClient = MongoClient.create(settings)

重要

MONGODB-OIDC 認証メカニズムでは、Linux プラットフォーム上で MongoDB Server v 7.0以降を実行する必要があります。

次のセクションでは、MONGODB-OIDC 認証メカニズムを使用してさまざまなプラットフォームに認証する方法について説明します。

MONGODB-OIDC 認証メカニズムの詳細については、 MongoDB ServerMongoDB Serverマニュアルの 「 OpenID Connect 認証 」 と 「 パラメーター 」 を参照してください。

アプリケーションが Azure VM 上で実行され、 や Azure インスタンス メタデータ サービス が使用される場合 (MDS)では、 Kotlin ドライバーに組み込まれている Azure サポートを使用して MongoDB で認証できます。

Azure IMDS OIDC 認証は、MongoCredential インスタンスを使用するか、 接続stringで認証情報を指定して指定できます。

Connection StringMongoCredential対応する構文を表示するには、 タブまたは タブから を選択します。

次のコード内の<percent-encoded audience>プレースホルダーを、MongoDB 配置に構成されたオーディエンス サーバー パラメータのパーセント エンコードされた値に置き換えます。

カンマ( , )文字とそのエンコーディング( %2C )は予約されており、これらの文字を値で使用すると、ドライバーはカンマをキーと値のペアの区切り文字として解釈します。 MongoCredentialタブに示されているように、 MongoCredentialインスタンスではカンマを含む値を指定する必要があります。

val connectionString = ConnectionString(
"mongodb://<OIDC principal>@<hostname>:<port>/?" +
"?authMechanism=MONGODB-OIDC" +
"&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:<percent-encoded audience>")
val mongoClient = MongoClient.create(connectionString)

<OIDC principal>プレースホルダーを、Azure が管理する IdP またはエンタープライズ アプリケーションのクライアント ID またはアプリケーション ID に置き換えます。 <audience>プレースホルダーを、MongoDB 配置に構成されたaudienceサーバー パラメータの値に置き換えます。

val credential = MongoCredential.createOidcCredential("<OIDC principal>")
.withMechanismProperty("ENVIRONMENT", "azure")
.withMechanismProperty("TOKEN_RESOURCE", "<audience>")
val mongoClient = MongoClient.create(
MongoClientSettings.builder()
.applyToClusterSettings { builder ->
builder.hosts(listOf(ServerAddress("<hostname>", <port>)))
}
.credential(credential)
.build())

アプリケーションが Google Compute Engine VM で実行され、または GCP インスタンス メタデータ サービス を使用している場合 では、 Kotlin ドライバーに組み込まれている GCP サポートを使用して MongoDB に認証できます。

GCP IMDS OIDC 認証は、MongoCredential インスタンスを使用するか、 接続stringで認証情報を指定して指定できます。

Connection StringMongoCredential対応する構文を表示するには、 タブまたは タブから を選択します。

次のコード内の<percent-encoded audience>プレースホルダーを、MongoDB 配置に構成されたオーディエンス サーバー パラメータのパーセント エンコードされた値に置き換えます。

カンマ( , )文字とそのエンコーディング( %2C )は予約されており、これらの文字を値で使用すると、ドライバーはカンマをキーと値のペアの区切り文字として解釈します。 MongoCredentialタブに示されているように、 MongoCredentialインスタンスではカンマを含む値を指定する必要があります。

val connectionString = ConnectionString(
"mongodb://<OIDC principal>@<hostname>:<port>/?" +
"authMechanism=MONGODB-OIDC" +
"&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:<percent-encoded audience>")
val mongoClient = MongoClient.create(connectionString)

<audience>プレースホルダーを、MongoDB 配置に構成されたaudienceサーバー パラメータの値に置き換えます。

val credential = MongoCredential.createOidcCredential("<OIDC principal>")
.withMechanismProperty("ENVIRONMENT", "gcp")
.withMechanismProperty("TOKEN_RESOURCE", "<audience>")
val mongoClient = MongoClient.create(
MongoClientSettings.builder()
.applyToClusterSettings { builder ->
builder.hosts(listOf(ServerAddress("<hostname>", <port>)))
}
.credential(credential)
.build())

Kotlin ドライバーは、Azure Functions や Azure Kubernetes Service(AKS)を含むすべてのプラットフォームの組み込みサポートを提供していません。 代わりに、OIDC を使用してこれらのプラットフォームから認証するためのカスタム コールバックを定義する必要があります。 そのためには、次のコード例に示すように、 "OIDC_CALLBACK"認証プロパティを使用します。

val credential = MongoCredential.createOidcCredential(null)
.withMechanismProperty("OIDC_CALLBACK") { context: Context ->
val accessToken = "..."
OidcCallbackResult(accessToken)
}

"OIDC_CALLBACK"プロパティの値は、 OidcCallbackContextをパラメータとして受け入れ、 OidcCallbackResultを返すOidcCallback関数インターフェースの Lambda またはその他の実装である必要があります。

次の例では、サンプル コールバックを使用して、ローカル ファイル システム内の"access-token.dat"という名前のファイルから OIDC トークンを検索します。

val credential = MongoCredential.createOidcCredential(null)
.withMechanismProperty("OIDC_CALLBACK") { context: Context ->
val accessToken = String(Files.readAllBytes(Paths.get("access-token.dat")))
OidcCallbackResult(accessToken)
}
val mongoClient = MongoClient.create(
MongoClientSettings.builder()
.applyToClusterSettings { builder ->
builder.hosts(listOf(ServerAddress("<hostname>", <port>)))
}
.credential(credential)
.build()
)