Amazon Cognito
Amazon Cognito는 AgentCore Gateway 및 런타임에 액세스하기 위한 자격 증명 공급자 또는 아웃바운드 리소스 액세스를 위한 AgentCore 자격 증명 공급자로 구성할 수 있습니다. 이렇게 하면 에이전트가 자격 증명 공급자 및 권한 부여 서버로 Cognito를 사용하여 에이전트 사용자를 인증하고 권한을 부여하거나 에이전트가 Cognito에서 승인한 리소스에 액세스하기 위한 자격 증명을 얻을 수 있습니다.
인바운드
AgentCore Gateway 및 런타임에 액세스하기 위한 자격 증명 공급자 및 권한 부여 서버로 Cognito를 추가하려면 다음을 수행해야 합니다.
-
IDP 디렉터리에서 검색 URL을 구성합니다. 이렇게 하면 AgentCore Identity가 OAuth 권한 부여 서버 및 토큰 확인 키와 관련된 메타데이터를 가져올 수 있습니다.
-
토큰에 유효한
clientId또는aud클레임을 입력합니다. 이렇게 하면 IDP에서 오는 토큰을 검증하고 예상 클레임이 포함된 토큰에 대한 액세스를 허용할 수 있습니다.
다음 절차에 따라 AgentCore 런타임으로 사용자 인증을 위한 인바운드 자격 증명 공급자로 Cognito 사용자 풀을 생성합니다. 다음 단계에서는 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다음 단계에서는 이러한 값이 필요합니다.
다음 절차에 따라 AgentCore Gateway를 사용한 machine-to-machine 인증을 위한 인바운드 자격 증명 공급자로 Cognito 사용자 풀을 생성합니다. 다음 단계에서는 사용자 풀, 리소스 서버, 클라이언트 자격 증명 및 검색 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와 클라이언트 암호를 기록합니다. AgentCore 자격 증명에서 Cognito 공급자를 구성하려면 이러한 값이 필요합니다.
-
필요한 경우 사용자 풀에 대한 도메인을 생성합니다.
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 사용자 풀의 검색 URL을 구성합니다.
https://cognito-idp.us-west-2.amazonaws.com/<UserPoolId>/.well-known/openid-configuration -
다음 값을 사용하여 게이트웨이 인바운드 인증을 구성합니다.
-
검색 URL: 이전 단계에서 구성된 URL
-
허용된 클라이언트: 사용자 풀 클라이언트를 생성할 때 얻은 클라이언트 ID입니다.
-
아웃바운드
참고
AgentCore 자격 증명은 생성한 각 자격 증명 공급자에 대해 고유한 OAuth2 콜백 URL을 발급합니다. 고유한 콜백 URL을 사용하면 세션 바인딩이 가능하여 권한 부여 응답을 시작한 특정 자격 증명 공급자에 대해서만 사용할 수 있도록 하여 교차 공급자 재생 및 CSRF 스타일 공격으로부터 OAuth2 권한 부여 코드 교환을 보호합니다. URL은 공급자별로 고유하므로를 호출할 때까지 URL을 알 수 없습니다CreateOauth2CredentialProvider. 먼저 Cognito 사용자 풀 앱 클라이언트를 생성한 다음 AgentCore 자격 증명이 콜백 URL을 발급하면 Amazon Cognito 콘솔로 돌아가 콜백 URL을 등록합니다.
1단계: Cognito 사용자 풀 앱 클라이언트 생성
다음 절차에 따라 아웃바운드 OAuth2 페더레이션을 위한 Cognito 사용자 풀 앱 클라이언트를 설정합니다. AgentCore 자격 증명이 고유한 콜백 URL을 발급한 후 3단계에서 리디렉션 URI를 등록합니다.
Cognito 사용자 풀 앱 클라이언트를 구성하려면
-
Amazon Cognito 콘솔에서 아웃바운드 리소스 공급자로 사용할 사용자 풀을 열거나 생성합니다.
-
호스팅 UI가 권한 부여 코드를 발급할 수 있도록 사용자 풀 도메인을 구성합니다.
-
사용자 풀에 대한 앱 클라이언트를 생성하고, 클라이언트 보안 암호를 생성하고, 권한 부여 코드 권한 부여 OAuth2 흐름을 활성화합니다.
-
애플리케이션에 필요한 OAuth2 범위를 선택합니다.
-
지금은 허용된 콜백 URLs 필드를 비워 둡니다. 3단계에서 고유한 콜백 URL을 추가합니다.
-
클라이언트 ID와 클라이언트 암호를 기록합니다. AgentCore 자격 증명에서 Cognito 공급자를 구성하려면 이러한 값이 필요합니다.
-
사용자 풀의 도메인 접두사와 사용자 풀 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 필드가 포함됩니다. 이 URL은이 자격 증명 공급자에 고유하며 다음과 같습니다https://bedrock-agentcore.us-east-1.amazonaws.com/identities/oauth2/callback/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. 다음 단계를 위해이 값을 저장합니다.
3단계: Cognito에 고유한 콜백 URL 등록
Amazon Cognito 콘솔로 돌아가서 앱 클라이언트의 허용된 콜백에 고유한 콜백 URL을 추가합니다.
-
Amazon Cognito 콘솔에서 1단계에서 생성한 사용자 풀 앱 클라이언트를 엽니다.
-
앱 클라이언트의 호스팅 UI 구성에서에서 반환한
callbackUrl값을 허용된 콜백 URLsCreateOauth2CredentialProvider에 추가합니다. -
변경 내용을 저장합니다.