エンタープライズ認証メカニズム
項目一覧
Overview
このガイドでは、MongoDB Enterprise Edition でのみ使用可能な MongoDB で認証する方法を学習できます。 認証メカニズムは、ドライバーとサーバーが接続前にクライアントの ID を確認し、セキュリティを確保するためのプロセスです。
MongoDB Enterprise Edition の最新バージョンでは、次の認証メカニズムを使用できます。
別のメカニズムを使用して認証するには、 認証メカニズムの基礎ページを参照してください。 MongoDB クラスターへの接続を確立する方法の詳細については、接続ガイド を参照してください。
次のいずれかの方法を使用して、MongoDB に接続するときに認証メカニズムと認証情報を指定できます。
接続string ( 接続 URI とも呼ばれます)は、string MongoDB配置に接続する方法と接続中の動作をドライバーに指示する です。
サポートされている認証メカニズムのファクトリー メソッドで、
MongoCredential
クラスに含まれています。
GSSAPI/Kerberos による認証
ジェネリック セキュリティ サービス API(GSSAPI)認証メカニズムにより、ユーザーはユーザーのプリンシパル名を使用して Kerberos サービスで認証できます。
次の例では、次のプレースホルダーを使用して認証メカニズムを指定します。
<username>
: URLでエンコードされた プリンシパル名。 (例:ユーザー名%40 REALM.ME)<password>
: Kerberos ユーザーのパスワード<hostname>
: クライアントからアクセス可能な MongoDB サーバーのネットワーク アドレス
GSSAPI / Kerberos 認証メカニズムを指定するための対応する構文を確認するには、 タブまたは タブを選択します。Connection StringMongoCredential
var mongoClient = new MongoClient("mongodb://<username>:<password>@<hostname>/?authMechanism=GSSAPI");
var credential = MongoCredential.CreateGssapiCredential("<username>", "<password>"); var settings = MongoClientSettings.FromConnectionString("<connection string>"); settings.Credential = credential; var mongoClient = new MongoClient(settings);
Tip
パスワードの省略
次のいずれかに当てはまる場合は、パスワードを省略できます。
Windows では、アプリケーションを実行しているプロセス所有者は、認証を必要とするユーザーと同じです。
Linux では、ユーザーは
kinit username@REALM.COM
経由でキータブを初期化しました。
additionalProperties
接続stringまたは MongoCredential
クラスのファクトリー メソッドを使用して、認証メカニズムに追加のプロパティを指定できます。
完全修飾ドメイン名
次の例は、DNS サーバーを使用してホストの完全修飾ドメイン名を検索する方法を示しています。
var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>/?authMechanism=GSSAPI&authMechanismProperties=CANONICALIZE_HOSTNAME:true");
var credential = MongoCredential.CreateGssapiCredential("<db_username>", "<db_passwordpassword>"); credential = credential.WithMechanismProperty("CANONICALIZE_HOST_NAME", "true"); var settings = MongoClientSettings.FromConnectionString("<connection string>"); settings.Credential = credential; var mongoClient = new MongoClient(settings);
Realm
次の例は、サービスの Realm と異なる場合にユーザーの Realm を指定する方法を示しています。
var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>/?authMechanism=GSSAPI&authMechanismProperties=SERVICE_REALM:<user's realm>");
var credential = MongoCredential.CreateGssapiCredential("<db_username>", "<db_password>"); credential = credential.WithMechanismProperty("SERVICE_REALM", "<user's realm>"); var settings = MongoClientSettings.FromConnectionString("<connection string>"); settings.Credential = credential; var mongoClient = new MongoClient(settings);
サービス名
次の例えは、デフォルトのmongodb
でない場合にサービス名を指定する方法を示しています。
var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>/?authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:<service name>");
var credential = MongoCredential.CreateGssapiCredential("<db_username>", "<db_password>"); credential = credential.WithMechanismProperty("SERVICE_NAME", "<service name>"); var settings = MongoClientSettings.FromConnectionString("<connection string>"); settings.Credential = credential; var mongoClient = new MongoClient(settings);
複数のプロパティ
次の例は、複数の認証メカニズム プロパティを指定する方法を示しています。
var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>/?authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:<service name>,SERVICE_REALM:<user's realm>");
var credential = MongoCredential.CreateGssapiCredential("<db_username>", "<db_password>"); credential = credential.WithMechanismProperty("SERVICE_REALM", "<user's realm>") .WithMechanismProperty("SERVICE_NAME", "<service name>"); var settings = MongoClientSettings.FromConnectionString("<connection string>"); settings.Credential = credential; var mongoClient = new MongoClient(settings);
LDAP による認証(PLAIN)
ディレクトリ サーバーのユーザー名とパスワードを使用して、LDAP(Lightweight Directory Access Protocol)サーバーで認証できます。
次の例では、次のプレースホルダーを使用して認証メカニズムを指定します。
<username>
: LDAP ユーザー名<password>
: LDAP パスワード<hostname>
: クライアントからアクセス可能な MongoDB サーバーのネットワーク アドレス<authenticationDb>
: ユーザーの認証を含む MongoDB database
LDAP 認証メカニズムを指定するための対応する構文を確認するには、 Connection StringタブまたはMongoCredentialタブを選択します。
var mongoClient = new MongoClient("mongodb://<username>:<password>@<hostname>/?authSource=<authenticationDb>&authMechanism=PLAIN");
var credential = MongoCredential.CreatePlainCredential("<authenticationDb>", "<username>", "<password>"); var settings = MongoClientSettings.FromConnectionString("<connection string>"); settings.Credential = credential; var mongoClient = new MongoClient(settings);
MONGODB-OIDC
重要
MONGODB-OIDC 認証メカニズムでは、Linux プラットフォーム上で MongoDB Server v 7.0以降を実行する必要があります。
次のセクションでは、MONGODB-OIDC 認証メカニズムを使用してさまざまなプラットフォームから認証する方法について説明します。
MONGODB-OIDC 認証メカニズムの詳細については、 MongoDB ServerMongoDB Serverマニュアルの 「 OpenID Connect 認証 」 と 「 パラメーター 」 を参照してください。
Azure IMDS
アプリケーションが Azure VM 上で実行され、 や Azure インスタンス メタデータ サービス が使用される場合 (MDS)に設定されている場合は、.NET/C# ドライバーに組み込まれている Azure サポートを使用して MongoDB を認証できます。
Azure IMDS OIDC 認証は、MongoCredential
オブジェクトを使用するか、 接続stringの一部として使用することで、MongoClientSettings
オブジェクトで指定できます。 Connection StringMongoCredential対応する構文を確認するには、 タブまたは タブを選択します。
次のコード例は、Azure IMDS OIDC 認証を指定する方法を示しています。 <percent-encoded audience>
プレースホルダーを、MongoDB 配置に設定されたaudience
パラメータのパーセント エンコードされた値に置き換えます。
カンマ( ,
)文字を含む値はauthMechanismProperties
オプションに渡すことはできません。 MongoCredentialタブに示されているように、 MongoCredential
オブジェクトにカンマを含む値を指定する必要があります。
var connectionString = "mongodb://<db_username>@<hostname>[:<port>]/?" + "authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:<percent-encoded audience>"); var mongoClientSettings = MongoClientSettings.FromConnectionString(connectionString); var client = new MongoClient(mongoClientSettings);
次のコード例は、Azure IMDS OIDC 認証を指定する方法を示しています。 <db_username>
プレースホルダーを、Azure が管理する IdP またはエンタープライズ アプリケーションのクライアント ID またはアプリケーション ID に置き換えます。 <audience>
プレースホルダーを、MongoDB 配置に設定されたaudience
パラメータの値に置き換えます。
var mongoClientSettings = MongoClientSettings.FromConnectionString( "mongodb+srv://<hostname>[:<port>]"); mongoClientSettings.Credential = MongoCredential.CreateOidcCredential("azure", "<db_username>") .WithMechanismProperty("TOKEN_RESOURCE", "<audience>"); var client = new MongoClient(mongoClientSettings);
GCP IMDS
アプリケーションが Google Compute Engine VM で実行され、または GCP インスタンス メタデータ サービス を使用している場合 、.NET/C# ドライバーに組み込まれている GCP サポートを使用して MongoDB に認証できます。
MongoClientSettings
オブジェクトでGCP IMDS OIDC 認証を指定するには、MongoCredential
オブジェクトを使用するか、 接続stringの一部として使用します。 Connection StringMongoCredential対応する構文を確認するには、 タブまたは タブを選択します。
次のコード例は、認証GCP の一部として IMDS OIDCstring 認証を指定する方法を示しています。<audience>
プレースホルダーを、MongoDB 配置に設定されたaudience
パラメータの値に置き換えます。
カンマ( ,
)文字を含む値はauthMechanismProperties
オプションに渡すことはできません。 MongoCredentialタブに示されているように、 MongoCredential
オブジェクトにカンマを含む値を指定する必要があります。
var connectionString = "mongodb://<hostname>[:<port>]/?" + "authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:<audience>"); var mongoClientSettings = MongoClientSettings.FromConnectionString(connectionString); var client = new MongoClient(mongoClientSettings);
次のコード例は、 MongoCredential
オブジェクトを使用して GCP IMDS OIDC 認証を指定する方法を示しています。 <audience>
プレースホルダーを、MongoDB 配置に設定されたaudience
パラメータの値に置き換えます。
var mongoClientSettings = MongoClientSettings.FromConnectionString( "mongodb+srv://<hostname>[:<port>]"); mongoClientSettings.Credential = MongoCredential.CreateOidcCredential("gcp") .WithMechanismProperty("TOKEN_RESOURCE", "<audience>"); var client = new MongoClient(mongoClientSettings);
カスタム コールバック
.NET/C# ドライバーは、Azure Functions や Azure Kubernetes Service(AKS)を含むすべてのプラットフォームの組み込みサポートを提供していません。 代わりに、OIDC を使用してこれらのプラットフォームから認証するためのカスタム コールバックを定義する必要があります。
まず、 IOidcCallback
インターフェースを実装するクラスを定義します。 このインターフェースには 2 つのメソッドが含まれています。
GetOidcAccessToken()
: このメソッドは、コールバック メソッドへのパラメータを受け入れ、コールバック応答を返します。GetOidcAccessTokenAsync()
: このメソッドは、前のメソッドの非同期バージョンです。
次のコードは、 IOidcCallback
インターフェースの実装例です。 この例では、メソッドはローカル ファイル システム内の"access-token.dat"
という名前のファイルから OIDC トークンを検索します。
public class MyCallback : IOidcCallback { public OidcAccessToken GetOidcAccessToken( OidcCallbackParameters parameters, CancellationToken cancellationToken) { var accessToken = File.ReadAllText("access-token.dat"); return new(accessToken, expiresIn: null); } public async Task<OidcAccessToken> GetOidcAccessTokenAsync( OidcCallbackParameters parameters, CancellationToken cancellationToken) { var accessToken = await File.ReadAllTextAsync( "access-token.dat", cancellationToken) .ConfigureAwait(false); return new(accessToken, expiresIn: null); } }
カスタム コールバック メソッドを含むクラスを定義したら、 MongoCredential.CreateOidcCredential()
メソッドを呼び出し、クラスの新しいインスタンスを渡します。 次のコード例に示すように、このメソッド呼び出しの結果をMongoClientSettings
オブジェクトのCredential
プロパティに保存します。
var mongoClientSettings = MongoClientSettings.FromConnectionString("mongodb://<hostname>[:port]"); mongoClientSettings.Credential = MongoCredential.CreateOidcCredential(new MyCallback()); var client = new MongoClient(mongoClientSettings);
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。