Overview
注意
Amazon Web Services認証はMongoDB 4.4 以降のMongoDB Enterpriseでのみ利用できます。
MONGODB-AWS認証メカニズムは、 AWS Identity and Access Management(IAM)とAWS STS(Security Token Service)を使用して、 MongoDBデプロイに対してクライアントの ID を証明します。次の手順は、 AWS認証プロセスについて説明します。
クライアントはAWS IAM 認証情報を使用して署名を作成し、それをMongoDBデプロイに送信します。
この配置は、クライアントの署名を使用してリクエストをAmazon Web Services STS に送信します。
リクエストが成功すると、STS は、クライアントの認証情報に対応する IAM ユーザーまたはロールのAmazonリソース名(ARN)を返します。
配置は返された ARN を使用してユーザーを検索します。クライアントはこのユーザーとして認証します。
注意
クライアントとサーバーは異なるユーザー名を使用します。クライアントは、 AWSアクセスキーID をユーザー名として送信します。サーバーは、ユーザー名としてアクセス キーIDに対応する IAM ユーザーまたはロールの ARN を使用します。
このメカニズムで認証するには、次の手順に従います。
認証対象の IAM ユーザーまたはロールの ARN である名前を持つユーザーを
$externalデータベースに作成します。MONGODB-AWS認証メカニズムを使用するようにクライアントを設定します。
Amazon Web Services認証情報
Amazon Web Services の認証情報には、次のコンポーネントが含まれます。
アクセスキーID
シークレット アクセス キー
任意のセッション トークン
AWS IAM 認証情報による認証では、アクセスキーIDとシークレット アクセスキーが使用されます。一時的なAWS IAM 認証情報による認証では、アクセスキーID、シークレットアクセスキー、セッショントークンの 3 つのすべてのコンポーネントが使用されます。
注意
ドライバーはネットワーク経由でシークレット アクセス キーまたはセッション トークンを送信しません。
一時的な認証情報は次のアイテムで使用されます。
コード プレースホルダー
このページのコード例では、次のプレースホルダーを使用します。
<hostname>: MongoDBデプロイのネットワーク アドレス。<port>: MongoDBデプロイのポート番号。<aws_access_key_id>: AWSアクセスキーID。<aws_secret_access_key>: AWSシークレット アクセス キー。<aws_session_token>: AWSセッション トークン。
このページのコード例を使用するには、これらのプレースホルダーを独自の値に置き換えます。
アプリケーションでのAmazon Web Services IAM 認証の使用
C++ドライバーは環境からAWS IAM 認証情報を取得できます。または、アプリケーションコードで明示的に認証情報を提供することもできます。
MONGODB-AWS認証メカニズム を使用すると、 C++ドライバーは次のソースからこの順序でAWS認証情報を検索しようとします。
接続 URI で渡される認証情報
環境変数
Amazon Web Services EKS AssumeRoleWithWebIdentityリクエスト
ECSコンテナのメタデータ
EC 2インスタンスのメタデータ
認証情報の明示的な提供
接続 URI で長期(一時的ではない) IAM 認証情報を提供できます。そのためには、次の URI パラメーターを設定します。
username: AWSアクセスキーIDに設定します。password: AWSシークレット アクセス キーに設定します。authMechanism:MONGODB-AWSに設定します。
接続 URI を単独で使用することも、mongocxx::options::tls クラスと mongocxx::options::client クラスを使用して構成された TLS オプションとともに接続 URI を使用することもできます。対応する構文を確認するには、Connection URI タブまたは Client Options with TLSタブを選択します。
注意
URI で認証情報を提供する場合は、アクセス キーIDまたは シークレット アクセス キー内の特殊文字をパーセント エンコードします。
一時的な認証情報の提供
接続 URI の authMechanismProperties パラメータにセッション トークンを含めることで、接続 URI で一時的な IAM 認証情報を提供できます。
対応する構文を確認するには、Connection URI タブまたは Client Options with TLSタブを選択します。
認証情報の自動取得
MONGODB-AWS認証メカニズムを指定し、username と password を省略すると、 C++ドライバーは、環境変数、Web ID ロール、およびAWSメタデータエンドポイントからAWS認証情報を自動的に検索しようとします。
環境変数
C++ドライバーは、最初に次の環境変数から認証情報を確認します。
AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN(任意)
これらの変数は、 AWS CLI などの多くのAWSツールと SDK によって認識され、 AWS Lambda環境でも一般的に設定されます。
これらの変数の設定例は次のとおりです。
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" に設定します。対応する構文を確認するには、Connection URI タブまたは Client Options with TLSタブを選択します。
AssumeRoleWithWebIdentity
アプリケーションがAmazon EKS クラスターで実行され、 OpenID Connect (OIDC) IdPを介して認証される場合、 C++ドライバーは AssumeRoleWithWebIdentityリクエスト を使用できます。このリクエストは、アプリケーションの一時的なAWS認証情報と OIDC トークンを交換します。
このメカニズムを設定するには:
AWS構成ファイルを作成または更新します。この構成ファイルの作成方法については、 「 AWS SDK とツールのグローバル構成 」を参照してください。
次の環境変数を設定します。
AWS_ROLE_ARN: 引き受ける IAM ロールの ARN に設定します。AWS_WEB_IDENTITY_TOKEN_FILE: サービス アカウントの OIDC トークンを含むファイルのパスに設定します。AWS_ROLE_SESSION_NAME(任意): 想定されたロール セッションの識別子に設定します。この変数を省略すると、ドライバーはランダムな識別子を生成します。
接続 URI の
authMechanismパラメータを"MONGODB-AWS"に設定します。
対応する構文を確認するには、Connection URI タブまたは Client Options with TLSタブを選択します。
Web ID ロールを使用した認証の詳細については、「 AssumeRoleWithWebIdentity API 」を参照してください
ECS タスク メタデータ
アプリケーションがAmazon ECSコンテナで実行されている場合、 C++ドライバーは ECSタスクメタデータエンドポイントから一時的なAWS認証情報を検索できます。
この動作を有効にするには、次の例に示すように、AWS_CONTAINER_CREDENTIALS_RELATIVE_URI 環境変数を ECSタスクメタデータエンドポイントの相対的 URI に設定します。
export AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=<relative URI of the ECS task metadata endpoint>
次に、authMechanism を "MONGODB-AWS" に設定してクライアントを構築します。対応する構文を確認するには、Connection URI タブまたは Client Options with TLSタブを選択します。
EC 2インスタンス メタデータ
アプリケーションがAmazon EC2インスタンスで実行されている場合、 C++ドライバーは EC2インスタンスのメタデータエンドポイントから一時的なAWS認証情報を検索できます。
この動作を有効にするには、接続 URI の authMechanism パラメータを "MONGODB-AWS" に設定します。対応する構文を確認するには、Connection URI タブまたは Client Options with TLSタブを選択します。
注意
前述のAmazon Web Services認証メソッドから環境変数のいずれかを設定すると、 C++ドライバーは EC2インスタンスから認証情報を取得する前に、それらのメソッドを使用して認証情報を取得しようとします。 EC 2インスタンスからのみ認証情報を取得するには、環境変数が設定されていないことを確認します。
アプリケーションがEC2インスタンスの ECSコンテナで実行され、コンテナがインスタンスのメタデータへのアクセスを許可されている場合、ドライバーは EC2インスタンスのメタデータエンドポイントからAmazon Web Services の認証情報を検索しようとします。 この方法でドライバーが認証情報を取得した場合、アプリケーションはEC2インスタンスに割り当てられた IAM ロールとして認証できます。
コンテナが EC2インスタンスのメタデータにアクセスしないようにする方法については、Amazon Web Services のドキュメント を参照してください。
API ドキュメント
C++ドライバーで mongocxx::clientオブジェクトを作成するか、TLS を構成する方法の詳細については、次のAPIドキュメントを参照してください。