Docs Menu

認証メカニズム

このガイドでは、 Cドライバーで使用してMongoDB .にユーザーを認証するメカニズムについて説明します。

重要

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

MongoDB URI にユーザー名とパスワードを含める前に、 パーセント エンコード する必要があります。

SCRAM-SHA-256 ( RFC7677 で定義) は、 MongoDB v を実行している MongoDB 配置のデフォルトの認証メカニズムです。40以降に更新します。

SCRAM-SHA-256 を使用して認証するには、次の接続オプションを設定します。

  • username: 認証するユーザー名。 接続 URI に含める前に、この値をパーセント エンコードします。

  • password: 認証するパスワード。 接続 URI に含める前に、この値をパーセント エンコードします。

  • authSource: 認証するMongoDBデータベース 。 デフォルトでは 、 Cドライバーは接続 URI に データベースを含めている場合、データベースに対して認証します。 認証データベースを指定しない場合、adminデータベースに対して認証が行われます。

  • authMechanism: SCRAM-SHA-256に設定します。

次のコード例に示すように、接続文字列のパラメーターを使用してこれらのオプションを設定できます。

const char *uri = "mongodb://<percent-encoded username>:<percent-encoded password>@<hostname>:<port>/?authMechanism=SCRAM-SHA-256&authSource=<authentication database>";
mongoc_client_t *client = mongoc_client_new(uri);

SCRAM-SHA-1 ( RFC5802 で定義) は、 MongoDB v を実行している MongoDB 配置のデフォルトの認証メカニズムです。 。36

このメカニズムで認証するには、次の接続オプションを設定します。

  • username: 認証するユーザー名。 接続 URI に含める前に、この値をパーセント エンコードします。

  • password: 認証するパスワード。 接続 URI に含める前に、この値をパーセント エンコードします。

  • authSource: 認証するMongoDBデータベース 。 デフォルトでは 、 Cドライバーは adminデータベースに対して認証します。

  • authMechanism: "SCRAM-SHA-1"に設定します。

次のコード例に示すように、接続文字列のパラメーターを使用してこれらのオプションを設定できます。

const char *uri = "mongodb://<percent-encoded username>:<percent-encoded password>@<hostname>:<port>/?authMechanism=SCRAM-SHA-1&authSource=<authentication database>";
mongoc_client_t *client = mongoc_client_new(uri);

TLS サポートでCドライバーをコンパイルすると、 Cドライバーは TLS ハンドシェイク中に ID を証明するために、X.509クライアント証明書をMongoDBに提示できます。 MONGODB-X509認証メカニズムは、この証明書を使用してクライアントを認証します。

このメカニズムで認証するには、次の手順を実行します。

  1. mongoc_ssl_opt_t 構造を作成します。 この構造で、pem_fileフィールドを、クライアント証明書と秘密キー を含む .pemファイルのファイルパスに設定します。

  2. 接続 URI で、authMechanism 接続オプションを "MONGODB-X509" に設定します。

次のコード例は、 MONGODB-X509 メカニズムを使用して認証するMongoDBクライアントを作成する方法を示しています。

mongoc_client_t *client;
mongoc_ssl_opt_t ssl_opts = {0};
ssl_opts.pem_file = "mycert.pem";
const char *uri = "mongodb://<percent-encoded username>@<hostname>:<port>/?authMechanism=MONGODB-X509";
mongoc_client_t *client = mongoc_client_new(uri);
mongoc_client_set_ssl_opts(client, &ssl_opts);

重要

MONGODB-AWS 認証メカニズムには、MongoDB v 4.4以降が必要です。

MONGODB-AWS認証メカニズムは、 Amazon Web Services IAM(Amazon Web Services Identity and Access Management、 Amazon Web Services Lambda の認証情報)を使用してアプリケーションを認証します。 このメカニズムを使用してアプリケーション を認証するには、まず $externalデータベースで関連付けられたAmazonリソース名(ARN) を持つユーザーを作成します。 次に、接続 URI で MONGODB-AWS authMechanism を指定します。

MONGODB-AWS メカニズムを使用すると、 Cドライバーは次のソースからAmazon Web Services の認証情報を登録されている順序で検索しようとします。

  1. 接続 URI に渡される名前付きパラメータ

  2. 環境変数

  3. Amazon Web Services EKS AssumeRoleWithWebIdentityリクエスト

  4. ECSコンテナのメタデータ

  5. EC 2インスタンスのメタデータ

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

まず、 Cドライバーは、接続 URI の一部としてAmazon Web Services の認証情報を mongoc_client_t コンストラクターに渡したかどうかを確認します。 接続 URI で認証情報を渡すには、次の接続オプションを設定します。

  • username: 認証するAmazon Web Services IAM アクセスキーID 。

  • password: Amazon Web Services IAM シークレット アクセス キー。

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

次の例に示すように、接続 URI でこれらのオプションを設定できます。

const char *uri = "mongodb://<AWS IAM access key ID>:<AWS IAM secret access key>@<hostname>:<port>/?authMechanism=MONGODB-AWS");
mongoc_client_t *client = mongoc_client_new(uri);

また、 Amazon Web Servicesセッション トークンを authMechanismProperties パラメーターに渡して含めることもできます。

const char *uri = "mongodb://<AWS IAM access key ID>:<AWS IAM secret access key>@<hostname>:<port>/?authMechanism=MONGODB-AWS&authMechanismProperties=AWS_SESSION_TOKEN:<token>");
mongoc_client_t *client = mongoc_client_new(uri);

接続 URI にユーザー名とパスワードを含めない場合、 Cドライバーは次の環境変数から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>

これらの環境変数を設定したら、次の例に示すように、接続 URI のauthMechanismパラメータを"MONGODB-AWS"に設定します。

const char *uri = "mongodb://<hostname>:<port>/?authMechanism=MONGODB-AWS");
mongoc_client_t *client = mongoc_client_new(uri);

アプリケーションがElastic Container Service(ECS)コンテナで実行されている場合、 Cドライバーは ECS エンドポイントから一時的なAmazon Web Services の認証情報を自動的に検索できます。 そのためには、次の例に示すように、AWS_CONTAINER_CREDENTIALS_RELATIVE_URI という環境変数に ECS エンドポイントの URI を指定します。

export AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=<URI of the ECS endpoint>

環境変数を設定したら、次の例に示すように、接続 URI のauthMechanismパラメータを"MONGODB-AWS"に設定します。

const char *uri = "mongodb://<hostname>:<port>/?authMechanism=MONGODB-AWS");
mongoc_client_t *client = mongoc_client_new(uri);

Cドライバーは、 Amazon Elastic Cloud compute(EC2)インスタンスから一時的なAmazon Web Services の認証情報を自動的に取得できます。 EC2インスタンス内から一時認証情報を使用するには、次の例に示すように、接続 URI の authMechanism パラメータを "MONGODB-AWS" に設定します。

const char *uri = "mongodb://<hostname>:<port>/?authMechanism=MONGODB-AWS");
mongoc_client_t *client = mongoc_client_new(uri);

注意

前述のAmazon Web Services認証メソッドから環境変数のいずれかを設定すると、 Cドライバーは EC2インスタンスから認証情報を取得する前に、それらのメソッドを使用して認証情報を取得しようとします。 EC2インスタンスからのみ認証情報を検索するには、環境変数が設定されていないことを確認します。

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