Amazon Cognito로 사용자 관리하기
소개
Amazon Cognito는 웹 및 모바일 앱에 대한 사용자 인증 및 승인을 처리한다. 사용자 풀을 사용하면 앱에 가입 및 로그인 기능을 쉽고 안전하게 추가할 수 있다. Identity pools를 사용하면 앱은 사용자가 익명이든 인증되었든 특정 AWS 리소스에 대한 액세스 권한을 부여하는 임시 자격 증명을 얻을 수 있다.
미국, 수술실이라는 특수한 환경에서 사용하는 애플리케이션을 개발하면서 사용자 요청을 최소화하기 위해 ML model 적용, 제스쳐 동작 등 다양한 시도를 하였다. 이번에는 사용자 인증과 관련하여 어떻게 하면 불필요한 과정을 줄이고 보다 안전하게 적용할 수 있을지 고민하며 Amazon Coginto를 적용한 내용이다.
User pool
Amazon Cognito 사용자 풀은 웹 및 모바일 앱 인증과 권한 부여를 위한 사용자 디렉토리이다. 앱 관점에서 Amazon Cognito 사용자 풀은 OpenID Connect(OIDC) 자격 증명 공급자(IdP)이다. 사용자 풀은 보안, 아이덴티티, 페더레이션, 앱 통합, 사용자 경험 사용자 지정을 위한 기능 계층을 추가한다.
예를 들어 사용자의 세션이 신뢰할 수 있는 출처에서 온 것인지 확인할 수 있다. Amazon Cognito 디렉터리를 외부 ID 제공업체와 결합할 수 있다. 원하는 AWS SDK를 사용하여 앱에 가장 적합한 권한 부여 모델 API를 선택할 수 있다. 그리고 Amazon Cognito의 기본 동작을 수정하거나 정비하는 AWS Lambda 함수를 추가할 수 있다.
특징
Amazon Cognito user pool은 다음과 같은 특징을 가지고 있다.
가입하기
Amazon Cognito 사용자 풀에는 사용자 프로필을 사용자 풀에 추가하는 사용자 중심, 관리자 중심 및 프로그래밍 방식이 있다. Amazon Cognito 사용자 풀은 다음 가입 모델을 지원한다. 앱에서 아래 모델의 모든 조합을 사용할 수 있다.
사용자 풀에서 사용자 가입을 활성화 하면 인터넷에 있는 모든 사람이 계정에 가입하고 앱에 로그인할 수 있다. 앱을 공개적으로 개방하려는 경우가 아니면 사용자 풀에서 셀프 등록을 비활성화 해야한다. 이 설정을 변경하려면 사용자 풀 콘솔의 Authentication 아래 Sign-up 메뉴에서 Self-service sign-up 설정을 변경하거나 CreateUserPool
또는 UpdateUserPool
API 요청에서 AllowAdmiCreateUserOnly
값을 수정해야 한다.
사용자 풀에 설정할 수 있는 보안 기능에 대한 자세한 내용은 Amazon Cognito 사용자 풀 보안 기능 사용을 참고하자.
-
사용자는 앱에 정보를 입력하고 사용자 풀에 고유한 사용자 프로필을 만들 수 있다. API 가입 작업을 호출하여 사용자 풀에 사용자를 등록할 수 있다. 이러한 가입 작업을 누구에게나 공개하거나 Client secret 또는 AWS credentials로 권한을 부여할 수 있다.
-
사용자가 Amazon Cognito에 정보를 전달하도록 허가할 수 있는 타사 IdP로 리디렉션할 수 있다. Amazon Cognito는 OIDC ID 토큰, OAuth 2.0
userInfo
데이터 및 SAML 2.0 어설션을 사용자 풀의 사용자 프로필로 처리한다. 속성 매핑 규칙에 따라 Amazon Cognito가 수신하도록 하려는 속성을 제어한다. -
공개 또는 연합 가입을 건너뛰고, 자체 데이터 소스 및 스키마를 기반으로 사용자를 만들 수 있다. Amazon Cognito 콘솔 또는 API에서 직접 사용자를 추가한다. CSV 파일에서 사용자를 가져온다. 기존 디렉토리에서 새 사용자를 조회하고 기존 데이터에서 사용자 프로필을 채우는 AWS Lambda 함수를 실행한다.
사용자가 가입한 후 Amazon Cognito가 액세스 및 ID 토큰에 나열한 그룹에 추가할 수 있다. ID 토큰을 ID 풀에 전달할 때 사용자 풀 그룹을 IAM 역할에 연결할 수도 있다.
로그인
Amazon Cognito는 앱에 대한 독립형 사용자 디렉터리 및 ID 공급자(IdP)가 될 수 있다. 사용자는 Amazon Cognito에서 호스팅하는 관리형 로그인 페이지 또는 Amazon Cognito 사용자 풀 API를 통한 사용자 정의 사용자 인증 서비스로 로그인할 수 있다. 사용자 정의 프론트엔드 뒤에 있는 애플리케이션 계층은 여러가지 방법 중 하나를 사용하여 백엔드에서 요청을 승인하여 요청을 확인할 수 있다.
사용자는 사용자 이름과 비밀번호, 패스키, 이메일 및 SMS 메시 지 일회용 비밀번호로 설정하고 로그인할 수 있다. 외부 사용자 디렉토리, 로그인 후 다중 요소 인증(MFA), 신뢰 기억 장치, 설계한 사용자 지정 인증 흐름과 통합 로그인을 제공할 수 있다.
Amazon Cognito에 내장된 사용자 디렉토리와 선택적으로 결합된 외부 디렉토리를 통해 사용자를 로그인시키려면 다음 통합을 추가할 수 있다.
-
OAuth 2.0 소셜 로그인으로 로그인하고 고객 사용자 데이터를 가져온다. Amazon Cognito는 OAuth 2.0을 통해 Google, Facebook, Amazon 및 Apple 로그인을 지원한다.
-
SAML 및 OIDC 로그인으로 로그인하고 직장 및 학교 사용자 데이터를 가져온다. 또한 Amanon Cognito를 구성하여 모든 SAML 또는 OpenID Connect(OIDC) ID 공급자(IdP)의 클레임을 수락할 수도 있다.
-
외부 사용자 프로필을 기본 사용자 프로필에 연결한다. 연결된 사용자는 타사 사용자 ID로 로그인하여 기본 제공 디렉토리에서 사용자에게 할당한 액세스 권한을 받을 수 있다.
관리자 로그인
사용자 인터페이스를 구축하고 싶지 않은 경우, 사용자에게 사용자 지정 관리형 로그인 페이지를 제공할 수 있다. 관리형 로그인은 가입, 로그인, 다중 요소 인증(MFA) 및 비밀번호 재설정을 위한 웹 페이지 세트이다. 기존 도메인에 관리형 로그인을 추가하거나 AWS 하위 도메인에서 접두사 식별자를 사용할 수 있다.
보안
로컬 사용자는 SMS 또는 이메일 메시지읠 코드 또는 다중 요소 인증(MFA) 코드를 생성하는 앱으로 추가 인증 요소를 제공할 수 있다. 애플리케이션에서 MFA를 설정하고 처리하는 메커니즘을 구축하거나 관리되는 로그인이 이를 관리하도록 할 수 있다. Amazon Cognito 사용자 풀은 사용자가 신뢰할 수 있는 기기에서 로그인할 때 MFA를 우회할 수 있다.
사용자에게 처음에 MFA를 요구하지 않으려면 조건부로 요구할 수 있다. Amazon Cognito는 고급 보안 기능을 통해 잠재적인 악의적 활동을 감지하고 사용자에게 MFA를 설정하거나 로그인을 차단하도록 요구할 수 있다.
사용자 풀에 대한 네트워크 트래픽이 악의적일 수 있는 경우 AWS WAF 웹 ACL을 사용하여 이를 모니터링하고 조치를 취할 수 있다.
사용자 정의형 사용자 경험
사용자의 가입, 로그인 또는 프로필 업데이트의 대부분 단계에서 Amazon Cognito가 요청을 처리하는 방식을 사용자 정의할 수 있다. Lambda 트리거를 사용하면 사용자 정의 조건에 따라 ID 토큰을 수정하거나 가입 요청을 거부할 수 있다. 사용자 정의 인증 흐름을 직접 만들 수 있다.
사용자 정의 CSS와 로고를 업로드하여 관리되는 로그인에 친숙한 모양과 느낌을 부여할 수 있다.