Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

OIDC (ワークロード IdP)

重要

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 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?;

アプリケーションが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クラスターで実行される場合は、 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ドライバーは、次のプロセスでコールバックを使用します。

  1. ドライバーは、指定されたユーザー名の ID プロバイダー情報(IDPInfo)を検索します。

  2. コールバックは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ドキュメントを参照してください。

戻る

AWS IAM

項目一覧