만자의 개발일지

[AWS] Cognito User Pool 생성하기 본문

AWS

[AWS] Cognito User Pool 생성하기

박만자 2022. 6. 10. 19:49

User Pool(사용자 풀) 생성하기

먼저 AWS Cognito 콘솔에 접속한 후 Create user pool 버튼을 눌러줍니다.

 

첫 번째 단계에서는 사용자 풀을 만들지 자격 증명 풀을 만들지 지정해 줄 수 있고, 로그인 옵션을 지정해 줄 수 있습니다.

기본적으로 Cognito user pool 옵션은 선택되어 있고 변경할 수 없습니다. Ferdated identity providers 옵션을 선택하면 자격 증명 풀을 생성하실 수 있습니다.

이번 포스팅에서는 Cognito user pool 옵션만 선택하고 로그인 옵션은 중복 선택이 가능하지만 사용자 편의를 위해 User name만 선택해 줍니다. 

주의! 로그인 옵션은 사용자 풀을 생성한 후 변경할 수 없습니다.

User name옵션을 선택하면 아래에 다음과 같은 요구사항을 지정해 줄 수 있습니다.

  • Allow users to sign in with a preferred user name
    • User name에 대한 별칭으로 로그인 할 수 있도록 허용합니다.
  • Make user name case sensitive
    • User name에 대해 대/소문자를 구분합니다.

이번 포스팅에서는 둘다 선택하지 않고 넘어가도록 하겠습니다.

Next 버튼을 눌러 다음단계로 넘어가줍니다.

 

두 번째 단계에서는 패스워드 정책과 MFA, 계정 복구에 대해 지정해 줄 수 있습니다.

먼저 패스워드 정책은 Cognito가 제공하는 기본옵션을 사용할 수 있고, 직접 커스텀할 수 있습니다.

이번에는 Cognito가 제공하는 기본옵션을 사용하도록 하겠습니다. 기본옵션은 패스워드에 대/소문자, 숫자, 특수문자가 하나이상씩 포함되어야 합니다.

그다음 MFA와 계정 복구를 지정할 수 있습니다.

이번 포스팅에서는 MFA는 비활성화 해주고, 계정 복구는 이메일로만 할 수 있도록 지정해 주겠습니다.

Next 버튼을 눌러 다음 단계로 넘어가줍니다.

 

세 번째 단계에서는 셀프 가입과 사용자 계정 확인, 필수 속성 및 사용자 지정 속성에 대해 지정해 줄 수 있습니다.

먼저 셀프 가입(Self-registration)을 활성화하면 Cognito에 내장되어 있는 UI를 통해 사용자가 회원가입 및 로그인 서비스를 이용할 수 있습니다. 이 내장 UI는 별도로 커스텀이 가능합니다. 

하지만 저는 나중에 JS SDK를 통해 이를 다룰 것이기 때문에 활성화 해주도록 하겠습니다.

그다음은 Allow Cognito to automatically send messages to verify and confirm 옵션입니다.

Cognito에서 로그인 기능을 사용하기 위해서는 회원 가입한 사용자가 확인(Confirm) 상태여야 합니다.

해당 옵션을 활성화하면 사용자가 가입할 때 입력한 이메일로 확인 코드(Confirmation code)가 발송됩니다.

확인 코드는 나중에 SDK를 통해 사용하실 수 있습니다. 때문에 활성화 해주도록 하겠습니다.

마지막으로 필수 속성 및 사용자 지정 속성을 지정해 주어야 합니다.

주의! 필수 속성 및 사용자 지정 속성 역시 사용자 풀을 생성한 후 변경할 수 없습니다.
  • 필수 속성(Required attributes)
    • 필수 속성으로 지정된 속성은 회원 가입시에 필수적으로 제공해야합니다.
    • 이메일은 자동으로 필수 속성으로 지정됩니다.
  • 사용자 지정 속성(Custom attributes)
    • 사용자 지정 속성은 문자열 또는 숫자로만 정의할 수 있습니다.
    • 필수 속성과 달리 사용자 지정 속성은 필수적으로 제공할 필요는 없습니다.

너무 많은 속성을 지정하면 사용자가 회원 가입시에 불편할 수도 있기 때문에  필수 속성으로 지정된 이메일만 적용하도록 하겠습니다.

Next 버튼을 눌러 다음 단계로 넘어가줍니다.

 

네 번째 단계에서는 사용자에게 확인 코드등을 보낼 때 어떤 이메일로 보낼지 지정해 줄 수 있습니다.

AWS SES(Simple Email Service)를 사용하거나 혹은 Cognito에서 제공하는 기본 이메일을 사용하실 수 있습니다.

  • FROM email address
    • FROM 이메일은 사용자에게 이메일을 보낼 때 이메일을 보낸 사람으로 표시됩니다.
  • REPLY-TO email address
    • 사용자가 이메일을 회신하면 REPLY-TO 이메일로 회신됩니다.

FROM 이메일만 지정해 주도록 하겠습니다.

Next 버튼을 눌러 다음 단계로 넘어가줍니다.

 

다섯 번째 단계에서는 사용자 풀 이름 및 앱 클라이언트에 대한 옵션을 지정하실 수 있습니다.

사용자 풀 이름 과 앱 클라이언트 이름을 지정해준 후 App type은 Public client로 지정해 줍니다.

 

App client(앱 클라이언트)

앱 클라이언트는 실질적으로 Cognito의 User Pool을 이용할 수 있게 해주는 하나의 앱입니다.

이 앱은 하나의 사용자 풀에 여러 개 생성할 수 있으며, 각각의 앱은 고유한 Client ID를 보유하고 있습니다.

앱 클라이언트에는 크게 3가지 종류가 있습니다.

  • Public client
    • Public client는 사용자의 디바이스에서 실행되는 코드들로 구성되어있습니다.
    • Public client는 Client secret을 사용할 수 없습니다.
    • Public client는 OAuth 2.0 flows를 사용할 수 없습니다.
  • Confidential client
    • Confidential client는 서버에서 실행되는 코드들로 구성되어있습니다.
    • Confidential client는 Client secret을 사용할 수 있습니다.
    • Confidential client는 OAuth2.0 flows를 사용할 수 있습니다.
  • Other
    • Other는 Public client인데 Client secret이 활성화 되있는 경우 혹은 Confidential client인데 Client secret이 비활성화 되어있는 경우 Other로 분류됩니다.

 

Public client와 Confidential client의 가장 결정적인 차이는 바로 이 Client secret의 유무입니다.

  • Client secret
    • 앱이 앱 클라이언트에 대한 모든 API 요청에서 사용해야 하는 고정 문자열입니다(?).
    • Client secret은 Cognito의 특정 속성이 아니라 OAuth2.0 flows에 사용되는 OAuth2 표준의 일부입니다.

또한 Client secret은 JS SDK(amazon-cognito-identity-js 등)에서는 사용하지 않고, AWS CLI나 boto3에서 사용할 수 있다고 합니다. 자세한 내용은 아래 글을 참고하시길 바랍니다.

https://stackoverflow.com/questions/47916034/what-is-a-cognito-app-client-secret

 

What is a Cognito App Client Secret

At the documentations there's an App Client Secret, but I can't find anywhere its purpose. I see the javascript SDK doesn't use it, I also don't know why, probably because many javascript applica...

stackoverflow.com


그다음 Advancde app client settings에서는 인증 플로우 및 토큰 수명을 지정해 줄 수 있습니다.

  • Enable token revocation
    • jti 및 origin_jti claim을 추가하여 토큰의 크기를 증가 시킵니다.
    • id 토큰에 대해 토큰 해지를 활성화 합니다.
  • Prevent user existence errors
    • 사용자가 로그인에 실패할 경우 실패했다는 메세지를 반환합니다.
    • 자격 증명 추측 공격을 방지하여 사용자 풀에 추가적인 보안을 제공할 수 있습니다.

Attribute read and write permissions는 말그대로 각 속성에 대하여 읽기 쓰기 권한을 부여할 수 있습니다.

기본적으로 전부다 활성화 되어있기 때문에 이대로 설정하도록 하겠습니다.

Next 버튼을 눌러 다음 단계로 넘어가줍니다.

 

마지막 단계에서는 앞선 단계에서 설정한 값들을 확인하실 수 있습니다.

 

하단에 Create user pool 버튼을 눌러 사용자 풀을 생성해 줍니다.

 

다음과 같이 사용자 풀이 잘 생성된 것을 보실 수 있습니다.

 

다음 포스팅에서는 이 사용자 풀과 JS SDK(amazon-cognito-identity-js)를 가지고 회원 가입 및 로그인 기능을 구현해 보도록 하겠습니다.

Comments