View a markdown version of this page

Amazon Cognito - Amazon Bedrock AgentCore

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 ユーザープールを作成するには

  1. 以下の内容で 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"
  2. スクリプトを実行して Cognito リソースを作成します。

    source setup_cognito.sh
  3. 次のような出力値を記録します。

    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 ユーザープールを作成するには

  1. ユーザープールを作成します。

    aws cognito-idp create-user-pool \ --region us-west-2 \ --pool-name "gateway-user-pool"
  2. レスポンスからユーザープール ID を記録するか、以下を使用して取得します。

    aws cognito-idp list-user-pools \ --region us-west-2 \ --max-results 60
  3. ユーザープールのリソースサーバーを作成します。

    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"}]'
  4. ユーザープールのクライアントを作成します。

    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 プロバイダーを設定するには、これらの値が必要です。

  5. 必要に応じて、ユーザープールのドメインを作成します。

    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」をドメインとして使用します。

  6. Cognito ユーザープールの検出 URL を作成します。

    https://cognito-idp.us-west-2.amazonaws.com/<UserPoolId>/.well-known/openid-configuration
  7. Gateway Inbound Auth を次の値で設定します。

    1. 検出 URL: 前のステップで構築された URL

    2. 許可されたクライアント: ユーザープールクライアントの作成時に取得したクライアント 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 ユーザープールアプリクライアントを設定するには

  1. Amazon Cognito コンソールで、アウトバウンドリソースプロバイダーとして使用するユーザープールを開くか、作成します。

  2. ホストされた UI が認可コードを発行できるように、ユーザープールドメインを設定します。

  3. ユーザープールのアプリケーションクライアントを作成し、クライアントシークレットを生成し、認可コード付与 OAuth2 フローを有効にします。

  4. アプリケーションに必要な OAuth2 スコープを選択します。

  5. 現時点では、許可されたコールバック URLs フィールドを空のままにしておきます。ステップ 3 で一意のコールバック URL を追加します。

  6. クライアント IDクライアントシークレットを記録します。AgentCore Identity で Cognito プロバイダーを設定するには、これらの値が必要です。

  7. ユーザープールのドメインプレフィックスとユーザープール 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 を追加します。

  1. Amazon Cognito コンソールで、ステップ 1 で作成したユーザープールアプリクライアントを開きます。

  2. アプリケーションクライアントのホストされた UI 設定で、 によって返されたcallbackUrl値をCreateOauth2CredentialProvider許可されたコールバック URL に追加します。 URLs

  3. 変更内容を保存します。