View a markdown version of this page

Amazon Cognito - Amazon Bedrock AgentCore

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 사용자 풀을 생성하려면

  1. 다음 콘텐츠가 포함된 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"
  2. 스크립트를 실행하여 Cognito 리소스를 생성합니다.

    source setup_cognito.sh
  3. 다음과 비슷한 출력 값을 기록합니다.

    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 사용자 풀을 게이트웨이 인증을 위한 인바운드 자격 증명 공급자로 생성하려면

  1. 사용자 풀 생성:

    aws cognito-idp create-user-pool \ --region us-west-2 \ --pool-name "gateway-user-pool"
  2. 응답에서 사용자 풀 ID를 기록하거나 다음을 사용하여 검색합니다.

    aws cognito-idp list-user-pools \ --region us-west-2 \ --max-results 60
  3. 사용자 풀에 대한 리소스 서버를 생성합니다.

    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"}]'
  4. 사용자 풀에 대한 클라이언트를 생성합니다.

    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 공급자를 구성하려면 이러한 값이 필요합니다.

  5. 필요한 경우 사용자 풀에 대한 도메인을 생성합니다.

    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"를 도메인으로 사용합니다.

  6. Cognito 사용자 풀의 검색 URL을 구성합니다.

    https://cognito-idp.us-west-2.amazonaws.com/<UserPoolId>/.well-known/openid-configuration
  7. 다음 값을 사용하여 게이트웨이 인바운드 인증을 구성합니다.

    1. 검색 URL: 이전 단계에서 구성된 URL

    2. 허용된 클라이언트: 사용자 풀 클라이언트를 생성할 때 얻은 클라이언트 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 사용자 풀 앱 클라이언트를 구성하려면

  1. Amazon Cognito 콘솔에서 아웃바운드 리소스 공급자로 사용할 사용자 풀을 열거나 생성합니다.

  2. 호스팅 UI가 권한 부여 코드를 발급할 수 있도록 사용자 풀 도메인을 구성합니다.

  3. 사용자 풀에 대한 앱 클라이언트를 생성하고, 클라이언트 보안 암호를 생성하고, 권한 부여 코드 권한 부여 OAuth2 흐름을 활성화합니다.

  4. 애플리케이션에 필요한 OAuth2 범위를 선택합니다.

  5. 지금은 허용된 콜백 URLs 필드를 비워 둡니다. 3단계에서 고유한 콜백 URL을 추가합니다.

  6. 클라이언트 ID클라이언트 암호를 기록합니다. AgentCore 자격 증명에서 Cognito 공급자를 구성하려면 이러한 값이 필요합니다.

  7. 사용자 풀의 도메인 접두사와 사용자 풀 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을 추가합니다.

  1. Amazon Cognito 콘솔에서 1단계에서 생성한 사용자 풀 앱 클라이언트를 엽니다.

  2. 앱 클라이언트의 호스팅 UI 구성에서에서 반환한 callbackUrl 값을 허용된 콜백 URLsCreateOauth2CredentialProvider에 추가합니다.

  3. 변경 내용을 저장합니다.