| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- user pool
- rev-basic-4
- id pool
- ADsP합격
- Pacu
- Simple Crack Me
- HRRN
- AWS
- 26년 1회
- ADsP교재
- cloudgoat
- ADsP
- ADsP책추천
- Juice Shop
- 시나공ADsP
- OWASP TOP 10
- 라운드로빈
- rev-basic-3
- writeup
- 병행성
- ADsP시험
- OS
- randzzz
- 운영체제
- adsp독학
- OpenClaw
- 세그먼테이션
- wargame
- 교체 정책
- dreamhack
- Today
- Total
chon
[AWS] Amazon Cognito 본문
목차
1. Amazon Cognito란?
2. Cognito는 왜 생겼을까?
3. 현재 어떻게 사용되고 있는가?
4.Cognito의 구성요소
- User Pool vs Identity Pool 상세 설명
1. Amazon Cognito란

Amazon Cognito란 무엇입니까? - Amazon Cognito
이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.
docs.aws.amazon.com
Amazon Cognito는 웹 및 모바일 앱에 대한 인증(Authentication), 권한 부여(Authorization) 및 사용자 관리 기능을 빠르고 쉽게 구현할 수 있도록 돕는 AWS의 완전 관리형 서비스입니다.
쉽게 말해, 우리가 흔히 구현하는 웹이나 모바일 앱에 회원가입, 로그인, 비밀번호 찾기, 프로필 관리 등의 기능을 개발자가 직접 DB를 구축하고 복잡한 인증 로직을 짤 필요 없이 쉽고 안전하게 AWS에 맡기는 솔루션입니다. 구글, 메타, 아마존과 같은 소셜 ID 제공업체나 SAML 2.0, OpenID Connect를 사용하는 기업 ID 제공업체를 통한 로그인을 지원합니다.
2. Cognito는 왜 생겼을까?
클라우드 기반 앱이 폭발적으로 늘어나면서, 개발팀마다 반복적으로 인증 시스템을 직접 구축해야 했습니다. 이 과정에서 다음과 같은 고질적인 문제들이 있었습니다.
기존 방식의 문제점
- 회원가입/로그인/비밀번호 재설정 로직을 매번 처음부터 개발
- 비밀번호 암호화(Hashing/Salting), 토큰 관리, 세션 보안을 개발자가 직접 책임
- 소셜 로그인(OAuth) 연동 시 각 provider마다 별도 구현 필요
- 사용자 수 증가에 따른 인증 서버 스케일링 문제
- AWS 리소스에 접근하기 위한 자격증명 관리 복잡성
AWS는 2014년 Cognito를 출시하면서 이런 문제들을 서비스 형태로 추상화했습니다. 인증 인프라를 직접 운영할 필요 없이, API 호출만으로 엔터프라이즈급 보안을 적용할 수 있게 된 것입니다.
Auth0 / Firebase Auth와의 차이
유사한 서비스로 Auth0, Firebase Authentication이 있습니다. Cognito의 차별점은 AWS 생태계와의 네이티브 통합입니다. IAM, S3, API Gateway, Lambda 등과 바로 연결되어, AWS 기반 서비스라면 Cognito가 사실상 최적의 선택입니다.
3. 현재 어떻게 사용되고 있는가?
Cognito는 현재 스타트업부터 대기업까지 다양한 규모의 서비스에서 핵심 인증 레이어로 활용되고 있습니다.
SPA / 모바일 앱
React, Vue, Flutter 앱의 로그인/회원가입을 Amplify SDK로 빠르게 연동
서버리스 아키텍처
API Gateway + Lambda 조합에서 JWT 토큰 기반 인증 자동 처리
B2B SaaS
SAML 연동으로 기업 고객의 SSO(Single Sign-On) 환경 지원
멀티플랫폼 서비스
웹/iOS/Android 공통 인증을 하나의 User Pool로 통합 관리
일반적인 인증 흐름
앱 (클라이언트) → Cognito User Pool → JWT 토큰 발급 → API Gateway → Lambda / 백엔드
4. Cognito의 구성요소
Cognito는 User Pool과 Identity Pool 두 가지 핵심 구성요소로 이루어져 있습니다. 이 둘을 혼동하는 경우가 많은데, 역할이 명확하게 다릅니다.
사용자 풀(User Pool)
누구인지 확인하는 인증(Authentication) 담당입니다. 회원 정보를 저장하고 로그인을 처리하는 사용자 디렉터리입니다. 앱 또는 API에 사용자를 인증하고 권한을 부여하려는 경우 사용자 풀을 생성합니다.

사용자가 앱에 접속하면 먼저 Cognito User Pool에 로그인 요청을 하게 됩니다. 이때 사용자는 자신의 username과 password를 입력하거나, Google이나 Facebook 같은 외부 ID 제공자를 통해 인증할 수 있습니다. 만약 외부 ID 제공자로 로그인하길 원하면, Cognito가 자동으로 해당 제공자의 로그인 페이지로 리디렉션해줍니다.
로그인 과정에서 추가 보안이 필요하다면 MFA(다중 인증) 같은 추가 챌린지가 발생할 수 있습니다. 예를 들어 서버에서 인증 코드를 사용자의 이메일이나 전화번호로 보내고, 사용자가 그 코드를 입력하는 식입니다. 모든 인증 과정이 완료되면 Cognito User Pool은 사용자에게 토큰(ID Token, Access Token, Refresh Token)을 발급합니다. 이 토큰을 통해 사용자는 앱의 API나 데이터베이스에 접근할 수 있게 되는 것입니다.
User Pool의 가장 큰 특징은 사용자 계정의 전체 생명주기를 관리한다는 점입니다. 가입, 로그인, 비밀번호 변경, 계정 복구 같은 모든 기능을 Cognito가 제공하므로, 개발자는 이런 복잡한 인증 로직을 직접 만들 필요가 없습니다.
- 회원가입/로그인
- JWT 발급
- 소셜 로그인
- MFA 지원
- 이메일 인증
자격 증명 풀(Identity Pool)
무엇을 할 수 있는가를 결정하는 인가(Authorization) 담당입니다. Identity Pool의 주 역할은 사용자에게 AWS 리소스에 직접 접근할 수 있는 임시 접근 권한을 부여하는 것입니다.

작동 방식을 보면, 먼저 사용자가 앱을 통해 Identity Pool에 인증을 요청합니다. 이때 사용자는 Cognito User Pool에서 받은 토큰을 사용하거나, 외부 ID 제공자(Google, Facebook 등)의 인증 정보를 사용할 수 있습니다. Identity Pool은 이 정보가 정말 유효한지 검증한 후, AWS의 STS(Security Token Service)에 임시 자격증명을 요청합니다. STS는 사용자의 권한에 맞는 임시 AWS 자격증명(Access Key, Secret Key, Session Token)을 발급해주고, 이를 통해 사용자는 S3, DynamoDB 같은 AWS 서비스에 직접 접근할 수 있게 됩니다.
Identity Pool의 핵심은 장기 자격증명 대신 임시 자격증명을 사용한다는 점입니다. 이렇게 하면 보안이 훨씬 더 좋아집니다. 왜냐하면 임시 자격증명은 일정 시간이 지나면 자동으로 만료되기 때문입니다.
- 임시 IAM 자격증명
- S3 직접 접근
- 비인증 사용자 지원
- 역할 기반 접근
User Pool과 Identity Pool은 목적이 다르기 때문에 상황에 맞게 선택해서 사용해야 합니다.
User Pool을 사용해야 할 때: 블로그, SNS, 전자상거래 같은 일반적인 웹 애플리케이션에서 사용자 로그인만 필요한 경우입니다. 사용자가 로그인하면 받은 토큰으로 백엔드 API를 호출해서 데이터를 가져오는 방식 → 신원 확인 및 회원 정보 관리
Identity Pool을 사용해야 할 때: 모바일 앱이 S3에 직접 사진을 업로드하거나, DynamoDB에서 데이터를 가져와야 하는 경우처럼 클라이언트가 AWS 리소스에 직접 접근해야 할 때입니다. → AWS 리소스에 대한 실제 권한 부여
① 사용자 로그인 → User Pool이 ID Token, Access Token 발급
② JWT를 Identity Pool에 전달 → 임시 IAM Credentials (Access Key/Secret Key) 반환
③ 자격증명으로 S3/DynamoDB 직접 호출
실제로 많은 애플리케이션에서는 User Pool과 Identity Pool을 함께 사용합니다. 먼저 User Pool로 사용자를 인증해서 토큰을 받고, 그 토큰을 Identity Pool에 제시해서 AWS 리소스 접근 권한을 얻는 방식입니다. 이렇게 하면 인증(Authentication)과 권한 부여(Authorization)가 깔끔하게 분리되어 보안성도 훨씬 높아집니다.
참고