Docs Menu
Docs Home
/ / /
PyMongo
/

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

項目一覧

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

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

ジェネリック セキュリティ サービス 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)

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 認証メカニズムでは、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 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接続オプションを省略できます。

アプリケーションが 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 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 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 ドキュメントを参照してください。

戻る

認証