본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
Amazon Cognito; Cognito
웹·모바일 애플리케이션의 최종 사용자 가입·로그인(사용자 풀)과 AWS 리소스 접근용 임시 자격 증명 발급(자격 증명 풀)을 제공하는 AWS의 고객용 자격 증명 플랫폼

쇼핑몰이나 모바일 앱을 만들면 회원 가입, 로그인, 암호 재설정, 소셜 로그인, MFA를 모두 구현해야 한다. Cognito는 이 기능을 관리형으로 제공해서, 애플리케이션은 Cognito가 발급한 토큰만 검증하면 된다. 수백만 명 규모의 소비자 사용자를 다루는 용도이며, 회사 직원의 AWS 콘솔 접근을 관리하는 AWS IAM Identity Center와는 대상이 다르다.

Cognito는 사용자 풀과 자격 증명 풀(ID 풀) 두 구성 요소로 이루어지며, 따로 쓸 수도 있고 함께 쓸 수도 있다.

Cognito 사용자 풀

편집 원본 편집

사용자 풀은 사용자 디렉터리이자 OAuth 2.0·OIDC 기반 인증 서버다. 사용자가 로그인하면 JWT(JSON 웹 토큰)를 발급한다.

  • 토큰: ID 토큰(사용자 신원과 속성), 액세스 토큰(API 접근 범위), 새로 고침 토큰
  • 로그인 방식: 사용자 풀에 직접 가입한 로컬 사용자, Google·Facebook·Apple·아마존 같은 소셜 ID 공급자, SAML 2.0과 OIDC 기업 ID 공급자(Okta, AD FS 등) 페더레이션
  • 보안 기능: MFA(TOTP, SMS 등), 사용자 지정 인증 흐름, 위험 기반 위협 방어(Plus 플랜)
  • 관리형 로그인: AWS가 호스팅하는 가입·로그인 화면을 그대로 쓸 수 있다.
  • Lambda 트리거: 가입 전 검증, 토큰 내용 수정, 사용자 마이그레이션 등 단계별로 AWS Lambda 함수를 끼워 넣는다.
기능 플랜

사용자 풀은 Lite(기본 인증), Essentials(모든 최신 인증 기능), Plus(Essentials + 위험 기반 고급 보안) 세 가지 기능 플랜이 있고, 플랜과 월간 활성 사용자(MAU) 수에 따라 요금이 정해진다.

Cognito 자격 증명 풀

편집 원본 편집
앱이 사용자 풀 토큰을 자격 증명 풀에 넘겨 STS 임시 자격 증명을 받는 흐름

자격 증명 풀은 인증된 사용자(또는 게스트)를 AWS 자격 증명으로 바꿔 준다. 사용자 풀 토큰, 소셜 로그인 토큰, SAML 어설션, OIDC 토큰 등을 받아 AWS IAM 역할에 매핑하고, AWS STS를 통해 임시 AWS 자격 증명을 발급한다. 앱은 이 자격 증명으로 아마존 S3, 다이나모DB 같은 AWS 서비스를 직접 호출한다.

  • 인증된 자격 증명: 로그인한 사용자. 인증된 사용자용 IAM 역할을 받는다.
  • 게스트(인증되지 않은) 자격 증명: 로그인하지 않은 사용자에게도 제한된 역할을 줄 수 있다.
  • 규칙이나 토큰 클레임에 따라 사용자마다 다른 역할을 주거나, 태그 기반 정책으로 "자기 폴더만 접근"하도록 제한할 수 있다.

사용자 풀과 자격 증명 풀 비교

편집 원본 편집
항목 사용자 풀 자격 증명 풀
하는 일 인증(누구인가) 권한 부여(AWS 자원에 무엇을 할 수 있는가)
결과물 JWT(ID·액세스·새로 고침 토큰) 임시 AWS 자격 증명(액세스 키, 비밀 키, 세션 토큰)
사용자 디렉터리 있음(프로필 저장) 없음(외부 인증 결과를 받음)
사용처 앱 로그인, API Gateway·ALB 인증 앱이 S3·DynamoDB 등 AWS API를 직접 호출
게스트 접근 해당 없음 지원
외부 IdP SAML, OIDC, 소셜을 받아 자체 JWT로 표준화 SAML, OIDC, 소셜, 사용자 풀 토큰을 받아 AWS 자격 증명으로 교환

함께 쓰는 전형적인 흐름은 다음과 같다. 사용자가 사용자 풀로 로그인해 토큰을 받고, 앱이 그 토큰을 자격 증명 풀에 보내 임시 AWS 자격 증명을 받은 뒤, 그 자격 증명으로 S3에 사진을 올린다.

API Gateway·ALB 인증 연동

편집 원본 편집
연동 대상 방식 비고
아마존 API Gateway REST API COGNITO_USER_POOLS 유형 권한 부여자 클라이언트가 ID 토큰 또는 액세스 토큰을 헤더에 넣어 호출. 액세스 토큰은 OAuth 범위로 세분화
API Gateway HTTP API JWT 권한 부여자 사용자 풀을 발급자로 지정해 토큰 검증
Application Load Balancer 리스너 규칙의 authenticate-cognito 작업 HTTPS 리스너에서만 지원. 인증 후 사용자 정보를 헤더로 백엔드에 전달하므로 앱 코드 수정이 적다.

API Gateway는 Cognito 외에 IAM 권한 부여, Lambda 권한 부여자도 지원한다. 자체 토큰 형식이나 복잡한 권한 로직이 필요하면 Lambda 권한 부여자를 쓴다.

  • "모바일·웹 앱에 회원 가입·로그인, 소셜 로그인 추가"를 운영 부담 없이 → Cognito 사용자 풀.
  • "앱 사용자가 자기 AWS 자격 증명 없이 S3·DynamoDB에 직접 접근" → 자격 증명 풀(임시 자격 증명). 앱에 IAM 액세스 키를 넣는 선택지는 오답이다.
  • "API Gateway REST API를 로그인한 사용자만 호출" → Cognito 사용자 풀 권한 부여자.
  • "ALB 뒤 웹 앱에 로그인 기능을 코드 변경 최소로" → ALB 인증 작업(Cognito 또는 OIDC). HTTPS 리스너가 필요하다.
  • 직원의 AWS 계정 접근은 IAM Identity Center, 고객(소비자) 앱 인증은 Cognito로 구분한다.