エンタープライズ認証メカニズム
Overview
このガイドでは、MongoDB Enterprise Edition で使用可能な認証メカニズムを使用して MongoDB を認証する方法を学習できます。 MongoDB に接続するときに、認証メカニズムを使用してドライバーとサーバーの間で信頼を確立できます。
Rust ドライバーは、 LDAP(PLAIN)エンタープライズ認証メカニズムを使用することで、LDAP(Lightweight Directory Access Protocol)サーバーへの認証をサポートしています。
注意
GSSAPI/Kerberos 認証
ドライバーは GSSAPI/Kerberos 認証メカニズムをサポートしていませんが、この方法を認証するには他の方法を使用できます。 これらの方法の詳細については、サーバー マニュアルの「 Kerberos 認証」を参照してください。
Tip
以下も参照してください。
MongoDB Community Edition で利用可能なメカニズムを使用して MongoDB で認証するには、 認証メカニズムに関するガイドを参照してください。
MongoDB 配置への接続の詳細については接続ガイド を参照してください。
特定の認証メカニズムを選択するには、接続 のオプションまたは {0 構造体で、そのメカニズム、認証情報、およびその他の必要情報を指定します。stringCredential
LDAP(PLAIN)への認証
ディレクトリ サーバーのユーザー名とパスワードを使用して、LDAP(Lightweight Directory Access Protocol)サーバーで認証できます。
認証メカニズムの名前は、LDAP ではなく です。このメカニズムでは RFC- で定義されている PLAINPLAIN
簡易認証とセキュリティ4616 レイヤー(SASL)が使用されているためです。
警告
この認証メカニズムは、パスワードをプレーンテキストでサーバーに送信します。 このメカニズムは、セキュリティを向上させ、アプリケーションの脆弱性を軽減するために、接続で TLS を有効にした後にのみ使用します。
詳細については、サーバー マニュアルの 「 TLS/SSL(トランスポート暗号化) 」 を参照してください。
例
PLAIN
認証メカニズムを指定するには、 Credential
構造体のmechanism
フィールドをAuthMechanism::Plain
に設定します。 この例では、次のプレースホルダーを使用して認証メカニズムを指定します。
username
: LDAP ユーザー名password
: LDAP パスワード
let plain_cred = Credential::builder() .username("<username>".to_string()) .password("<password>".to_string()) .mechanism(AuthMechanism::Plain) .source("$external".to_string()) .build(); client_options.credential = Some(plain_cred); let client = Client::with_options(client_options)?;
注意
認証データベース
認証情報は MongoDB の外部に保存されるため、認証には$external
データベースを使用する必要があります。 Credential
構造体のsource
フィールドはデフォルトで$external
になっているため、このフィールドは省略できます。
あるいは、authMechanism
接続stringオプションの値を PLAIN
に設定することで、接続string URI を使用して認証することもできます。 この例では、次のプレースホルダーを使用して、接続string URI で PLAIN
認証メカニズムを指定する方法を示します。
username
: LDAP ユーザー名password
: LDAP パスワードhostname
: MongoDB サーバーのネットワークアドレス
let uri = "mongodb://<username>:<password>@<hostname>/?authSource=$external&authMechanism=PLAIN";
MONGODB-OIDC
重要
MONGODB-OIDC 認証メカニズムでは、Linux プラットフォーム上で MongoDB Server v 7.0以降を実行する必要があります。
Rustドライバーは、ワークロードID の OpenID Connect( OIDC )認証をサポートしています。ワークロードID は、他のサービスとリソースを認証してアクセスするために、アプリケーション、 サービス、スクリプト、コンテナなどの ソフトウェアワークロードに割り当てる ID です。
次のセクションでは、MONGODB-OIDC 認証メカニズムを使用してさまざまなプラットフォームに認証する方法について説明します。
MONGODB-OIDC認証メカニズムの詳細については、サーバー マニュアルの OpenID Connect 認証 とMongoDB Serverパラメーター を参照してください。
Azure IMDS
アプリケーションがAzure VM 上で実行される場合、またはAzure Instance Metadata Service(MDS)を使用する場合は、 Rustドライバーに組み込まれているAzureサポートを使用してMongoDBを認証できます。
Azure IMDS 用の OIDC を構成するには、Credential
構造体の mechanism
フィールドを AuthMechanism::MongoDbOidc
に設定します。この例では、次のプレースホルダーを使用して認証メカニズムを指定します。
username
: Azure マネージド ID を使用している場合は、管理対象 ID のクライアント ID にこれを設定します。 サービス プリンシパル を使用してエンタープライズ アプリケーションを表す場合は、これをサービス プリンシパルのアプリケーション ID に設定します。mechanism_properties
:ENVIRONMENT
プロパティをazure
に設定し、TOKEN_RESOURCE
をMongoDBデプロイに構成されたオーディエンス パラメータの値に設定します。
次のコード例は、 Client
の作成時にこれらのオプションを設定する方法を示しています。
let credential = Credential::builder() .username("<username>".to_owned()) .mechanism(AuthMechanism::MongoDbOidc) .mechanism_properties( doc! { "ENVIRONMENT": "azure", "TOKEN_RESOURCE": "<audience>" } ) .build(); client_options.credential = Some(credential); let client = Client::with_options(client_options)?; let res = client .database("test") .collection::<Document>("test") .find_one(doc! {}) .await?;
GCP IMDS
アプリケーションが Google Compute Engine VM で実行される場合、またはGCPインスタンス メタデータ サービス を使用する場合は、 Rustドライバーに組み込まれているGCPサポートを使用してMongoDBを認証できます。
GCP IMDS 用の OIDC を構成するには、Credential
構造体の mechanism
フィールドを AuthMechanism::MongoDbOidc
に設定します。次に、mechanism_properties
フィールドに次の値を設定して認証メカニズムを指定します。
ENVIRONMENT
: このプロパティをgcp
に設定します。TOKEN_RESOURCE
: このプロパティを、 MongoDBデプロイで構成されたオーディエンス パラメータの値に設定します。
次のコード例は、 Client
の作成時にこれらのオプションを設定する方法を示しています。
let credential = Credential::builder() .mechanism(AuthMechanism::MongoDbOidc) .mechanism_properties( doc! { "ENVIRONMENT": "gcp", "TOKEN_RESOURCE": "<audience>" } ) .build(); client_options.credential = Some(credential); let client = Client::with_options(client_options)?; let res = client .database("test") .collection::<Document>("test") .find_one(doc! {}) .await?;
カスタム コールバック
Rustドライバーでは、 AWS Elastic Kubernetes Service(EKS)を含むすべてのプラットフォームの組み込みサポートを提供していません。 OIDC を使用してサポートされていないプラットフォームで認証するには、カスタムコールバック関数を定義する必要があります。
次のコードは、EKS クラスターのカスタムコールバックの実装例です。まず、Credential
構造体の oidc_callback
フィールドを oidc::Callback::machine
に設定します。次に、AWS_WEB_IDENTITY_TOKEN_FILE
環境変数に設定されているパスからアクセス トークンを読み取ります。最後に、IdpServerResponse
構造体の access_token
フィールドの値を設定します。オプションで、expires
フィールドと refresh_token
フィールドの値を設定します。
let credential = Credential::builder() .mechanism(AuthMechanism::MongoDbOidc) .oidc_callback(oidc::Callback::machine(move |_| { async move { let token_file_path = std::env::var("AWS_WEB_IDENTITY_TOKEN_FILE").map_err(mongodb::error::Error::custom)?; let access_token = tokio::fs::read_to_string(token_file_path).await?; Ok(IdpServerResponse::builder().access_token(access_token).build()) } .boxed() })) .build() .into(); client_options.credential = Some(credential); let client = Client::with_options(client_options)?; let res = client .database("test") .collection::<Document>("test") .find_one(doc! {}) .await?;
ワークフォース ID認証プロセスに人間のやり取りが含まれる場合は、Credential
構造体の oidc_callback
フィールドを oidc::Callback::machine
ではなく oidc::Callback::human
に設定してクライアントを構成する必要があります。 Rustドライバーは、次のプロセスでコールバックを使用します。
ドライバーは、指定されたユーザー名の ID プロバイダー情報(IDPInfo)を検索します。
コールバックは IdP とネゴシエートして、
access_token
と、潜在的なrefresh_token
およびタイムアウト値(設定されている場合)を取得します。コールバックではResult<IdpServerInfo>
が返されます。
次の例では、ワークフォース ID を処理するカスタムコールバックを定義しています。この例をユースケースに合わせてカスタマイズするには、<human flow>
を独自のカスタムフローに置き換えます。詳細については、「 OIDC を使用した認証コードフロー 」を参照してください。
let callback = Callback::human(move |context| { async move { "<human flow>"; todo!("human flow") } .boxed() }); let credential = Credential::builder() .mechanism(AuthMechanism::MongoDbOidc) .oidc_callback(callback) .build(); client_options.credential = Some(credential); let client = Client::with_options(client_options)?; let res = client .database("test") .collection::<Document>("test") .find_one(doc! {}) .await?;
詳細情報
このガイドの概念の詳細については、次のドキュメントを参照してください。
LDAP プロキシ認証の MongoDB Server サポート (サーバー マニュアルの参照)
接続オプションガイド
接続文字列(サーバー マニュアルを参照してください)
API ドキュメント
このガイドで言及されているメソッドとタイプの詳細については、次のAPIドキュメントを参照してください。