Docs Menu
Docs Home
/ / /
Pymongo ドライバー
/ /

OIDC (ワークロード IdP)

OpenID Connect(OIDC)認証メカニズムを使用すると、 AzureやGoogle Cloud Platform (GCP )などのサードパーティのIdPを使用してMongoDBに認証できます。

このメカニズムは、 MongoDB AtlasまたはMongoDB Enterprise Advancedに認証されている場合、およびMongoDB v7.0 以降に認証されている場合にのみ使用できます。

Tip

OIDC 認証

MongoDB Atlas をOIDC認証用に構成する方法の詳細については、Atlas ドキュメントの「OIDC を使用した Workforce IdP の設定」を参照してください。

MongoDBで OIDC認証を使用する方法の詳細については、 MongoDB Serverマニュアルの 「OpenID Connect 認証」 と「MongoDB Serverパラメーター」 を参照してください。

このページのコード例では、次のプレースホルダーを使用します。

  • +srv: MongoDB Atlasクラスターに接続している場合にのみ、このオプションを接続文字列のプレフィックスに含めます。 +srvオプションの詳細については、 MongoDB Serverマニュアルの「 接続文字列の形式 」を参照してください。

  • <Azure ID>: Azure IMDS で認証する場合のAzureマネージド ID または エンタープライズアプリケーションのクライアントIDまたはアプリケーションID 。

  • <hostname>: MongoDBデプロイのネットワーク アドレス。

  • <port>: MongoDBデプロイのポート番号。 このパラメーターを省略すると、ドライバーはデフォルトのポート番号(27017)を使用します。 MongoDB Atlasクラスターに接続するときにポートを指定する必要はありません。

  • <audience>: MongoDBデプロイで構成された audience パラメータの値。

このページのコード例を使用するには、これらのプレースホルダーを独自の値に置き換えます。

重要

パーセント エンコーディング

ユーザー名とパスワードは、 MongoDB URI に含める前に、パーセント エンコードする必要があります。urllib.parse モジュールで使用可能な quote_plus()メソッドは、このタスクを実行する 1 つの方法です 。例、quote_plus("and / or") を呼び出すと string and+%2F+or が返されます。

ユーザー名またはパスワードをMongoClientに引数として渡す場合は、これらをパーセント エンコードしないでください。

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

注意

Python の標準ライブラリは非同期 HTTP リクエストをサポートしていないため、PyMongo からのすべての OIDC リクエストは同期され、 asyncioループをブロックします。

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

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

注意

authMechanismProperties値にカンマが含まれている場合は、認証オプションを設定するためにMongoClientコンストラクタを使用する必要があります。

まず、次の例に示すように、認証メカニズムプロパティ用のPython辞書を作成します。

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[+srv]://<hostname>:<port>",
username="<Azure ID>",
authMechanism="MONGODB-OIDC",
authMechanismProperties=properties
)

接続stringに次の接続オプションを含めます。

  • username: Azure マネージド ID を使用している場合は、管理対象 ID のクライアント ID にこれを設定します。 サービス プリンシパル を使用してエンタープライズ アプリケーションを表す場合は、これをサービス プリンシパルのアプリケーション ID に設定します。

  • authMechanism: MONGODB-OIDCに設定します。

  • authMechanismProperties: ENVIRONMENT:azure,TOKEN_RESOURCE:<audience>に設定します。

    次のコード例は、 接続stringでこれらのオプションを設定する方法を示しています。

from pymongo import MongoClient
# define URI and MongoClient
uri = ("mongodb[+srv]://<hostname>:<port>/?"
"username=<username>"
"&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辞書を作成します。

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[+srv]://<hostname>:<port>",
authMechanism="MONGODB-OIDC",
authMechanismProperties=properties
)

接続stringに次の接続オプションを含めます。

  • authMechanism: MONGODB-OIDCに設定します。

  • authMechanismProperties: ENVIRONMENT:gcp,TOKEN_RESOURCE:<audience>に設定します。

次のコード例は、 接続stringでこれらのオプションを設定する方法を示しています。

from pymongo import MongoClient
# define URI and MongoClient
uri = ("mongodb[+srv]://<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 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辞書に設定します。

対応するコードを表示するには、Synchronous タブまたは Asynchronousタブを選択します。

client = MongoClient(
"mongodb[+srv]://<hostname>:<port>",
authMechanism="MONGODB-OIDC",
authMechanismProperties=properties
)
client = AsyncMongoClient(
"mongodb[+srv]://<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辞書に設定します。

対応するコードを表示するには、Synchronous タブまたは Asynchronousタブを選択します。

client = MongoClient(
"mongodb[+srv]://<hostname>:<port>",
authMechanism="MONGODB-OIDC",
authMechanismProperties=properties
)
client = AsyncMongoClient(
"mongodb[+srv]://<hostname>:<port>",
authMechanism="MONGODB-OIDC",
authMechanismProperties=properties
)

アプリケーションがKubernetesクラスターで実行される場合は、PyMongo に組み込まれているKubernetesサポートを使用してMongoDBに認証できます。

Kubernetes用の OIDC は、MongoClient コンストラクターに引数を渡す方法と、接続文字列のパラメーターを使用する方法の 2 通りがあります。 アプリケーションのKubernetes認証を有効にする方法を確認するには、次のタブから を選択します。

properties = {"ENVIRONMENT": "k8s"}
client = MongoClient(
"mongodb[+srv]://<hostname>:<port>",
authMechanism="MONGODB-OIDC",
authMechanismProperties=properties
)
uri = ("mongodb[+srv]://<hostname>:<port>/?"
"authMechanism=MONGODB-OIDC"
"&authMechanismProperties=ENVIRONMENT:k8s")
client = MongoClient(uri)
properties = {"ENVIRONMENT": "k8s"}
client = AsyncMongoClient(
"mongodb[+srv]://<hostname>:<port>",
authMechanism="MONGODB-OIDC",
authMechanismProperties=properties
)
uri = ("mongodb[+srv]://<hostname>:<port>/?"
"authMechanism=MONGODB-OIDC"
"&authMechanismProperties=ENVIRONMENT:k8s")
client = AsyncMongoClient(uri)

戻る

AWS IAM

項目一覧

  • Overview
  • コード プレースホルダー
  • アプリケーションでの OIDC 認証の使用
  • Azure IMDS
  • GCP IMDS
  • その他の Azure 環境
  • GCP GKE
  • Kubernetes