Contoh: Otorisasi untuk gateway default dan target yang dibuat oleh CLI AgentCore
Jika Anda menggunakan AgentCore CLI untuk membuat gateway dan target Lambda, CLI mengonfigurasi otorisasi masuk dan otorisasi JWT-based keluar untuk Anda secara otomatis. IAM-based
Jika Anda memanggil gateway Anda menggunakanagentcore invoke, CLI menangani otentikasi secara otomatis. Langkah-langkah di bawah ini hanya diperlukan jika Anda ingin memanggil gateway secara terprogram (misalnya, menggunakan AWS SDK atau). curl
Untuk akses terprogram, Anda akan mengotorisasi dengan yang berikut:
-
Otorisasi masuk menggunakan JWT — Dapatkan token akses dari otorisasi Amazon Cognito yang secara otomatis disiapkan untuk Anda dan sertakan di header otorisasi. Lihat contoh di bawah ini untuk mempelajari cara mendapatkan token.
-
Otorisasi keluar menggunakan IAM - AgentCore CLI mengonfigurasi izin berikut untuk Anda, sehingga Anda tidak memerlukan pengaturan tambahan:
-
Peran layanan gateway Anda memiliki izin untuk memanggil semua fungsi di Lambda (disediakan oleh kebijakan terkelola). BedrockAgentCoreFullAccess
-
Fungsi Lambda yang dibuat dikonfigurasi dengan peran layanan gateway Anda sebagai Principal yang dapat memanggilnya.
Anda dapat memperoleh token akses yang dibuat untuk gateway Anda oleh AgentCore CLI dengan bantuan Amazon Cognito dengan mengumpulkan informasi berikut:
-
Titik akhir Token — Temukan di URL Discovery dalam konfigurasi otorisasi untuk gateway. Jika Anda menggunakan API, Anda dapat menemukan URL penemuan dengan mengirimkan ListGatewayspermintaan atau GetGatewaypermintaan untuk gateway Anda.
-
ID Klien — Temukan di informasi kumpulan pengguna Amazon Cognito. Jika Anda menggunakan API, Anda dapat mengirim ListUserPoolspermintaan atau DescribeUserPoolpermintaan untuk kumpulan pengguna yang terkait dengan gateway Anda.
-
Rahasia klien — Temukan di informasi klien aplikasi kumpulan pengguna Amazon Cognito. Jika Anda menggunakan API, Anda dapat mengirim DescribeUserPoolClientpermintaan, menentukan ID klien dan ID kumpulan pengguna yang terkait dengan gateway Anda.
Pertama, kumpulkan nilai-nilai ini dengan salah satu metode berikut. Pilih salah satu metode berikut:
contoh
- Console
-
-
Dapatkan titik akhir token:
-
Buka AgentCore konsol di https://console.aws.amazon.com/bedrock-agentcore/home#.
-
Dari panel navigasi kiri, pilih Gateway.
-
Di bagian Gateway, pilih gateway Anda.
-
Di bagian Inbound Identity, perhatikan nilai-nilai berikut:
-
Klien yang diizinkan — ID klien yang dapat mengakses gateway.
-
Discovery URL — Formatnya seharusnyahttps://cognito-idp.${Region}.amazonaws.com/${UserPoolId}/.well-known/openid-configuration. Simpan nilai-nilai berikut:
-
Dapatkan ID klien dan rahasia klien:
-
Buka konsol Amazon Cognito di. https://console.aws.amazon.com/cognito
-
Dari panel navigasi kiri, pilih Kumpulan pengguna.
-
Pilih ID kumpulan pengguna yang terkait dengan gateway Anda.
-
Dari panel navigasi kiri, pilih Klien aplikasi.
-
Pilih klien aplikasi yang ID Kliennya cocok dengan klien yang diizinkan untuk titik akhir token Anda. Simpan nilai ID.
-
Di bawah Rahasia klien, pilih Tampilkan rahasia klien dan simpan nilai itu.
- AWS CLI
-
-
Jalankan AgentCore get-gateway perintah di terminal dan tentukan ID gateway Anda dalam --gateway-identifier argumen, seperti pada contoh berikut:
aws bedrock-agentcore-control get-gateway --gateway-identifier my-gateway-id
-
Dari tanggapan, perhatikan discoveryUrl dari authorizerConfiguration lapangan:
-
Simpan ${UserPoolId} dari URL. Formatnya harushttps://cognito-idp.${Region}.amazonaws.com/${UserPoolId}/.well-known/openid-configuration.
-
Simpan allowedClients nilainya. Ini adalah ID klien yang dapat mengakses titik akhir token.
-
Arahkan ke discoveryUrl dalam browser dan simpan token_endpoint nilainya.
-
Jalankan describe-user-pool-client perintah Amazon Cognito di terminal dan tentukan ID kumpulan pengguna dalam --user-pool-id argumen dan ID klien yang diizinkan di --client-id bidang, seperti pada contoh berikut:
aws cognito-idp describe-user-pool-client --user-pool-id my-user-pool-id --client-id my-client-id
-
Simpan ClientSecret nilainya.
- AWS Python SDK (Boto3)
-
-
Jalankan kode Python berikut untuk menyimpan endpoint token, ID klien, dan rahasia klien sebagai variabel:
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"]
Kedua, gunakan nilai yang Anda kumpulkan untuk mengakses token dari titik akhir token. Pilih salah satu metode berikut:
contoh
- curl
-
-
Jalankan perintah berikut di terminal, ganti titik akhir token, ID klien, dan nilai rahasia klien.
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}"
Token berada di access_token bidang respons, sedangkan token_type bidang harus ditentukanBearer.
- Python requests package
-
-
Jalankan kode Python berikut untuk mendapatkan token akses Anda. Kode mengasumsikan bahwa Anda menyimpantoken_endpoint,client_id, dan client_secret nilai-nilai dari langkah sebelumnya:
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"]