例: AgentCore CLI によって作成されたデフォルトゲートウェイとターゲットの承認
AgentCore CLI を使用してゲートウェイと Lambda ターゲットを作成した場合、CLI は JWT ベースのインバウンド認可と IAM ベースのアウトバウンド認可を自動的に設定します。
を使用してゲートウェイを呼び出すとagentcore invoke、CLI は自動的に認証を処理します。以下のステップは、プログラムでゲートウェイを呼び出す ( AWS SDK や を使用するなど) curl 場合にのみ必要です。
プログラムによるアクセスの場合は、以下を使用して を承認します。
次の情報を収集することで、Amazon Cognito の助けを借りて AgentCore CLI によってゲートウェイ用に作成されたアクセストークンを取得できます。
-
トークンエンドポイント – ゲートウェイのオーソライザー設定の Discovery URL で検索します。API を使用する場合は、ゲートウェイの ListGateways リクエストまたは GetGateway リクエストを送信することで、検出 URL を見つけることができます。
-
クライアント ID – Amazon Cognito ユーザープール情報で検索します。API を使用する場合は、ゲートウェイに関連付けられたユーザープールに対して ListUserPools リクエストまたは DescribeUserPool リクエストを送信できます。
-
クライアントシークレット – Amazon Cognito ユーザープールアプリのクライアント情報で検索します。API を使用する場合は、DescribeUserPoolClient リクエストを送信して、ゲートウェイに関連付けられたクライアント ID とユーザープール ID を指定できます。
まず、次のいずれかの方法を使用してこれらの値を収集します。次のいずれかの方法を選択します。
例
- Console
-
-
トークンエンドポイント を取得します。
-
クライアント ID とクライアントシークレット を取得します。
-
Amazon Cognito コンソール (https://console.aws.amazon.com/cognito) を開きます。
-
左側のナビゲーションペインで、ユーザープールを選択します。
-
ゲートウェイに関連付けられたユーザープール ID を選択します。
-
左側のナビゲーションペインから、アプリクライアントを選択します。
-
クライアント ID がトークンエンドポイントの許可されたクライアントと一致するアプリケーションクライアントを選択します。ID 値を保存します。
-
クライアントシークレット で、クライアントシークレットを表示 を選択し、その値を保存します。
- AWS CLI
-
-
ターミナルで AgentCore get-gateway コマンドを実行し、次の例のように --gateway-identifier引数でゲートウェイ ID を指定します。
aws bedrock-agentcore-control get-gateway --gateway-identifier my-gateway-id
-
レスポンスから、 authorizerConfigurationフィールドdiscoveryUrlの を書き留めます。
-
URL ${UserPoolId}から を保存します。形式は である必要がありますhttps://cognito-idp.${Region}.amazonaws.com/${UserPoolId}/.well-known/openid-configuration。
-
allowedClients 値を保存します。これらは、トークンエンドポイントにアクセスできるクライアント IDs です。
-
ブラウザdiscoveryUrlで に移動し、token_endpoint値を保存します。
-
ターミナルで Amazon Cognito describe-user-pool-client コマンドを実行し、次の例のように、 --user-pool-id引数にユーザープール ID、 --client-idフィールドに許可されたクライアント ID を指定します。
aws cognito-idp describe-user-pool-client --user-pool-id my-user-pool-id --client-id my-client-id
-
ClientSecret 値を保存します。
- AWS Python SDK (Boto3)
-
-
次の Python コードを実行して、トークンエンドポイント、クライアント ID、クライアントシークレットを変数として保存します。
import requests
import boto3
# Initialize AWS clients
agentcore_client = boto3.client("bedrock-agentcore-control")
cognito_client = boto3.client("cognito-idp")
# Replace with your actual gateway ID
gateway_id = "my-gateway-id"
# Get discovery URL and first allowed client
auth_config = agentcore_client.get_gateway(gatewayIdentifier=gateway_id)["authorizerConfiguration"]["customJWTAuthorizer"]
discovery_url, client_id = auth_config["discoveryUrl"], auth_config["allowedClients"][0]
# Get token endpoint from discovery URL
discovery_url_json = requests.get(discovery_url).json()
token_endpoint, user_pool_id = discovery_url_json["token_endpoint"], discovery_url_json["issuer"].split("/")[-1]
# Get client secret
client_secret = cognito_client.describe_user_pool_client(
UserPoolId=user_pool_id,
ClientId=client_id
)["UserPoolClient"]["ClientSecret"]
次に、収集した値を使用して、トークンエンドポイントからトークンにアクセスします。次のいずれかの方法を選択します。
例
- curl
-
-
ターミナルで次のコマンドを実行し、トークンエンドポイント、クライアント ID、クライアントシークレット値を置き換えます。
curl --http1.1 -X POST ${TokenEndpoint} \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials&client_id=${ClientId}&client_secret=${ClientSecret}"
トークンはレスポンスの access_tokenフィールドにありますが、 token_typeフィールドは を指定する必要がありますBearer。
- Python requests package
-
-
次の Python コードを実行して、アクセストークンを取得します。このコードは、前のステップの token_endpoint 、、および client_id client_secret値を保存したことを前提としています。
import requests
import json
def get_access_token(token_endpoint, client_id, client_secret):
headers={
"Content-Type": "application/x-www-form-urlencoded"
}
payload={
"grant_type": "client_credentials",
"client_id": client_id,
"client_secret": client_secret
}
response = requests.post(token_endpoint, headers=headers, data=payload)
return response.json()
# Replace the argument values as necessary, if you didn't previously store them as these variables
access_token_response = get_access_token(
token_endpoint=token_endpoint,
client_id=client_id,
client_secret=client_secret
)
access_token = access_token_response["access_token"]