エンタープライズ認証メカニズム
Overview
MongoDB Enterprise Edition includes authentication mechanisms that aren't available in MongoDB Community Edition. このガイドでは、これらの認証メカニズムを使用して MongoDB を認証する方法を学習できます。 MongoDB で利用可能なその他の認証メカニズムについて詳しくは、「 認証メカニズム 」を参照してください。
Kerberos
ジェネリック セキュリティ サービス API(GSSAPI) は、Kerberos 認証のインターフェースを提供します。 Kerberos を使用して認証する方法については、オペレーティング システムに対応するタブを選択してください。
まず、 pip または簡単なインストールを使用してPythonPythonKerberos Kerberos または pykerberos モジュールをインストールします。
これらのモジュールの 1 つをインストールしたら、 kinit
コマンドを実行して初期チケット付与チケットを取得してキャッシュします。 次の例では、 knit
コマンドを使用して、プリンシパルmongodbuser@EXAMPLE.COM
のチケット発行チケットを取得します。 次に、 klist
コマンドを使用して、認証情報キャッシュにプリンシパルとチケットを表示します。
kinit mongodbuser@EXAMPLE.COM mongodbuser@EXAMPLE.COM's Password: klist Credentials cache: FILE:/tmp/krb5cc_1000 Principal: mongodbuser@EXAMPLE.COM Issued Expires Principal Feb 9 13:48:51 2013 Feb 9 23:48:51 2013 krbtgt/mongodbuser@EXAMPLE.COM
チケット発行チケットを取得したら、次の接続オプションを設定します。
username
: 認証する Kerbos プリンシパル。 接続 URI に含める前に、この値をパーセント エンコードします。authMechanism
:"GSSAPI"
に設定します。authMechanismProperties
: 任意。 デフォルトでは、MongoDB では認証サービス名としてmongodb
が使用されます。 別のサービス名を指定するには、このオプションを"SERVICE_NAME:<authentication service name>"
に設定します。
これらのオプションは、MongoClient
コンストラクターに引数を渡す方法と、 接続stringのパラメーターを使用する方法の 2 通りがあります。
注意
authMechanismProperties
値にカンマが含まれている場合は、認証オプションを設定するためにMongoClient
コンストラクタを使用する必要があります。
client = pymongo.MongoClient("mongodb://<hostname>:<port>", username="mongodbuser@EXAMPLE.COM", authMechanism="GSSAPI", authMechanismProperties="SERVICE_NAME:<authentication service name>")
uri = ("mongodb://mongodbuser%40EXAMPLE.COM@<hostname>:<port>/?" "&authMechanism=GSSAPI" "&authMechanismProperties=SERVICE_NAME:<authentication service name>") client = pymongo.MongoClient(uri)
まず、 winerberos をインストールします モジュール。次に、次の接続オプションを設定します。
username
: 認証する Kerbos プリンシパル。 接続 URI に含める前に、この値をパーセント エンコードします。authMechanism
:"GSSAPI"
に設定します。password
: 任意。 認証するユーザーがアプリケーション プロセスを所有するユーザーと異なる場合は、このオプションを認証ユーザーのパスワードに設定します。authMechanismProperties
: 任意。 このオプションには複数の認証プロパティが含まれます。 次のプロパティを複数指定するには、カンマ区切りのリストを使用します。SERVICE_NAME:
デフォルトでは、MongoDB では認証サービス名としてmongodb
が使用されます。 別のサービス名を指定するには、このオプションを使用します。CANONICALIZE_HOST_NAME
: サーバーのプリンシパルに MongoDB ホストの完全修飾ドメイン名(FQDN)を使用するかどうか。SERVICE_REALM
: サービス邦土。 ユーザーの Realm とサービスの Realm が異なる場合は、このオプションを使用します。
これらのオプションは、MongoClient
コンストラクターに引数を渡す方法と、 接続stringのパラメーターを使用する方法の 2 通りがあります。
client = pymongo.MongoClient("mongodb://<hostname>:<port>", username="mongodbuser@EXAMPLE.COM", authMechanism="GSSAPI", password="<user password>", authMechanismProperties="SERVICE_NAME:<authentication service name>, CANONICALIZE_HOST_NAME:true, SERVICE_REALM:<service realm>")
uri = ("mongodb://mongodbuser%40EXAMPLE.COM:<percent-encoded user password>" "@<hostname>:<port>/?" "&authMechanism=GSSAPI" "&authMechanismProperties=" "SERVICE_NAME:<authentication service name>," "CANONICALIZE_HOST_NAME:true," "SERVICE_REALM:<service realm>") client = pymongo.MongoClient(uri)
PLAIN SASL
RFC4616 で定義されている PLAIN 簡易認証とセキュリティ層(SASL) は、TLS または別の暗号化レイヤーでよく使用されるユーザー名とパスワードの認証メカニズムです。
重要
PLAIN SASL は、クリアテキストの認証メカニズムです。 PLAIN SASL を使用して MongoDB に認証する場合は、証明書検証で TLS/SSL を使用することを強くお勧めします。
接続で TLS を有効にする方法の詳細については、「トランスポート層セキュリティ(TLS)の構成 」を参照してください。
SASL で認証するには、 authMechanism
接続オプションをPLAIN
に設定します。 このオプションは、MongoClient
コンストラクターに引数を渡す方法と、 接続stringのパラメーターを使用する方法の 2 通りがあります。
注意
authMechanismProperties
値にカンマが含まれている場合は、認証オプションを設定するためにMongoClient
コンストラクタを使用する必要があります。
client = pymongo.MongoClient("mongodb://<hostname>:<port>", username="<db_username>", password="<db_password>", authMechanism="PLAIN", tls=True)
uri = ("mongodb://<db_username>:<db_password>@<hostname>:<port>/?" "&authMechanism=PLAIN" "&tls=true") client = pymongo.MongoClient(uri)
MONGODB-OIDC
重要
MONGODB-OIDC 認証メカニズムでは、Linux プラットフォーム上で MongoDB Server v 7.0以降を実行する必要があります。
PyMongo はワークロード IDの OIDC 認証をサポートしています。 ワークロード ID は、他のサービスとリソースを認証してアクセスするために、アプリケーション、サービス、スクリプト、またはコンテナなどのソフトウェア ワークロードに割り当てる ID です。
次のセクションでは、MONGODB-OIDC 認証メカニズムを使用してさまざまなプラットフォームに認証する方法について説明します。
MONGODB-OIDC 認証メカニズムの詳細については、 MongoDB ServerMongoDB Serverマニュアルの 「 OpenID Connect 認証 」 と 「 パラメーター 」 を参照してください。
注意
Python の標準ライブラリは非同期 HTTP リクエストをサポートしていないため、PyMongo からのすべての OIDC リクエストは同期され、 asyncio
ループをブロックします。
Azure IMDS
アプリケーションが Azure VM 上で実行され、 や Azure インスタンス メタデータ サービス が使用される場合 (MDS)に設定されている場合は、PyMongo に組み込まれている Azure サポートを使用して MongoDB に認証できます。
Azure IMDS 用の OIDC は、MongoClient
コンストラクターに引数を渡す方法と、 接続stringのパラメーターを使用する方法の 2 通りがあります。
注意
authMechanismProperties
値にカンマが含まれている場合は、認証オプションを設定するためにMongoClient
コンストラクタを使用する必要があります。
まず、次の例に示すように、認証メカニズム プロパティ用の Python 辞書を作成します。 <audience>
プレースホルダーを、MongoDB 配置に設定されたaudience
パラメータの値に置き換えます。
次のコード例は、 接続stringでこれらのオプションを設定する方法を示しています。
properties = {"ENVIRONMENT": "azure", "TOKEN_RESOURCE": "<audience>"}
次に、次の接続オプションを設定します。
username
: Azure マネージド ID を使用している場合は、管理対象 ID のクライアント ID にこれを設定します。 サービス プリンシパル を使用してエンタープライズ アプリケーションを表す場合は、これをサービス プリンシパルのアプリケーション ID に設定します。authMechanism
:"MONGODB-OIDC"
に設定します。authMechanismProperties
: 前のステップで作成したproperties
辞書に設定します。
次のコード例は、 MongoClient
の作成時にこれらのオプションを設定する方法を示しています。
from pymongo import MongoClient # define properties and MongoClient properties = {"ENVIRONMENT": "azure", "TOKEN_RESOURCE": "<audience>"} client = MongoClient( "mongodb://<hostname>:<port>", username="<Azure client ID or application ID>", authMechanism="MONGODB-OIDC", authMechanismProperties=properties )
接続stringに次の接続オプションを含めます。
username
: Azure マネージド ID を使用している場合は、管理対象 ID のクライアント ID にこれを設定します。 サービス プリンシパル を使用してエンタープライズ アプリケーションを表す場合は、これをサービス プリンシパルのアプリケーション ID に設定します。authMechanism
:MONGODB-OIDC
に設定します。authMechanismProperties
:ENVIRONMENT:azure,TOKEN_RESOURCE:<audience>
に設定します。<audience>
プレースホルダーを、MongoDB 配置に設定されたaudience
パラメータの値に置き換えます。次のコード例は、 接続stringでこれらのオプションを設定する方法を示しています。
from pymongo import MongoClient # define URI and MongoClient uri = ("mongodb://<hostname>:<port>/?" "username=<Azure client ID or application ID>" "&authMechanism=MONGODB-OIDC" "&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:<percent-encoded audience>") client = MongoClient(uri)
Tip
アプリケーションが Azure VM で実行されており、VM に関連付けられている管理対象 ID が 1 つだけの場合は、 username
接続オプションを省略できます。
GCP IMDS
アプリケーションが Google Compute Engine VM で実行され、または GCP インスタンス メタデータ サービス を使用している場合 、PyMongo に組み込まれている GCP サポートを使用して MongoDB に認証できます。
GCP IMDS 用の OIDC は、MongoClient
コンストラクターに引数を渡す方法と、 接続stringのパラメーターを使用する方法の 2 通りがあります。
注意
authMechanismProperties
値にカンマが含まれている場合は、認証オプションを設定するためにMongoClient
コンストラクタを使用する必要があります。
まず、次の例に示すように、認証メカニズム プロパティ用の Python 辞書を作成します。 <audience>
プレースホルダーを、MongoDB 配置に設定されたaudience
パラメータの値に置き換えます。
properties = {"ENVIRONMENT": "gcp", "TOKEN_RESOURCE": "<audience>"}
次に、次の接続オプションを設定します。
authMechanism
:"MONGODB-OIDC"
に設定します。authMechanismProperties
: 前のステップで作成したproperties
辞書に設定します。
次のコード例は、 MongoClient
の作成時にこれらのオプションを設定する方法を示しています。
from pymongo import MongoClient # define properties and MongoClient properties = {"ENVIRONMENT": "gcp", "TOKEN_RESOURCE": "<audience>"} client = MongoClient( "mongodb://<hostname>:<port>", authMechanism="MONGODB-OIDC", authMechanismProperties=properties )
接続stringに次の接続オプションを含めます。
authMechanism
:MONGODB-OIDC
に設定します。authMechanismProperties
:ENVIRONMENT:gcp,TOKEN_RESOURCE:<audience>
に設定します。<audience>
プレースホルダーを、MongoDB 配置に設定されたaudience
パラメータの値に置き換えます。
次のコード例は、 接続stringでこれらのオプションを設定する方法を示しています。
from pymongo import MongoClient # define URI and MongoClient uri = ("mongodb://<hostname>:<port>/?" "&authMechanism=MONGODB-OIDC" "&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:<percent-encoded audience>") client = MongoClient(uri)
その他の 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>" 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>" 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 ドキュメントを参照してください。