AWS Cognito 톺아보기

Server The SOPT·2022년 7월 4일
1
post-thumbnail

✍ 작성자: 황서경
🌻 AWS 스터디 1조 대표로 올리는 글입니다. 3주차 주제는 Cognito 입니다 🌻



❓ Cognito란?

🔰 사용자 인증을 하고, 사용자에게 권한을 부여하는 것

사용자들은 이 권한을 통해 어플리케이션과 상호작용하게 된다.

더 쉽게 말하자면, Cognito는 회원가입과 로그인 기능을 제공하는 서비스!

여기서 사용자란? IAM 사용자가 아니라 클라우드 외부의 사용자 (모바일 및 웹 어플리케이션 사용자)를 말한다.

??? : Cognito랑 IAM은 뭐가 다른데요?
 - IAM: AWS 내에서의 자격 증명 (AWS 서비스에서 AWS 서비스로의 연결)	
 - Cognito: 앱(모바일, 웹)을 통해 접근하는 사용자



💨 Cognito 종류

  • Congito User Pools (CUP) - 사용자 풀
  • Cognito Identity Pools (CIP) - 자격증명 풀
  • Cognito Sync - 모바일 기기의 데이터를 Cognito로 동기화

❗ Cognito Sync는 현재는 잘 사용하지 않고, AppSync로 대체된 경우가 대부분 ❗

그래서 이번 포스팅에서는 Congito User Pools와 Cognito Identity Pools에 대해 알아보겠습니다-!!





💫 Cognito User Pools (CUP)

🌐 모바일/웹 사용자들의 서버리스 DB를 생성할 수 있는 방법
= 사용자가 로그인을 통해 어플리케이션에 접속 가능
🌐 사용자 데이터베이스를 기반으로 함

………………………(👨‍💻: 난 그냥 개발할 수 있는디 ㅋㅋ)

Don’t Repeat Yourself / Don’t reinvent the wheel

소프트웨어 개발 원칙: “반복을 피하라”

불필요하게 처음부터 다시 시작하지 말고, 이미 갖춰진 서비스를 갖다 쓰자

CUP 사용자 인증 과정

1. 외부에서 CUP로 로그인 요청이 들어온다. (소셜 로그인도 가능)

로그인이 발생할 때 마다!
-> 사용자 DB와 비교 후,
-> CUP가 어플리케이션에 JWT 리턴 (사용자가 받음)

2. CUP와 API Gateway / Application Load Balancer의 통합

이유는? 다른 AWS 서비스와의 연결을 위해!

  • API Gateway
    (API 요청을 관리, 주로 서버리스 서비스 Lambda와 연결됨)
    → 사용자가 받은 JWT 토큰을 API Gateway로 전송
    → API Gateway는 해당 JWT 토큰의 유효 여부를 판단
    → 유효하면 백엔드로의 접근 허용
  • Application Load Balancer (ALB)
    (요청을 여러 개의 서버로 분산시켜주는 서비스)
   	→ 외부에서 요청이 ALB로 들어옴
    → CUP에서 인증
    → 사용자들을 백엔드(EC2, Lambda 등)로 분산 (접근 허용)



이제 실습을 통해 확실히 이해해봅시다😄
실습이 조금 길어요..
마음의 준비하고 들어가시길 ❕

CUP 실습

  1. AWS Cognito "사용자 풀 관리" 클릭
  2. "사용자 풀 생성" 클릭
  3. 사용자 풀 이름 지정(ex: DemoPool) 후 “설정을 순서대로 진행” 클릭
  4. 사용자들이 로그인 할 때 어떤 항목을 필수로 지정할 지 설정
  • 아래는 예시일 뿐! 필요에 따라 설정하시면 됩니다⭐
  1. 암호 강도, 사용자 가입 허용 여부, 만료 일수 설정
  • 마찬가지로 필요에 따라 설정하기
  1. MFA, 사용자 계정 복구 옵션 설정
  • 새 역할 이름 (ex: DemoPool-SMS-Role)
  1. 이메일 확인 메시지, 초청 메시지 사용자 지정
  • 여기서 인증 메시지 커스터마이징 가능 (지금은 건드리지 않고 넘어가겠습니다)
  1. 태그 추가 여부 설정 -> "다음 단계" 클릭
  2. 사용자들의 디바이스를 쿠키로 저장할 지 설정 ("아니요" 클릭)
  3. 클라이언트 생성 설정 ("다음 단계" 클릭)
  4. 워크플로우 커스터마이징 설정
  • 트리거: 사용자가 회원가입 / 로그인을 할 때마다 이벤트 발생 → 이벤트에 반응하는 람다 함수 호출 가능
  1. “사용자 풀 생성” 클릭
  2. 앞에서 만든 풀 이름 입력 → “기본값 검토” 클릭
  3. 설정 제대로 되었는지 확인 후 “풀 생성” 클릭

풀 생성 완료!!✨


  1. 왼쪽 바에서 “앱 클라이언트” 클릭
  2. 앱 클라이언트 이름(ex: DemoAppClient) → 나머지는 그대로 두고 “앱 클라이언트 생성” 클릭

이제 CUP로 로그인 가능!!!✨

여기서부터는 CUP로 로그인하는 방법에 대해 실습해보겠습니다⭐


  1. 왼쪽 바에서 “앱 클라이언트 설정” 클릭
  • 앱 클라이언트 설정: 앱에 어떻게 로그인할 지 그 방법을 설정하는 것
  1. OAuth 2.0 설정 아래와 같이 하기 → 전부 한 다음 “변경사항 저장” 클릭
  • 콜백 URL: 로그인 성공할 때마다 이동하는 웹사이트 주소 (저는 일단 솝트 30기
    서버파트 기술 블로그 주소로 했습니다)
  1. 왼쪽 바에서 "도메인 이름" 클릭
  2. 도메인 이름 입력(ex: seo-demo) 후 “가용성 확인” 클릭해서 사용할 수 있는 도메인인지 확인 필수 → "변경 내용 저장" 클릭
  3. 다시 왼쪽바 → “앱 클라이언트 설정” 으로 이동 → “호스팅 UI 시작” 클릭
  • 호스팅 UI: Cognito의 UI를 연결해서 사용할 수 있도록 하는 기능

✨이제 호스팅 UI가 실행됨!✨

여기서 회원가입 or 로그인이 가능합니다.


  1. 회원가입 진행
  • Email 칸에서 mailinator.com은 일시적인 메일 제공자를 의미
  1. mailinator.com 으로 가서 내 메일함 생성되었는지 확인
  • 골뱅이 앞 email 주소(여기서는 seokyeong)를 입력하면 자신의 메일함이 됨.
  1. 회원가입 창 모두 입력 후, "Sign up"을 누르면 인증 메일이 옴 → mailinator.com에서 인증번호 복사
  2. 인증번호 붙여넣고 “Confirm Account” 누르면 !!

✨😊서버 파트 기술 블로그로 이동!!! == 로그인 성공😊✨


😁 추가 정보 😁


다시 AWS Cognitor 페이지로 돌아옵시다.

왼쪽 바에서 “사용자 및 그룹 클릭” 후 새로 고침하면 로그인한 사용자가 나옵니다.

이게 바로 사용자 DB를 의미합니다!

사용자 직접 생성이 가능하고, 사용자 그룹으로 묶기도 가능합니다.






💫 Cognito Identity Pools (CIP) (Federated Identities)

🔑 자격 증명을 통해 사용자가 고유한 ID를 생성하여 다른 AWS 서비스들을 사용할 수 있게 하는 것


🍀 CIP를 사용하는 이유는?

AWS 사용자들이 너무 많고 신뢰할 수도 없기 때문에
일반 IAM 사용자를 생성하는 대신 CIP를 이용해 AWS로의 엑세스를 제공한다.


🍀 CIP가 사용자들의 로그인을 허용하는 방법은?

신뢰할 수 있는 제3자를 통해 사용자들의 로그인을 허용

제3자에 포함되는 것들

1. Public Providers (Amazon, Apple, Facebook 및 Google 등의 소셜로그인)
2. CIP로 이미 로그인한 사용자들
3. OpenID Connect나 SAML 제공자
4. Developer Authenticated Identities (커스텀 로그인 서버)

CIP 실습

  1. 새 자격 증명 풀(Cognito Identity Pools) 생성
  • 자격 증명 풀 이름 지정하고, 인증되지 않은 자격 증명 체크
  1. 사용자 풀 ID, 앱 클라이언트 ID 작성 후 "풀 생성" 클릭
  • 사용자 풀 ID는 CUP 실습에서 만든 사용자 풀로 들어가서 복사
  • 앱 클라이언트 ID는 왼쪽 바 -> "앱 클라이언트" 클릭 후 복사
  1. 생성된 역할 확인 후 "허용" 클릭
  • 첫번째 역할 요약: 일반 유저를 위한 역할
  • 두번째 역할 요약: IAM 역할 (인증되지 않은 사용자를 위함)
  1. 플랫폼 옵션 선택 후 SDK 다운로드

    ✨CIP 사용 준비 끝✨


추가 1. 왼쪽 바 -> 대시보드 에서 인증되지 않은 사람들의 수, 인증된 사람들의 수, 신분 수 확인 가능


추가 2. 왼쪽 바 -> 자격 증명 브라우저 에서 사용자의 로그인 후, 자격 증명 ID로 사용자 검색 가능






❓ Cognito User Pools(CUP)와 Cognito Identity Pools(CIP)를 함께 사용한다면?

🌐 사용자들이 다른 AWS 서비스를 이용할 수 있게 하면서 사용자들의 신분은 CUP에 저장되도록 하기 위해 CUP와 CIP를 함께 사용한다.

→ 웹 및 모바일 어플리케이션 사용자들이 CUP로부터 획득한 JWT는 CIP 토큰으로 교환되고
→ Cognito Identity Pools에서 이 토큰에 대한 검증을 거친 뒤
→ STS 서비스로 통신을 해 자격 증명을 받고
→ 그 자격 증명은 웹 및 모바일 어플리케이션으로 반환된다.

이 자격 증명 덕분에 사용자들은 AWS로의 직접 엑세스가 가능해진다.

💹 순서

1) CUP로 인증 (CUP 토큰 취득)
2) CUP 토큰과 CIP 토큰 교환
3) CIP 토큰으로 다른 AWS 서비스 이용






🌞 정리

Cognito User Pools (CUP)

  • 웹 및 모바일 어플리케이션을 사용하는 사용자들의 DB를 기반으로 한다.
  • 소셜 로그인 제공자나 OIDC, SAML을 통해서 로그인을 통합할 수 있다.
  • 인증에 사용되는 UI를 커스터마이징 할 수 있다.
  • AWS Lamda를 이용한 트리거로 통합을 원치 않는 경우에 커스텀 분석 솔루션을 이용할 수 있다.

Cognito Indentity Pools (CIP)

  • 사용자가 AWS 자격 증명을 획득하도록 한다.
  • 사용자는 소셜 로그인, OICD, SAML, CUP 를 통해 로그인할 수 있다.
  • 사용자는 게스트 사용자(인증되지 않은 사용자)일 수도 있다.
  • 사용자는 IAM 역할과 정책에 mapping 되는데, 이때 정책 변수들을 이용해 사용자에게 딱 맞는 역할을 제공할 수 있다.
profile
대학생연합 IT벤처창업 동아리 SOPT 30기 SERVER 파트 기술 블로그입니다.

0개의 댓글