AgentCore Runtime を OAuth 認証で呼び出してみた
はじめに
AgentCore Runtime は IAM 認証と OAuth 認証の両方をサポートしていますが、Web アプリケーションから呼び出すなら OAuth の方が自然ですよね。今回は Cognito User Pool を使った OAuth 認証で AgentCore Runtime をセットアップし、JWT トークンで認証してみました。
認証方式の選択について
AgentCore では以下の2つの認証方式が選べます:
- IAM 認証: CLI や AWS サービスからの呼び出しには便利だが、Web からの呼び出しには向かない
-
OAuth 認証: Web アプリケーションには最適だが、
agentcore
コマンドからは実行できない
環境準備
まず注意点として、執筆時点(2025/09/19)では AgentCore は東京リージョンに対応していないため、オレゴンリージョンを環境変数に設定しておきます。(サポートされていればどこでも良いです。)
export AWS_DEFAULT_REGION=us-west-2
Cognito User Pool の作成
OAuth 認証のために Cognito User Pool を作成します。User Pool 自体は東京リージョンでも問題ありません。テスト用のユーザーも作っておきます。
AgentCore Runtime のセットアップ
1. プロジェクトファイルの準備
まず、シンプルな AgentCore Runtime を作成します:
# main.py
from bedrock_agentcore import BedrockAgentCoreApp
app = BedrockAgentCoreApp()
@app.entrypoint
def invoke(payload):
# エージェントとは...?
return {"hello": "world"}
if __name__ == "__main__":
app.run()
# requirements.txt
bedrock-agentcore
2. OAuth 認証の設定
以下のコマンドで設定を開始します:
uvx --from bedrock-agentcore-starter-toolkit@latest agentcore configure -e main.py
設定時に OAuth 認証を選択し、以下の情報を入力します:
🔐 Authorization Configuration
By default, Bedrock AgentCore uses IAM authorization.
Configure OAuth authorizer instead? (yes/no) [no]: yes
📋 OAuth Configuration
Enter OAuth discovery URL: https://cognito-idp.<USER POOL REGION>.amazonaws.com/<USER POOL ID>/.well-known/openid-configuration
Enter allowed OAuth client IDs (comma-separated): <CLIENT ID>
Enter allowed OAuth audience (comma-separated):
✓ OAuth authorizer configuration created
3. デプロイ
設定が完了したら、以下でデプロイします:
uvx --from bedrock-agentcore-starter-toolkit@latest agentcore launch
OAuth 認証でのテスト
デプロイ後、通常の agentcore invoke
コマンドを実行すると以下のエラーになります:
uvx --from bedrock-agentcore-starter-toolkit@latest agentcore invoke '{"prompt": "Hello"}'
# Invocation failed: An error occurred (AccessDeniedException) when calling the InvokeAgentRuntime operation: Authorization method mismatch.
これは想定通りです。OAuth 認証が設定されているためです。
JWT トークンでの認証テスト
Cognito から JWT トークンを取得して AgentCore を呼び出すテストスクリプトを作成します。
#!/bin/bash
set -eux
# .bedrock_agentcore.yaml の agent_arn の値を設定
export AGENTCORE_RUNTIME_ARN=<YOUR_AGENT_ARN>
export USER_POOL_ID=<YOUR_USER_POOL_ID>
export CLIENT_ID=<YOUR_CLIENT_ID>
export USERNAME=<YOUR_USERNAME>
export PASSWORD=<YOUR_PASSWORD>
# Cognito からアクセストークンを取得
export TOKEN=$(aws cognito-idp admin-initiate-auth \
--client-id "$CLIENT_ID" \
--user-pool-id "$USER_POOL_ID" \
--auth-flow ADMIN_USER_PASSWORD_AUTH \
--auth-parameters USERNAME="$USERNAME",PASSWORD="$PASSWORD" \
--region ap-northeast-1 | jq -r '.AuthenticationResult.AccessToken')
export BEDROCK_AGENT_CORE_ENDPOINT_URL="https://bedrock-agentcore.${AWS_DEFAULT_REGION}.amazonaws.com"
export ESCAPED_AGENT_ARN=$(echo $AGENTCORE_RUNTIME_ARN | jq -Rr @uri)
# JWT トークンで AgentCore を呼び出し
curl -X POST "${BEDROCK_AGENT_CORE_ENDPOINT_URL}/runtimes/${ESCAPED_AGENT_ARN}/invocations?qualifier=DEFAULT" \
-H "Authorization: Bearer ${TOKEN}" \
-H "X-Amzn-Trace-Id: your-trace-id" \
-H "Content-Type: application/json" \
-H "X-Amzn-Bedrock-AgentCore-Runtime-Session-Id: thisisatestthisisatestthisisatestthisisatest" \
-d '{"hello": "world"}'
実行すると以下の結果が得られます:
{"hello": "world"}
成功です!Cognito で取得した JWT アクセストークンで AgentCore Runtime を呼び出せました。
他のアプローチとの比較
GenU では、Cognito Identity Pool を使って Cognito 認証を AWS Credentials に変換し、IAM 認証で呼び出しています。
まとめ
AWS Bedrock AgentCore Runtime の OAuth 認証セットアップを試してみました。JWT トークンでの認証により、Web アプリケーションからの呼び出しがとてもシンプルになります。
Web アプリケーションで AgentCore を活用する際は、ぜひ OAuth 認証を検討してみてください!
Discussion