Docs Menu
Docs Home
/ / /
PyMongo
/

認証メカニズム

項目一覧

  • Overview
  • SCRAM-SHA-256
  • SCRAM-SHA-1
  • MONGODB-X509
  • MongoDB-AWS
  • MongoClient Credentials
  • 環境変数
  • 共有認証情報ファイル
  • Amazon Web Services設定ファイル
  • AssumeRole リクエスト
  • AssumeRoleWithWebIdentity
  • ECS コンテナまたは EC 2インスタンス
  • API ドキュメント

このガイドでは、PyMongo でユーザーを認証するために使用できるメカニズムについて説明します。

重要

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

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

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

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 ( 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)

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 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の認証情報を登録されている順序で取得しようとします。

  1. MongoClientコンストラクターまたは接続 URI のパラメーターに渡される名前付き引数

  2. 環境変数

  3. 共有認証情報ファイル

  4. Amazon Web Services設定ファイル

  5. AssumeRole Amazon Web Services Security Token Service(STS)へのリクエスト

  6. AssumeRoleWithWebIdentity Amazon Web Services STS へのリクエスト

  7. IAM ロールが設定された Amazon EC 2インスタンスのインスタンス メタデータ サービス

以下のセクションでは、PyMongo を使用してこれらのソースから認証情報を取得し、その認証情報を使用してアプリケーションを認証する方法について説明します。

まず、 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環境変数を、作成したプロファイルの名前に設定します。

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)

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ドキュメントを参照してください。

重要

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

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

PyMongo でアプリケーションを認証するの詳細については、次の API ドキュメントを参照してください。

戻る

データの保護