Amazon Cognito
可以将 Amazon Cognito 配置为用于访问 AgentCore 网关和运行时的身份提供商,或配置为用于出站资源访问的 AgentCore 身份凭证提供商。这允许您的代理使用 Cognito 作为身份提供者和授权服务器对代理用户进行身份验证和授权,或者您的代理获取凭据以访问由 Cognito 授权的资源。
入站
要将 Cognito 添加为身份提供者和授权服务器以访问 AgentCore 网关和运行时,您必须:
-
从 IDP 目录配置发现 URL。这有助于 AgentCore Identity 获取与您的 OAuth 授权服务器和令牌验证密钥相关的元数据。
-
为令牌输入有效
clientId或aud索赔。这有助于验证来自您的 IDP 的代币,并允许访问包含预期声明的代币。
使用以下步骤创建 Cognito 用户池作为入站身份提供者,用于通过 Runtime 进行用户身份验证。 AgentCore 以下步骤将创建 Cognito 用户池、用户池客户端、添加用户并为该用户生成不记名令牌。默认情况下,该令牌的有效期为 60 分钟。
创建 Cognito 用户池作为运行时身份验证的入站身份提供者
-
使用以下内容创建名为
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" -
运行脚本创建 Cognito 资源:
source setup_cognito.sh -
记录输出值,如下所示:
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在接下来的步骤中,您将需要这些值。
使用以下步骤创建 Cognito 用户池作为入站身份提供者,用于通过 Gateway 进行机器对机器身份验证。 AgentCore 以下步骤将创建用户池、资源服务器、客户机凭据和发现 URL 配置。此设置为网关访问启用 M2M 身份验证流程。
创建 Cognito 用户池作为网关身份验证的入站身份提供者
-
创建用户池:
aws cognito-idp create-user-pool \ --region us-west-2 \ --pool-name "gateway-user-pool" -
记录响应中的用户池 ID 或使用以下方法检索它:
aws cognito-idp list-user-pools \ --region us-west-2 \ --max-results 60 -
为用户池创建资源服务器:
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"}]' -
为用户池创建客户端:
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 和客户端密钥。您需要这些值才能在 Identity 中配置 Cognito 提供程序。 AgentCore
-
如果需要,请为您的用户池创建一个域:
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” 作为域名。 -
为您的 Cognito 用户池构建发现网址:
https://cognito-idp.us-west-2.amazonaws.com/<UserPoolId>/.well-known/openid-configuration -
使用以下值配置网关入站身份验证:
-
发现 URL:在上一步中构造的 URL
-
允许的客户端:创建用户池客户端时获得的客户端 ID
-
出站
注意
AgentCore Identity 会为您创建的每个凭据提供商发出唯一的 OAuth2 回调 URL。唯一的回调 URL 支持会话绑定,通过确保授权响应只能针对启动它的特定凭据提供商兑换,从而保护 OAuth2 授权码交换免受跨提供商重播和 CSRF-style 攻击。由于每个提供商的网址是唯一的,因此您要等到致电后才能知道CreateOauth2CredentialProvider。首先创建您的 Cognito 用户池应用程序客户端,然后在 Identity 发布回传网址 AgentCore 后返回 Amazon Cognito 控制台注册回传网址。
第 1 步:创建 Cognito 用户池应用程序客户端
使用以下步骤为出站 OAuth2 联合设置一个 Cognito 用户池应用程序客户端。在 Ident AgentCore ity 发出唯一回调 URL 之后,您将在步骤 3 中注册重定向 URI。
配置 Cognito 用户池应用程序客户端
-
在 Amazon Cognito 控制台中,打开或创建要用作出站资源提供者的用户池。
-
配置用户池域,以便托管用户界面可以发布授权码。
-
为用户池创建应用程序客户端,生成客户端密钥,然后启用授权码授予 OAuth2 流程。
-
选择您的应用程序所需的 OAuth2 范围。
-
暂时将允许的回传 URL 字段留空 — 您将在步骤 3 中添加唯一的回传 URL。
-
记录客户端 ID 和客户机密钥。您需要这些值才能在 Identity 中配置 Cognito 提供程序。 AgentCore
-
记下您的用户池的域名前缀和用户池 ID。在步骤 2 中,您将使用它们来构造授权、令牌和颁发者端点。
有关更多详细信息,请参阅 Amazon Cognito 开发者指南中的配置应用程序客户端。
步骤 2:创建 AgentCore 身份凭证提供商
要将 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字段。此网址是该凭证提供商所独有的,看起来像:https://bedrock-agentcore.us-east-1.amazonaws.com/identities/oauth2/callback/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. 保存此值以供下一步使用。
第 3 步:在 Cognito 中注册唯一的回传网址
返回 Amazon Cognito 控制台,将唯一的回传网址添加到您的应用程序客户端允许的回传中。
-
在 Amazon Cognito 控制台中,打开您在步骤 1 中创建的用户池应用程序客户端。
-
在应用程序客户端的托管界面配置中,将返回的
callbackUrl值添加CreateOauth2CredentialProvider到 “允许的回传 URL”。 -
保存更改。