다른 AWS 계정에서 Amazon Cognito 사용자 풀을 통해 사용자를 인증하려면 Application Load Balancer를 어떻게 설정해야 합니까?

최종 업데이트 날짜: 2021년 7월 21일

Application Load Balancer에서 Amazon Cognito 인증을 사용하고 싶지만 사용자 풀이 다른 AWS 계정에 있습니다. 인증에 교차 계정 사용자 풀을 사용할 수 있습니까?

간략한 설명

현재는 사용자 인증을 위해 Application Load Balancer를 구성할 때 기본적으로 동일한 계정의 Amazon Cognito 사용자 풀만 지원됩니다. 그러나 차선책으로 교차 계정 사용자 풀을 OpenID Connect(OIDC) 자격 증명 공급자(IdP)로 설정할 수 있습니다.

다음의 안내에 따라 한 계정("계정 B")에서 다른 계정(“계정 A”)에서 사용자 풀을 통한 인증을 위해 Application Load Balancer를 구성할 수 있습니다.

해결 방법

Application Load Balancer 생성

아직 생성하지 않았다면 계정 B에서 HTTPS 리스너Application Load Balancer를 생성합니다.

참고: authenticate-cognitoauthenticate-oidc 규칙 작업 유형은 HTTPS 리스너에서만 지원됩니다.

계정 B에서 Application Load Balancer의 DNS 이름 가져오기

  1. 계정 B에서 Amazon Elastic Compute Cloud(Amazon EC2) 콘솔의 [로드 밸런서(Load Balancers)] 페이지를 엽니다.
  2. Application Load Balancer를 선택합니다.
  3. [설명] 탭에서 로드 밸런서의 DNS 이름을 복사합니다. 나중에 테스트할 때 로드 밸런서의 엔드포인트 URL에 액세스하려면 이 이름이 필요합니다.

계정 A에서 사용자 풀 생성 및 구성

  1. 계정 A에서 앱 클라이언트Amazon Cognito 사용자 풀을 생성합니다. 앱 클라이언트의 경우 [클라이언트 비밀 생성(Generate client secret)] 확인란을 선택해야 합니다. 자세한 내용은 Amazon Cognito 사용 준비를 참조하세요.
    참고: 사용자 풀 생성 시 프로덕션에 원하는 설정을 구성합니다. 사용자 풀을 생성한 뒤에는 일부 사용자 풀 설정을 변경할 수 없습니다. 예를 들어 사용자 등록에 필요한 표준 속성을 변경할 수 없습니다.
  2. Amazon Cognito 콘솔의 사용자 풀 [일반 설정] 페이지에 있는 풀 ID를 메모합니다. 이 ID는 나중에 사용자 풀의 OIDC 구성 세부 정보를 가져올 때 필요합니다.
  3. 왼쪽 탐색 창의 [일반 설정]에서 [앱 클라이언트]를 선택합니다.
  4. [앱 클라이언트] 페이지에서 다음 작업을 수행합니다.
    [세부 정보 표시]를 선택합니다.
    앱 클라이언트 ID앱 클라이언트 시크릿을 복사합니다. 이 정보는 나중에 사용자 인증을 위해 Application Load Balancer를 구성할 때 필요합니다.
  5. 왼쪽 탐색 창의 [앱 통합]에서 [앱 클라이언트 설정]을 선택합니다.
  6. [앱 클라이언트 설정] 페이지에서 다음 작업을 수행하십시오.
    [자격 증명 공급자 활성화]에서 [Cognito 사용자 풀] 확인란을 선택합니다.
    콜백 URLhttps://loadBalancerDNSName/oauth2/idpresponse를 입력합니다. 또는, CNAME 레코드를 사용하여 로드 밸런서에 사용자 지정 도메인을 매핑했다면 https://CNAME/oauth2/idpresponse를 입력합니다.
    참고: loadBalancerDNSName은 Amazon EC2 콘솔에서 복사한 DNS 이름으로 바꿉니다. CNAME 레코드를 사용할 경우 CNAME을 사용자 지정 도메인으로 교체합니다.
    로그아웃 URL에 로그아웃 후 사용자를 리디렉션하고자 하는 URL을 입력합니다. https://example.com/과 같은 유효한 URL을 입력하여 테스트할 수 있습니다.
    [허용된 OAuth 플로우]에서 [인증 코드 부여] 등의 확인란을 선택합니다.
    [허용된 OAuth 범위]에서 [openid] 확인란 등을 선택합니다. openid 범위는 ID 토큰을 반환합니다. 요구 사항에 따라 추가적인 OAuth 범위를 선택합니다.
  7. [변경 사항 저장]을 선택합니다.
  8. 왼쪽 탐색 창의 [앱 통합]에서 [도메인 이름]을 선택합니다.
  9. 사용자 풀에 도메인 이름을 추가합니다.

자세한 내용은 사용자 풀 앱 클라이언트 구성사용자 풀에 OIDC 자격 증명 공급자 추가를 참조하세요.

사용자 풀의 OIDC 구성 세부 정보 가져오기

사용자 풀의 OIDC 구성 엔드포인트에 액세스합니다. Application Load Balancer에서 사용자 풀을 OIDC IdP로 설정하려면 구성 세부 정보가 필요합니다.

  1. 브라우저에서 다음 URL을 입력합니다.
    https://cognito-idp.region.amazonaws.com/userPoolId/.well-known/openid-configuration
    참고: region을 사용자 풀의 AWS 리전으로 바꿉니다. (예: us-east-1) userPoolId를 앞서 메모한 사용자 풀 ID로 바꿉니다.
  2. 브라우저에 표시되는 JSON 응답을 복사합니다. 다음 값을 기록합니다.
    authorization_endpoint
    issuer
    scopes_supported
    token_endpoint
    userinfo_endpoint

계정 B에서 Application Load Balancer 구성

  1. 계정 B에서 Amazon EC2 콘솔의 [로드 밸런서(Load Balancers)] 페이지에서 자신의 Application Load Balancer를 선택합니다.
  2. [리스너] 탭의 [규칙]에서 HTTPS 리스너에 대해 [규칙 보기/편집]을 선택합니다.
  3. 메뉴 모음에서 연필 아이콘(규칙 편집)을 선택합니다.
  4. HTTPS 리스너의 기본 규칙 옆에 있는 연필 아이콘(규칙 편집)을 선택합니다.
  5. THEN에서 [작업 추가]를 선택한 다음, 아래의 작업을 수행합니다.
    [인증]을 선택합니다.
    [인증]에서 OIDC를 선택합니다.
    [발행자]에 사용자 풀의 OIDC 구성에서 발행자 값을 입력합니다.
    [인증 엔드포인트]에 authorization_endpoint 값을 입력합니다.
    [토큰 엔드포인트]에 token_endpoint 값을 입력합니다.
    [사용자 정보 엔드포인트]에 userinfo_endpoint 값을 입력합니다.
    [클라이언트 ID(Client ID)]에 Amazon Cognito 콘솔에서 복사한 앱 클라이언트 ID를 입력합니다.
    [클라이언트 비밀(Client secret)]에 앞서 복사한 앱 클라이언트 시크릿을 입력합니다.
    [고급 설정(Advanced settings)]을 확장합니다.
    [범위]에 사용자 풀 앱 클라이언트에 대해 구성한 범위를 공백으로 구분하여 입력합니다. 사용자 풀의 OIDC 구성에서 범위를 확인할 수 있습니다. 예를 들어 구성의 scopes_supported 값이 ["openid","email","phone","profile"]이라면 openid email phone profile을 입력합니다.
    확인 표시 아이콘을 선택합니다.
  6. THEN에서 [작업 추가]를 선택한 다음, 아래의 작업을 수행합니다.
    참고: [작업 추가]를 선택할 수 없다면 휴지통 아이콘을 사용하여 기존 라우팅 작업(예: 리디렉션 대상)을 삭제하고 다시 시도하십시오.
    [전달 대상]을 선택합니다.
    [전달 대상]에 하나 이상의 대상 그룹을 선택합니다.
    (선택 사항) 그룹 수준 고정성을 구성합니다.
    확인 표시 아이콘을 선택합니다.
  7. [업데이트]를 선택합니다. HTTPS 리스너의 기본 규칙이 업데이트됩니다.

자세한 내용은 규칙 편집을 참조하세요.

설정 테스트

브라우저에서 다음 URL 중 하나를 입력합니다.

  • https://loadBalancerDNSName/
  • https://CNAME/

참고: loadBalancerDNSName을 앞서 Amazon EC2 콘솔에서 복사한 DNS 이름으로 바꿉니다. 또는 CNAME을 사용자 지정 도메인으로 바꿉니다.

사용자 풀의 Amazon Cognito 호스팅 웹 UI로 리디렉션됩니다. 사용자가 여기에 로그인하고 사용자 풀로 인증을 받으면 대상으로 리디렉션됩니다.