IAM 인증과 Cognito

Cognito User/Identity Pool, API Gateway 권한 부여자, STS AssumeRole, 페더레이션을 정리합니다.

앱을 만들면 반드시 마주치는 질문이 있습니다. 이 사람이 누구인지 어떻게 확인하지? 그리고 이 사람이 어디까지 접근할 수 있게 하지? 이 두 가지 고민을 해결해 주는 AWS 서비스가 바로 Amazon Cognito와 IAM입니다.

DVA-C02 시험에서는 누가 API를 호출할 수 있는가와 어떻게 사용자를 인증하는가를 집중적으로 묻습니다.

 

Amazon Cognito란?

쉽게 말하면 Cognito는 앱의 회원 관리 시스템 + 출입증 발급 창구입니다. 직접 로그인 서버를 만들 필요 없이, AWS가 사용자 등록/로그인/인증을 대신 처리해 줍니다.

Cognito는 크게 두 가지로 나뉩니다.

 

Cognito User Pools — 당신은 누구입니까? (인증)

사용자가 앱에 로그인할 때 이 사람이 맞는지 확인하는 역할입니다. 마치 회사 정문에서 사원증을 확인하는 보안 직원과 같습니다.

사용자가 로그인에 성공하면 JWT 토큰을 발급합니다. JWT 토큰은 이 사람은 인증된 사용자입니다라는 내용이 담긴 디지털 증명서입니다.

User Pool이 지원하는 기능: Google, Facebook, Apple 소셜 로그인 기업 계정 연동 (SAML/OIDC) 이중 인증 (MFA), 비밀번호 정책 이메일/SMS 인증 코드 AWS가 제공하는 기본 로그인 화면 (호스팅 UI)

 

Cognito Identity Pools — 무엇을 할 수 있습니까? (권한 부여)

인증이 끝난 사용자에게 AWS 서비스 접근 열쇠를 나눠주는 역할입니다. 예를 들어 모바일 앱 사용자가 자신의 S3 파일에 직접 업로드할 수 있도록 임시 AWS 자격 증명을 발급합니다.

쉽게 말하면 User Pool이 사원증 확인이라면, Identity Pool은 건물 각 층의 출입 권한 카드 발급입니다.

인증된 사용자와 비인증 게스트 사용자에게 서로 다른 권한 부여 가능 User Pool에서 받은 JWT 토큰을 Identity Pool에 제시하면 AWS 임시 자격 증명으로 교환

일반적인 사용 흐름: 사용자가 User Pool에 로그인 → JWT 토큰 획득 → Identity Pool에서 AWS 자격 증명으로 교환 → S3, DynamoDB 등 AWS 리소스에 직접 접근

!Cognito User Pools vs Identity Pools

API Gateway 권한 부여자

API Gateway는 앱의 정문입니다. 누군가 API를 호출할 때, 이 사람이 정말 접근 권한이 있는지 확인해야 합니다. 이 확인 역할을 하는 것이 권한 부여자(Authorizer)입니다.

| 유형 | 설명 | 언제 쓰나요? | |------|------|--------------| | Cognito 권한 부여자 | Cognito User Pool의 JWT 토큰을 검증합니다. 별도 코드가 필요 없습니다. | 앱 사용자가 API를 호출할 때 | | Lambda 권한 부여자 | 직접 만든 인증 로직을 Lambda 함수로 구현합니다. | 특수한 토큰 형식이나 타사 인증 시스템을 쓸 때 | | IAM 권한 부여자 | AWS Signature V4 방식으로 요청을 서명합니다. | AWS 서비스끼리 API를 호출할 때 |

일반 앱 사용자 인증 → Cognito 권한 부여자 레거시 시스템이나 특수 인증 → Lambda 권한 부여자 AWS 서비스 간 내부 호출 → IAM 권한 부여자

 

STS (Security Token Service)

STS는 임시 AWS 자격 증명을 발급하는 서비스입니다. 마치 오늘 하루만 유효한 임시 출입증과 같습니다. 영구적인 비밀번호 대신 짧은 시간만 유효한 임시 열쇠를 사용하므로 훨씬 안전합니다.

AssumeRole: 다른 AWS 계정의 역할을 잠시 빌려 그 계정의 리소스에 접근 AssumeRoleWithWebIdentity: Google 같은 웹 로그인 토큰을 AWS 자격 증명으로 교환 GetSessionToken: MFA 인증 후 임시 토큰 발급

 

시험 핵심 정리

"모바일/웹 앱 사용자 등록/로그인" -- Cognito User Pool

"인증된 사용자에게 AWS 자격 증명 발급" -- Cognito Identity Pool

"API Gateway에서 JWT 토큰 검증" -- Cognito 권한 부여자

"커스텀 인증 로직" -- Lambda 권한 부여자

"서비스 간 AWS 호출 인증" -- IAM 권한 부여자 (Sig V4)

"다른 계정의 역할 위임" -- STS AssumeRole

User Pool = 인증(Authentication, 누구인가), Identity Pool = 권한 부여(Authorization, 무엇을 할 수 있는가)

블로그 목록으로 돌아가기