Amazon Cognito
Amazon Cognito は、AgentCore Gateway とランタイムにアクセスするための ID プロバイダー、またはアウトバウンドリソースアクセス用の AgentCore Identity 認証情報プロバイダーとして設定できます。これにより、エージェントは ID プロバイダーと認可サーバーとして Cognito を使用してエージェントユーザーを認証および認可できます。また、エージェントは Cognito によって認可されたリソースにアクセスするための認証情報を取得できます。
インバウンド
AgentCoreゲートウェイとランタイムにアクセスするための ID プロバイダーと認可サーバーとして Cognito を追加するには、以下を実行する必要があります。
-
IDP ディレクトリから検出 URL を設定します。これにより、AgentCore Identity は OAuth 認可サーバーとトークン検証キーに関連するメタデータを取得できます。
-
トークンの有効な
clientIdまたはaudクレームを入力します。これにより、IDP からのトークンを検証し、予想されるクレームを含むトークンへのアクセスを許可できます。
次の手順を使用して、AgentCore Runtime によるユーザー認証のインバウンド ID プロバイダーとして Cognito ユーザープールを作成します。次の手順では、Cognito ユーザープール、ユーザープールクライアントを作成し、ユーザーを追加し、ユーザーのベアラートークンを生成します。トークンはデフォルトで 60 分間有効です。
ランタイム認証のインバウンド ID プロバイダーとして Cognito ユーザープールを作成するには
-
以下の内容で
setup_cognito.shという名前のファイルを作成します。注記
次のスクリプトは一例にすぎません。アプリケーションに必要なユーザープール設定とユーザー認証情報をカスタマイズする必要があります。このスクリプトを本番環境で直接使用しないでください。
#!/bin/bash # Create User Pool and capture Pool ID directly export POOL_ID=$(aws cognito-idp create-user-pool \ --pool-name "MyUserPool" \ --policies '{"PasswordPolicy":{"MinimumLength":8}}' \ --region us-east-1 | jq -r '.UserPool.Id') # Create App Client and capture Client ID directly export CLIENT_ID=$(aws cognito-idp create-user-pool-client \ --user-pool-id $POOL_ID \ --client-name "MyClient" \ --no-generate-secret \ --explicit-auth-flows "ALLOW_USER_PASSWORD_AUTH" "ALLOW_REFRESH_TOKEN_AUTH" \ --region us-east-1 | jq -r '.UserPoolClient.ClientId') # Create User aws cognito-idp admin-create-user \ --user-pool-id $POOL_ID \ --username "testuser" \ --temporary-password "${temp-password}" \ --region us-east-1 \ --message-action SUPPRESS > /dev/null # Set Permanent Password aws cognito-idp admin-set-user-password \ --user-pool-id $POOL_ID \ --username "testuser" \ --password "${permanent-user-password}" \ --region us-east-1 \ --permanent > /dev/null # Authenticate User and capture Access Token export BEARER_TOKEN=$(aws cognito-idp initiate-auth \ --client-id "$CLIENT_ID" \ --auth-flow USER_PASSWORD_AUTH \ --auth-parameters USERNAME='testuser',PASSWORD='${permanent-user-password}' \ --region us-east-1 | jq -r '.AuthenticationResult.AccessToken') # Output the required values echo "Pool id: $POOL_ID" echo "Discovery URL: https://cognito-idp.us-east-1.amazonaws.com/$POOL_ID/.well-known/openid-configuration" echo "Client ID: $CLIENT_ID" echo "Bearer Token: $BEARER_TOKEN" -
スクリプトを実行して Cognito リソースを作成します。
source setup_cognito.sh -
次のような出力値を記録します。
Pool id: us-east-1_poolid Discovery URL: https://cognito-idp.us-east-1.amazonaws.com/us-east-1_userpoolid/.well-known/openid-configuration Client ID: clientid Bearer Token: bearertokenこれらの値は次のステップで必要になります。
次の手順を使用して、AgentCore Gateway によるmachine-to-machine認証のインバウンド ID プロバイダーとして Cognito ユーザープールを作成します。次の手順では、ユーザープール、リソースサーバー、クライアント認証情報、検出 URL 設定を作成します。この設定により、ゲートウェイアクセスの M2M 認証フローが有効になります。
ゲートウェイ認証のインバウンド ID プロバイダーとして Cognito ユーザープールを作成するには
-
ユーザープールを作成します。
aws cognito-idp create-user-pool \ --region us-west-2 \ --pool-name "gateway-user-pool" -
レスポンスからユーザープール ID を記録するか、以下を使用して取得します。
aws cognito-idp list-user-pools \ --region us-west-2 \ --max-results 60 -
ユーザープールのリソースサーバーを作成します。
aws cognito-idp create-resource-server \ --region us-west-2 \ --user-pool-id <UserPoolId> \ --identifier "gateway-resource-server" \ --name "GatewayResourceServer" \ --scopes '[{"ScopeName":"read","ScopeDescription":"Read access"}, {"ScopeName":"write","ScopeDescription":"Write access"}]' -
ユーザープールのクライアントを作成します。
aws cognito-idp create-user-pool-client \ --region us-west-2 \ --user-pool-id <UserPoolId> \ --client-name "gateway-client" \ --generate-secret \ --allowed-o-auth-flows client_credentials \ --allowed-o-auth-scopes "gateway-resource-server/read" "gateway-resource-server/write" \ --allowed-o-auth-flows-user-pool-client \ --supported-identity-providers "COGNITO"レスポンスからクライアント ID とクライアントシークレットを記録します。AgentCore Identity で Cognito プロバイダーを設定するには、これらの値が必要です。
-
必要に応じて、ユーザープールのドメインを作成します。
aws cognito-idp create-user-pool-domain \ --domain <UserPoolIdWithoutUnderscore> \ --user-pool-id <UserPoolId> \ --region us-west-2注記
ドメインの作成
UserPoolId時に からアンダースコアを削除します。たとえば、ユーザープール ID が「us-west-2_gmSGKKGr9」の場合、「us-west-2gmSGKKGr9」をドメインとして使用します。 -
Cognito ユーザープールの検出 URL を作成します。
https://cognito-idp.us-west-2.amazonaws.com/<UserPoolId>/.well-known/openid-configuration -
Gateway Inbound Auth を次の値で設定します。
-
検出 URL: 前のステップで構築された URL
-
許可されたクライアント: ユーザープールクライアントの作成時に取得したクライアント ID
-
アウトバウンド
注記
AgentCore Identity は、作成する認証情報プロバイダーごとに一意の OAuth2 コールバック URL を発行します。一意のコールバック URL により、セッションバインディングが有効になります。これにより、OAuth2 認可コード交換をクロスプロバイダーリプレイや CSRF 形式の攻撃から保護できます。これにより、認可レスポンスは、それを開始した特定の認証情報プロバイダーに対してのみ引き換えることができます。URL はプロバイダーごとに一意であるため、 を呼び出すまでわかりませんCreateOauth2CredentialProvider。最初に Cognito ユーザープールアプリクライアントを作成してから、Amazon Cognito コンソールに戻り、AgentCore Identity がコールバック URL を発行したら、コールバック URL を登録します。
ステップ 1: Cognito ユーザープールアプリクライアントを作成する
次の手順を使用して、アウトバウンド OAuth2 フェデレーション用の Cognito ユーザープールアプリクライアントを設定します。AgentCore Identity が一意のコールバック URL を発行した後、ステップ 3 でリダイレクト URI を登録します。
Cognito ユーザープールアプリクライアントを設定するには
-
Amazon Cognito コンソールで、アウトバウンドリソースプロバイダーとして使用するユーザープールを開くか、作成します。
-
ホストされた UI が認可コードを発行できるように、ユーザープールドメインを設定します。
-
ユーザープールのアプリケーションクライアントを作成し、クライアントシークレットを生成し、認可コード付与 OAuth2 フローを有効にします。
-
アプリケーションに必要な OAuth2 スコープを選択します。
-
現時点では、許可されたコールバック URLs フィールドを空のままにしておきます。ステップ 3 で一意のコールバック URL を追加します。
-
クライアント ID とクライアントシークレットを記録します。AgentCore Identity で Cognito プロバイダーを設定するには、これらの値が必要です。
-
ユーザープールのドメインプレフィックスとユーザープール ID を書き留めます。これらを使用して、ステップ 2 で認可、トークン、発行者のエンドポイントを作成します。
詳細については、Amazon Cognito デベロッパーガイド」の「アプリケーションクライアントの設定」を参照してください。
ステップ 2: AgentCore Identity 認証情報プロバイダーを作成する
Cognito ユーザープールをアウトバウンドリソースプロバイダーとして設定するには、次の設定を使用します。
{ "name": "Cognito", "credentialProviderVendor": "CognitoOauth2", "oauth2ProviderConfigInput" : { "includedOauth2ProviderConfig": { "clientId": "your-client-id", "clientSecret": "your-client-secret", "authorizationEndpoint": "https://{your-cognito-domain}.auth.us-east-1.amazoncognito.com/oauth2/authorize", "tokenEndpoint": "https://{your-cognito-domain}.auth.us-east-1.amazoncognito.com/oauth2/token", "issuer": "https://cognito-idp.us-east-1.amazonaws.com/{your-user-pool-id}" } } }
CreateOauth2CredentialProvider レスポンスには callbackUrlフィールドが含まれます。この URL はこの認証情報プロバイダーに固有であり、 のようになりますhttps://bedrock-agentcore.us-east-1.amazonaws.com/identities/oauth2/callback/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX。次のステップでこの値を保存します。
ステップ 3: 一意のコールバック URL を Cognito に登録する
Amazon Cognito コンソールに戻り、アプリケーションクライアントの許可されたコールバックに一意のコールバック URL を追加します。
-
Amazon Cognito コンソールで、ステップ 1 で作成したユーザープールアプリクライアントを開きます。
-
アプリケーションクライアントのホストされた UI 設定で、 によって返された
callbackUrl値をCreateOauth2CredentialProvider許可されたコールバック URL に追加します。 URLs -
変更内容を保存します。