Docs Menu

Docs Homeアプリケーションの開発Python ドライバーPyMongo

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

項目一覧

  • Overview
  • Kerberos
  • PLAIN SASL
  • MONGODB-OIDC
  • Azure IMDS
  • GCP IMDS
  • その他の Azure 環境
  • GCP GKE
  • API ドキュメント

MongoDB Enterprise Edition には、MongoDB Community Edition では使用できない認証メカニズムが含まれています。 このガイドでは、これらの認証メカニズムを使用して MongoDB を認証する方法を学習できます。 MongoDB で利用可能なその他の認証メカニズムの詳細については、「認証メカニズム 」を参照してください。

ジェネリック セキュリティ サービス API(GSSAPI) は、Kerberos 認証のインターフェースを提供します。 Kerberos を使用して認証する方法については、オペレーティング システムに対応するタブを選択してください。

PLAIN 簡易認証とセキュリティ層(SASL)、 RFC4616 によって定義 は、TLS または別の暗号化レイヤーでよく使用されるユーザー名とパスワードの認証メカニズムです。

重要

PLAIN SASL は、クリアテキストの認証メカニズムです。 PLAIN SASL を使用して MongoDB に認証する場合は、証明書検証で TLS/SSL を使用することを強くお勧めします。

接続で TLS を有効にする方法の詳細については、「トランスポート層セキュリティ(TLS)の構成 」を参照してください。

SASL で認証するには、 authMechanism接続オプションをPLAINに設定します。 このオプションは、MongoClient コンストラクターに引数を渡す方法と、 接続stringのパラメーターを使用する方法の 2 通りがあります。

重要

MONGODB-OIDC 認証メカニズムでは、Linux プラットフォーム上で MongoDB v 7.0以降を実行する必要があります。

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

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

MONGODB-OIDC 認証メカニズムの詳細については、 MongoDB Serverマニュアルの「 OpenID Connect 認証 」を参照してください。

アプリケーションが Azure VM 上で実行され、 や Azure インスタンス メタデータ サービス が使用される場合 (MDS)に設定されている場合は、PyMongo に組み込まれている Azure サポートを使用して MongoDB に認証できます。

Azure IMDS 用の OIDC は、MongoClient コンストラクターに引数を渡す方法と、 接続stringのパラメーターを使用する方法の 2 通りがあります。

Tip

アプリケーションが Azure VM で実行されており、VM に関連付けられている管理対象 ID が 1 つだけの場合は、 username接続オプションを省略できます。

アプリケーションが GCP VM 上で実行されている場合、 または GCP インスタンス メタデータ サービス を使用している場合 、PyMongo に組み込まれている GCP サポートを使用して MongoDB に認証できます。

GCP IMDS 用の OIDC は、MongoClient コンストラクターに引数を渡す方法と、 接続stringのパラメーターを使用する方法の 2 通りがあります。

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

PyMongo でエンタープライズ認証メカニズムを使用する方法の詳細については、次の API ドキュメントを参照してください。

← 認証メカニズム