Overview
重要
MONGODB-OIDC 認証メカニズムでは、Linux プラットフォーム上で MongoDB Server v 7.0以降を実行する必要があります。
Rustドライバーは、ワークロードID の OpenID Connect( OIDC )認証をサポートしています。ワークロードID は、他のサービスとリソースを認証してアクセスするために、アプリケーション、 サービス、スクリプト、コンテナなどの ソフトウェア ワークワークロードに割り当てる ID です。
このメカニズムは、 MongoDB AtlasまたはMongoDB Enterprise Advancedに認証する場合にしか使用できません。
MONGODB-OIDC認証メカニズムの詳細については、 MongoDB Serverマニュアルの「OpenID Connect 認証とMongoDB Serverパラメーター」を参照してください。
次のセクションでは、MONGODB-OIDC 認証メカニズムを使用してさまざまなプラットフォームに認証する方法について説明します。
Azure IMDS
アプリケーションがAzure VM 上で実行されている場合、またはAzure インスタンス メタデータ Service ( IMDS)を使用している場合は、 Rustドライバーに組み込まれているAzureサポートを使用してMongoDBを認証できます。
Azure IMDS 用の OIDC を構成するには、Credential 構造体の mechanismフィールドをAuthMechanism::MongoDbOidc に設定します。また、Credential 構造体には次の値を指定する必要があります。
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?;
詳細情報
このガイドの概念の詳細については、次のドキュメントを参照してください。
接続オプションの指定ガイド
接続文字列(サーバー マニュアルを参照してください)
API ドキュメント
このガイドで言及されているメソッドとタイプの詳細については、次のAPIドキュメントを参照してください。