Overview
このガイドでは、MongoDB Enterprise Edition で使用可能な認証メカニズムを使用して MongoDB を認証する方法を学習できます。 MongoDB に接続するときに、認証メカニズムを使用してドライバーとサーバーの間で信頼を確立できます。
Rust ドライバーは、 LDAP(PLAIN)エンタープライズ認証メカニズムを使用することで、LDAP(Lightweight Directory Access Protocol)サーバーへの認証をサポートしています。
Tip
MongoDB Community Edition で利用可能なメカニズムを使用して MongoDB で認証するには、 認証メカニズムに関するガイドを参照してください。
MongoDB 配置への接続の詳細については接続ガイド を参照してください。
特定の認証メカニズムを選択するには、接続 のオプションまたは {0 構造体で、そのメカニズム、認証情報、およびその他の必要情報を指定します。stringCredential
LDAP(PLAIN)への認証
ディレクトリ サーバーのユーザー名とパスワードを使用して、LDAP(Lightweight Directory Access Protocol)サーバーで認証できます。
認証メカニズムの名前は、LDAP ではなく PLAIN です。このメカニズムでは RFC-4616. で定義されている PLAIN 簡易認証とセキュリティ レイヤー(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?;
Kubernetes
アプリケーションがKubernetesクラスターで実行される場合は、 Rustドライバーに組み込まれているKubernetesサポートを使用してMongoDBに認証できます。
Kubernetes用の OIDC を構成するには、Credential 構造体の mechanismフィールドをAuthMechanism::MongoDbOidc に設定します。次に、mechanism_propertiesフィールドで ENVIRONMENTプロパティを k8s に設定して認証メカニズムを指定します。
次のコード例は、 Clientの作成時にこれらのオプションを設定する方法を示しています。
let credential = Credential::builder() .mechanism(AuthMechanism::MongoDbOidc) .mechanism_properties( doc! { "ENVIRONMENT": "k8s" } ) .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ドライバーは、 Amazon Web Services 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?;
GSSAPI(Kerberos)
ジェネリック セキュリティ サービスAPI (GSSAPI)認証メカニズムを使用すると、プリンシパル名を使用して Kerberos サービスで認証できます。GSSAPI認証メカニズムを指定するには、Credential 構造体の mechanismフィールドをAuthMechanism::Gssapi に設定します。
オプションで、mechanism_propertiesフィールドに SERVICE_REALM、SERVICE_NAME、SERVICE_HOST のプロパティを設定することで、認証メカニズムのプロパティを指定できます。
この例では、次のプレースホルダーを使用して認証メカニズムを指定します。
<username>: URLエンコードされたプリンシパル名<password>: Kerberos パスワード
let gssapi_cred = Credential::builder() .username("<username>".to_string()) .password("<password>".to_string()) .mechanism(AuthMechanism::Gssapi) .mechanism_properties( doc! { "SERVICE_REALM": "<service_realm>", "SERVICE_NAME": "<service_name>", "SERVICE_HOST": "<service_host>" } ) .build(); client_options.credential = Some(gssapi_cred); let client = Client::with_options(client_options)?;
GSSAPI (Kerberos)の詳細については、サーバー マニュアルのKerberos 認証を参照してください。
詳細情報
このガイドの概念の詳細については、次のドキュメントを参照してください。
LDAP プロキシ認証の MongoDB Server サポート (サーバー マニュアルの参照)
接続オプションガイド
接続文字列(サーバー マニュアルを参照してください)
API ドキュメント
このガイドで言及されているメソッドとタイプの詳細については、次のAPIドキュメントを参照してください。