Docs Home → アプリケーションの開発 → Python ドライバー → PyMongo
エンタープライズ認証メカニズム
Overview
MongoDB Enterprise Edition には、MongoDB Community Edition では使用できない認証メカニズムが含まれています。 このガイドでは、これらの認証メカニズムを使用して MongoDB を認証する方法を学習できます。 MongoDB で利用可能なその他の認証メカニズムの詳細については、「認証メカニズム 」を参照してください。
Kerberos
ジェネリック セキュリティ サービス API(GSSAPI) は、Kerberos 認証のインターフェースを提供します。 Kerberos を使用して認証する方法については、オペレーティング システムに対応するタブを選択してください。
PLAIN SASL
PLAIN 簡易認証とセキュリティ層(SASL)、 RFC4616 によって定義 は、TLS または別の暗号化レイヤーでよく使用されるユーザー名とパスワードの認証メカニズムです。
重要
PLAIN SASL は、クリアテキストの認証メカニズムです。 PLAIN SASL を使用して MongoDB に認証する場合は、証明書検証で TLS/SSL を使用することを強くお勧めします。
接続で TLS を有効にする方法の詳細については、「トランスポート層セキュリティ(TLS)の構成 」を参照してください。
SASL で認証するには、 authMechanism
接続オプションをPLAIN
に設定します。 このオプションは、MongoClient
コンストラクターに引数を渡す方法と、 接続stringのパラメーターを使用する方法の 2 通りがあります。
MONGODB-OIDC
重要
MONGODB-OIDC 認証メカニズムでは、Linux プラットフォーム上で MongoDB v 7.0以降を実行する必要があります。
PyMongo はワークロード IDの OIDC 認証をサポートしています。 ワークロード ID は、他のサービスとリソースを認証してアクセスするために、アプリケーション、サービス、スクリプト、またはコンテナなどのソフトウェア ワークロードに割り当てる ID です。
次のセクションでは、MONGODB-OIDC 認証メカニズムを使用してさまざまなプラットフォームに認証する方法について説明します。
MONGODB-OIDC 認証メカニズムの詳細については、 MongoDB Serverマニュアルの「 OpenID Connect 認証 」を参照してください。
Azure IMDS
アプリケーションが Azure VM 上で実行され、 や Azure インスタンス メタデータ サービス が使用される場合 (MDS)に設定されている場合は、PyMongo に組み込まれている Azure サポートを使用して MongoDB に認証できます。
Azure IMDS 用の OIDC は、MongoClient
コンストラクターに引数を渡す方法と、 接続stringのパラメーターを使用する方法の 2 通りがあります。
Tip
アプリケーションが Azure VM で実行されており、VM に関連付けられている管理対象 ID が 1 つだけの場合は、 username
接続オプションを省略できます。
GCP IMDS
アプリケーションが GCP VM 上で実行されている場合、 または GCP インスタンス メタデータ サービス を使用している場合 、PyMongo に組み込まれている GCP サポートを使用して MongoDB に認証できます。
GCP IMDS 用の OIDC は、MongoClient
コンストラクターに引数を渡す方法と、 接続stringのパラメーターを使用する方法の 2 通りがあります。
その他の Azure 環境
アプリケーションが Azure Functions、App Service environment(ASE)、または Azure Kubernetes Service(AKS)で実行される場合は、Azure -ID を使用できます 認証資格情報を取得するためのパッケージ。
まず、次の例に示すように、 pip を使用してazure-identity
ライブラリをインストールします。
python3 -m pip install azure-identity
次に、 OIDCCallback
クラスから継承する クラスを定義します。 このクラスでは、OIDC トークンをOIDCCallbackResult
オブジェクトの形式で返すfetch()
メソッドを実装する必要があります。
次の例は、 MyCallback
という名前のコールバック クラスを定義する方法を示しています。 このクラスには、標準のサービス アカウント トークン ファイルの場所内のファイルから OIDC トークンを検索するfetch()
メソッドが含まれています。
audience = "<audience configured on the MongoDB deployment>" client_id = "<Azure client ID>" class MyCallback(OIDCCallback): def fetch(self, context: OIDCCallbackContext) -> OIDCCallbackResult: credential = DefaultAzureCredential(managed_identity_client_id=client_id) token = credential.get_token(f"{audience}/.default").token return OIDCCallbackResult(access_token=token)
コールバック クラスを定義したら、カスタム コールバック クラスのインスタンスである 1 つのキー"OIDC_CALLBACK"
を含む Python 辞書を作成します。
properties = {"OIDC_CALLBACK": MyCallback()}
最後に、 MongoClient
コンストラクターに引数を渡して、次の接続オプションを設定します。
authMechanism
:"MONGODB-OIDC"
に設定します。authMechanismProperties
: 前のステップで作成したproperties
辞書に設定します。
from pymongo import MongoClient from azure.identity import DefaultAzureCredential from pymongo.auth_oidc import OIDCCallback, OIDCCallbackContext, OIDCCallbackResult # define callback, properties, and MongoClient audience = "<audience configured on the MongoDB deployment>" client_id = "<Azure client ID>" class MyCallback(OIDCCallback): def fetch(self, context: OIDCCallbackContext) -> OIDCCallbackResult: credential = DefaultAzureCredential(managed_identity_client_id=client_id) token = credential.get_token(f"{audience}/.default").token return OIDCCallbackResult(access_token=token) properties = {"OIDC_CALLBACK": MyCallback()} client = MongoClient( "mongodb://<hostname>:<port>", authMechanism="MONGODB-OIDC", authMechanismProperties=properties )
GCP GKE
アプリケーションが、 構成されたサービス アカウント を持つ GCP Google Kubernetes Engine(GKE)クラスターで実行されている場合 に設定されている場合、標準のサービス アカウント トークンファイルの場所から OIDC トークンを読み込むことができます。
まず、 OIDCCallback
クラスから継承するクラスを定義します。 このクラスでは、OIDC トークンをOIDCCallbackResult
オブジェクトの形式で返すfetch()
メソッドを実装する必要があります。
次の例は、 MyCallback
という名前のコールバック クラスを定義する方法を示しています。 このクラスには、標準のサービス アカウント トークン ファイルの場所内のファイルから OIDC トークンを検索するfetch()
メソッドが含まれています。
class MyCallback(OIDCCallback): def fetch(self, context: OIDCCallbackContext) -> OIDCCallbackResult: with open("/var/run/secrets/kubernetes.io/serviceaccount/token") as fid: token = fid.read() return OIDCCallbackResult(access_token=token)
コールバック クラスを定義したら、カスタム コールバック クラスのインスタンスである 1 つのキー"OIDC_CALLBACK"
を含む Python 辞書を作成します。
properties = {"OIDC_CALLBACK": MyCallback()}
最後に、 MongoClient
コンストラクターに引数を渡して、次の接続オプションを設定します。
authMechanism
:"MONGODB-OIDC"
に設定します。authMechanismProperties
: 前のステップで作成したproperties
辞書に設定します。
from pymongo import MongoClient from pymongo.auth_oidc import OIDCCallback, OIDCCallbackContext, OIDCCallbackResult # define callback, properties, and MongoClient class MyCallback(OIDCCallback): def fetch(self, context: OIDCCallbackContext) -> OIDCCallbackResult: with open("/var/run/secrets/kubernetes.io/serviceaccount/token") as fid: token = fid.read() return OIDCCallbackResult(access_token=token) properties = {"OIDC_CALLBACK": MyCallback()} client = MongoClient( "mongodb://<hostname>:<port>", authMechanism="MONGODB-OIDC", authMechanismProperties=properties )
API ドキュメント
PyMongo でエンタープライズ認証メカニズムを使用する方法の詳細については、次の API ドキュメントを参照してください。