認証メカニズム
項目一覧
Overview
このガイドでは、PyMongo でユーザーを認証するために使用できるメカニズムについて説明します。
重要
パーセント エンコーディング
MongoDB URI にユーザー名とパスワードを含める前に、 パーセント エンコード する必要があります。quote_plus()
urllib.parse モジュールで使用可能な メソッドは、このタスクを実行する方法の 1 つです 。例、quote_plus("and / or")
を呼び出すと string and+%2F+or
が返されます。
ユーザー名またはパスワードをMongoClient
に引数として渡す場合は、これらをパーセント エンコードしないでください。
SCRAM-SHA-256
SCRAM-SHA-256 ( RFC7677 で定義) は、 MongoDB v を実行している MongoDB 配置のデフォルトの認証メカニズムです。40以降に更新します。
このメカニズムで認証するには、次の接続オプションを設定します。
db_username
: 認証するユーザー名。 接続 URI に含める前に、この値をパーセント エンコードします。db_password
: 認証するパスワード。 接続 URI に含める前に、この値をパーセント エンコードします。authSource
: 認証する MongoDB database。 デフォルトでは、PyMongo は接続 URI にデータベースに対して認証を行います(接続 URI を含めている場合)。 再試行しない場合、admin
データベースに対して認証が行われます。authMechanism
:SCRAM-SHA-256
に設定します。
これらのオプションは、MongoClient
コンストラクターに引数を渡す方法と、 接続stringのパラメーターを使用する方法の 2 通りがあります。
client = pymongo.MongoClient("mongodb://<hostname>:<port>", username="<db_username>", password="<db_password>", authSource="<authentication database>", authMechanism="SCRAM-SHA-256")
uri = ("mongodb://<percent-encoded db_username>:<percent-encoded db_password>" "@<hostname>:<port>/?" "authSource=<authentication database>" "&authMechanism=SCRAM-SHA-256") client = pymongo.MongoClient(uri)
SCRAM-SHA-1
SCRAM-SHA-1 ( RFC5802 で定義) は、 MongoDB v を実行している MongoDB 配置のデフォルトの認証メカニズムです。 。36
このメカニズムで認証するには、次の接続オプションを設定します。
db_username
: 認証するユーザー名。 接続 URI に含める前に、この値をパーセント エンコードします。db_password
: 認証するパスワード。 接続 URI に含める前に、この値をパーセント エンコードします。authSource
: 認証する MongoDB database。 デフォルトでは、PyMongo はadmin
データベースに対して認証します。authMechanism
:"SCRAM-SHA-1"
に設定します。
これらのオプションは、MongoClient
コンストラクターに引数を渡す方法と、 接続stringのパラメーターを使用する方法の 2 通りがあります。
client = pymongo.MongoClient("mongodb://<hostname>:<port>", username="<db_username>", password="<db_password>", authSource="<authentication database>", authMechanism="SCRAM-SHA-1")
uri = ("mongodb://<percent-encoded db_username>:<percent-encoded db_password>" "@<hostname>:<port>/?" "authSource=<authentication database>" "&authMechanism=SCRAM-SHA-1") client = pymongo.MongoClient(uri)
MONGODB-X509
TLS を有効にすると、TLS ハンドシェイク中に PyMongo は X. 509クライアント証明書を MongoDB に提示して、ID を証明できます。 MONGODB-X 509認証メカニズムは、この証明書を使用してクライアントを認証します。
このメカニズムで認証するには、次の接続オプションを設定します。
tls
:True
に設定します。tlsCertificateKeyFile
: クライアント証明書と秘密キーを含む.pem
ファイルのファイル パス。authMechanism
:"MONGODB-X509"
に設定します。
これらのオプションは、MongoClient
コンストラクターに引数を渡す方法と、 接続stringのパラメーターを使用する方法の 2 通りがあります。
client = pymongo.MongoClient("mongodb://<hostname>:<port>", tls=True, tlsCertificateKeyFile="/path/to/client.pem", authMechanism="MONGODB-X509")
uri = ("mongodb://<hostname>:<port>/?" "tls=true" "&tlsCertificateKeyFile=path/to/client.pem" "&authMechanism=MONGODB-X509") client = pymongo.MongoClient(uri)
MongoDB-AWS
重要
MONGODB-AWS 認証メカニズムには、MongoDB v 4.4以降が必要です。
MONGODB- Amazon Web Services認証メカニズムは、 Amazon Web Services IAM( Amazon Web Services Identity と Access Management)またはAmazon Web Services Lambdaの認証情報を使用してアプリケーションを認証します。 認証に MONGODB-AWS を使用するには、次の例に示すように、 aws
オプションを使用して PyMongo をインストールする必要があります。
python -m pip install pymongo[aws]
PyMongoは、認証情報を処理するためにAmazon Web Services SDK であるPython 3 を使用します。 Boto3 は、次のソースからAmazon Web Servicesの認証情報を登録されている順序で取得しようとします。
MongoClient
コンストラクターまたは接続 URI のパラメーターに渡される名前付き引数環境変数
共有認証情報ファイル
Amazon Web Services設定ファイル
AssumeRole
Amazon Web Services Security Token Service(STS)へのリクエストAssumeRoleWithWebIdentity
Amazon Web Services STS へのリクエストIAM ロールが設定された Amazon EC 2インスタンスのインスタンス メタデータ サービス
以下のセクションでは、PyMongo を使用してこれらのソースから認証情報を取得し、その認証情報を使用してアプリケーションを認証する方法について説明します。
MongoClient
Credentials
まず、 PyMongoは、 Amazon Web Servicesの認証情報を名前付き引数として、または接続 URI の一部として MongoClient
コンストラクターに渡しているかどうかを確認します。 認証情報をMongoClient
に渡すには、次の接続オプションを設定します。
username
: 認証するAmazon Web Services IAM アクセスキーID 。 接続 URI に含める前に、この値をパーセント エンコードします。password
: Amazon Web Services IAM シークレット アクセス キー。 接続 URI に含める前に、この値をパーセント エンコードします。authMechanism
:"MONGODB-AWS"
に設定します。
これらのオプションは、MongoClient
コンストラクターに引数を渡す方法と、 接続stringのパラメーターを使用する方法の 2 通りがあります。
client = pymongo.MongoClient("mongodb://@<hostname>:<port>", username="<AWS IAM access key ID>", password="<AWS IAM secret access key>", authMechanism="MONGODB-AWS")
uri = ("mongodb://<percent-encoded AWS IAM access key ID>:" "<percent-encoded AWS IAM secret access key>" "@<hostname>:<port>/?" "&authMechanism=MONGODB-AWS") client = pymongo.MongoClient(uri)
環境変数
MongoClient
オブジェクトを構築するときにユーザー名とパスワードを指定しない場合、 PyMongoは次の環境変数からAmazon Web Servicesの認証情報を検索しようとします。
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_SESSION_TOKEN
これらの環境変数を使用してアプリケーションを認証するには、まず、次のコード例に示すように、認証に必要なAmazon Web Services IAM 値に設定します。
export AWS_ACCESS_KEY_ID=<AWS IAM access key ID> export AWS_SECRET_ACCESS_KEY=<AWS IAM secret access key> export AWS_SESSION_TOKEN=<AWS session token>
重要
これらの環境変数の値をパーセント エンコードしないでください。
これらの環境変数を設定したら、 authMechanism
接続オプションを"MONGODB-AWS"
に設定します。 このオプションは、MongoClient
コンストラクターに引数を渡す方法と、 接続stringのパラメーターを使用する方法の 2 通りがあります。
client = pymongo.MongoClient("mongodb://<hostname>:<port>", authMechanism="MONGODB-AWS")
uri = "mongodb://<hostname>:<port>/?&authMechanism=MONGODB-AWS" client = pymongo.MongoClient(uri)
Tip
AWS Lambda
Amazon Web Services Lambdaランタイムは、初期化中にこれらの環境変数を自動的に設定できます。 環境で環境変数を使用する方法の詳細については、「Amazon Web ServicesLambda Lambda環境変数の使用 Amazon Web Services」を参照してください。 ( のドキュメント)。
共有認証情報ファイル
PyMongoは前述の環境変数でAmazon Web Servicesの認証情報を見つけられない場合、共有認証情報ファイルからそれらを読み込もうとします。
共有認証情報ファイルを使用してアプリケーションを認証するには、ファイルが環境内に存在し、正しく構成されていることを確認します。 共有認証情報ファイルの作成方法については、「 認証情報 3」を参照してください。 Boto のドキュメントと 構成 Amazon Web Servicesを参照してください。 ( のドキュメント)。
共有認証情報ファイルを作成したら、 authMechanism
接続オプションを"MONGODB-AWS"
に設定します。 このオプションは、MongoClient
コンストラクターに引数を渡す方法と、 接続stringのパラメーターを使用する方法の 2 通りがあります。
client = pymongo.MongoClient("mongodb://<hostname>:<port>", authMechanism="MONGODB-AWS")
uri = "mongodb://<hostname>:<port>/?&authMechanism=MONGODB-AWS" client = pymongo.MongoClient(uri)
Tip
PyMongo が認証に共有認証情報ファイルを使用しないようにするには、次のいずれかのアクションを実行します。
ターミナルで、
AWS_SHARED_CREDENTIALS_FILE
環境変数を""
に設定します。スクリプトまたはアプリケーションに
os.environ["AWS_SHARED_CREDENTIALS_FILE"] = ""
を追加します。Amazon Web ServicesMongoDB認証情報専用の プロファイルを作成します。
AWS_PROFILE
環境変数を、作成したプロファイルの名前に設定します。
Amazon Web Services設定ファイル
PyMongoは共有認証情報ファイルで認証情報を見つけられない場合、 Amazon Web Services設定ファイルから認証情報を読み込もうとします。
Amazon Web Servicesの設定ファイルを使用してアプリケーションを認証するには、ファイルが環境内に存在し、正しく設定されていることを確認します。 Amazon Web Servicesの設定ファイルの作成方法については、「 認証情報 3」を参照してください。 Boto のドキュメントと 構成 Amazon Web Servicesを参照してください。 ( のドキュメント)。
構成ファイルを作成したら、 authMechanism
接続オプションを"MONGODB-AWS"
に設定します。 このオプションは、MongoClient
コンストラクターに引数を渡す方法と、 接続stringのパラメーターを使用する方法の 2 通りがあります。
client = pymongo.MongoClient("mongodb://<hostname>:<port>", authMechanism="MONGODB-AWS")
uri = "mongodb://<hostname>:<port>/?&authMechanism=MONGODB-AWS" client = pymongo.MongoClient(uri)
AssumeRole リクエスト
Amazon Web Servicesの認証情報をAmazon Web Servicesの設定ファイルに保存する代わりに、 PyMongoにAmazon Web Services STS エンドポイントへの AssumeRole
リクエストを送信するよう指示できます。 このリクエストは、アプリケーションが認証に使用できる一時的な認証情報を返します。
AssumeRole
リクエストによって返された一時的なAmazon Web Services IAM 認証情報を使用して認証するには、 Amazon Web Servicesの設定ファイルが環境内に存在し、正しく構成されていることを確認します。 Amazon Web Servicesの設定ファイルの作成および構成方法については、「 3認証情報 」を参照してください。 Boto のドキュメントと 構成Amazon Web Services を参照してください。 ( のドキュメント)。
構成ファイルを作成したら、次の接続オプションを設定します。
username
:AssumeRole
リクエストによって返された認証用Amazon Web Services IAM アクセスキーID 。 接続 URI に含める前に、この値をパーセント エンコードします。password
:AssumeRole
リクエストによって返されたAmazon Web Services IAM シークレット アクセス キー。 接続 URI に含める前に、この値をパーセント エンコードします。authMechanismProperties
:AWS_SESSION_TOKEN:
とAssumeRole
リクエストによって返されたAmazon Web Servicesセッション トークンに設定します。authMechanism
:"MONGODB-AWS"
に設定します。
これらのオプションは、MongoClient
コンストラクターに引数を渡す方法と、 接続stringのパラメーターを使用する方法の 2 通りがあります。
注意
authMechanismProperties
値にカンマが含まれている場合は、認証オプションを設定するためにMongoClient
コンストラクタを使用する必要があります。
client = pymongo.MongoClient("mongodb://@<hostname>:<port>", username="<AWS IAM access key ID>", password="<AWS IAM secret access key>", authMechanismProperties="AWS_SESSION_TOKEN:<AWS session token>", authMechanism="MONGODB-AWS")
uri = ("mongodb://<percent-encoded AWS IAM access key ID>:" "<percent-encoded AWS IAM secret access key>" "@<hostname>:<port>/?" "authMechanismProperties=AWS_SESSION_TOKEN:<AWS session token>" "&authMechanism=MONGODB-AWS") client = pymongo.MongoClient(uri)
AssumeRole
リクエストを使用してアプリケーションを認証する方法の詳細については、次のAmazon Web Servicesドキュメントを参照してください。
AssumeRoleWithWebIdentity
重要
アプリケーションでは、EKS をサポートするためにpymongo_auth_aws
v 1.1.0以降を使用する必要があります。
アプリケーションが OpenID Connect(OIDC)ID プロバイダーから EKS クラスターのユーザーを認証する場合、 PyMongoは AssumeRoleWithWebIdentity
リクエストを実行して、アプリケーションの一時的なAmazon Web Services認証情報の OIDC トークンを交換できます。
AssumeRoleWithWebIdentity
リクエストによって返された一時的なAmazon Web Services IAM 認証情報を使用して認証するには、 Amazon Web Servicesの設定ファイルが環境内に存在し、正しく構成されていることを確認します。 Amazon Web Servicesの設定ファイルの作成および構成方法については、「 3認証情報 」を参照してください。 Boto のドキュメントと 構成Amazon Web Services を参照してください。 ( のドキュメント)。
AssumeRoleWithWebIdentity
リクエスト用に環境を構成したら、 authMechanism
接続オプションを"MONGODB-AWS"
に設定します。 このオプションは、MongoClient
コンストラクターに引数を渡す方法と、 接続stringのパラメーターを使用する方法の 2 通りがあります。
client = pymongo.MongoClient("mongodb://<hostname>:<port>", authMechanism="MONGODB-AWS")
uri = "mongodb://<hostname>:<port>/?&authMechanism=MONGODB-AWS" client = pymongo.MongoClient(uri)
AssumeRoleWithWebIdentity
リクエストを使用してアプリケーションを認証する方法の詳細については、次のAmazon Web Servicesドキュメントを参照してください。
ECS コンテナまたは EC 2インスタンス
アプリケーションが Elastic Container Service(ECS)コンテナのAmazon Elastic Cloud compute(EC2)インスタンスで実行される場合、 PyMongoは ECS エンドポイントから一時的なAmazon Web Servicesの認証情報を自動的に取得できます。
EC 2インスタンス内から一時認証情報を使用するには、 authMechanism
接続オプションを"MONGODB-AWS"
に設定します。 このオプションは、MongoClient
コンストラクターに引数を渡す方法と、 接続stringのパラメーターを使用する方法の 2 通りがあります。
client = pymongo.MongoClient("mongodb://<hostname>:<port>", authMechanism="MONGODB-AWS")
uri = "mongodb://<hostname>:<port>/?&authMechanism=MONGODB-AWS" client = pymongo.MongoClient(uri)
API ドキュメント
PyMongo でアプリケーションを認証するの詳細については、次の API ドキュメントを参照してください。