Docs Menu
Docs Home
/ / /
Rust ドライバー
/

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

項目一覧

  • Overview
  • LDAP(PLAIN)への認証
  • MONGODB-OIDC
  • Azure IMDS
  • GCP IMDS
  • カスタム コールバック
  • 詳細情報
  • API ドキュメント

このガイドでは、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(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 認証メカニズムでは、Linux プラットフォーム上で MongoDB Server v 7.0以降を実行する必要があります。

Rustドライバーは、ワークロードID の OpenID Connect( OIDC )認証をサポートしています。ワークロードID は、他のサービスとリソースを認証してアクセスするために、アプリケーション、 サービス、スクリプト、コンテナなどの ソフトウェアワークロードに割り当てる ID です。

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

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

アプリケーションが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?;

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

  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ドキュメントを参照してください。

戻る

認証