Exemplo: Autorização para o gateway e o destino padrão criados pela AgentCore CLI
Se você usou a AgentCore CLI para criar um gateway e um destino Lambda, a CLI configura automaticamente a autorização de JWT-based entrada e a autorização de saída para você. IAM-based
Se você invocar seu gateway usandoagentcore invoke, a CLI manipula a autenticação automaticamente. As etapas abaixo só são necessárias se você quiser invocar o gateway programaticamente (por exemplo, usando o AWS SDK ou). curl
Para acesso programático, você autorizará com o seguinte:
-
Autorização de entrada usando o JWT — Obtenha o token de acesso da autorização do Amazon Cognito que foi configurada automaticamente para você e inclua-o no cabeçalho da autorização. Veja o exemplo abaixo para saber como obter o token.
-
Autorização de saída usando IAM — A AgentCore CLI configura as seguintes permissões para você, então você não precisa de nenhuma configuração adicional:
-
Sua função de serviço de gateway tem permissões para invocar todas as funções no Lambda (fornecidas pela política BedrockAgentCoreFullAccessgerenciada).
-
A função Lambda criada é configurada com sua função de serviço de gateway como uma Principal que pode invocá-la.
Você pode obter o token de acesso criado para seu gateway pela AgentCore CLI com a ajuda do Amazon Cognito coletando as seguintes informações:
-
Ponto final do token — encontre no URL do Discovery na configuração do autorizador do gateway. Se você usa a API, pode encontrar o URL de descoberta enviando uma ListGatewayssolicitação ou uma GetGatewaysolicitação para seu gateway.
-
ID do cliente — Encontre as informações do grupo de usuários do Amazon Cognito. Se você usa a API, pode enviar uma ListUserPoolssolicitação ou uma DescribeUserPoolsolicitação para o grupo de usuários associado ao seu gateway.
-
Segredo do cliente — Encontre no aplicativo do grupo de usuários do Amazon Cognito as informações do cliente. Se você usa a API, pode enviar uma DescribeUserPoolClientsolicitação, especificando o ID do cliente e o ID do grupo de usuários associados ao seu gateway.
Primeiro, colete esses valores com um dos métodos a seguir. Selecione um dos seguintes métodos:
exemplo
- Console
-
-
Obtenha o endpoint do token:
-
Abra o AgentCore console em https://console.aws.amazon.com/bedrock-agentcore/home#.
-
No painel de navegação esquerdo, escolha Gateways.
-
Na seção Gateways, selecione seu gateway.
-
Na seção Identidade de entrada, observe os seguintes valores:
-
Clientes permitidos — Os IDs de clientes que podem acessar o gateway.
-
URL de descoberta — O formato deve serhttps://cognito-idp.${Region}.amazonaws.com/${UserPoolId}/.well-known/openid-configuration. Armazene os seguintes valores:
-
Obtenha o ID do cliente e o segredo do cliente:
-
Abra o console do Amazon Cognito em https://console.aws.amazon.com/cognito.
-
No painel de navegação esquerdo, selecione Grupos de usuários.
-
Selecione o ID do grupo de usuários associado ao seu gateway.
-
No painel de navegação esquerdo, escolha Clientes de aplicativos.
-
Selecione um cliente de aplicativo cujo ID do cliente corresponda aos clientes permitidos para seu endpoint de token. Armazene o valor do ID.
-
Em Segredo do cliente, selecione Mostrar segredo do cliente e armazene esse valor.
- AWS CLI
-
-
Execute o AgentCore get-gateway comando em um terminal e especifique o ID do gateway no --gateway-identifier argumento, como no exemplo a seguir:
aws bedrock-agentcore-control get-gateway --gateway-identifier my-gateway-id
-
A partir da resposta, observe o discoveryUrl do authorizerConfiguration campo:
-
Armazene o ${UserPoolId} do URL. O formato deveria serhttps://cognito-idp.${Region}.amazonaws.com/${UserPoolId}/.well-known/openid-configuration.
-
Armazene os allowedClients valores. Esses são os IDs do cliente que podem acessar o endpoint do token.
-
Navegue até o discoveryUrl em um navegador e armazene o token_endpoint valor.
-
Execute o describe-user-pool-client comando Amazon Cognito em um terminal e especifique o ID do grupo de usuários no --user-pool-id argumento e um ID de cliente permitido no --client-id campo, como no exemplo a seguir:
aws cognito-idp describe-user-pool-client --user-pool-id my-user-pool-id --client-id my-client-id
-
Armazene o ClientSecret valor.
- AWS Python SDK (Boto3)
-
-
Execute o código Python a seguir para armazenar o endpoint do token, o ID do cliente e o segredo do cliente como variáveis:
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"]
Em segundo lugar, use os valores que você coletou para acessar o token a partir do endpoint do token. Selecione um dos seguintes métodos:
exemplo
- curl
-
-
Execute o comando a seguir em um terminal, substituindo os valores de endpoint do token, ID do cliente e segredo do cliente.
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}"
O token está no access_token campo da resposta, enquanto o token_type campo deve especificarBearer.
- Python requests package
-
-
Execute o código Python a seguir para obter seu token de acesso. O código pressupõe que você armazenou client_secret os valores token_endpointclient_id, e da etapa anterior:
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"]