Amazon Cognito
AWS Cognito는 웹 및 모바일 앱에 대한 인증과 권한 부여, 사용자 관리를 제공하고 기존의 아이디, 패스워드 방식 이외에도 소셜 로그인 기능을 제공하는 서비스이다.
Cognito는 user pool과 identity pool로 구성되어 있는데 이 둘을 조합하거나 각각 별개로 사용할 수 있다.
user pool : 사용자의 가입과 로그인을 제공하는 사용자 저장소
identity pool : 사용자 풀에 저장된 정보를 바탕으로 로그인 또는 회원가입에 성공한 사용자에게 AWS 인프라의 여러 서비스에 대한 권한을 부여할 수 있는 서비스
User Pool
사용자 풀은 사용자에 대한 정보를 가지고 있는 저장소와 같은 역할을 한다.
성공적으로 사용자 인증 과정이 끝나면 Cognito는 JSON 형식의 웹 토큰을 발행하며, 이 토큰을 사용해 특정 API에 대한 접근 보안 등 자격 증명을 수행하거나 AWS의 자격 증명으로 교환한다.
- 사용자 디렉터리 역할을 하는 핵심 요소
- 회원가입, 로그인, 비밀번호 재설정 등의 기능 제공
- SNS 로그인 연동 지원
- JWT 형식의 Access Token, ID Token, Refresh Token 발급
예시)
Client → Cognito User Pool → JWT Token 발급 → API Gateway / App Backend
Identity Pool
자격 증명 풀은 특정 사용자의 고유한 자격 증명을 만들고 사용자에게 AWS 인프라에 대한 접근 권한을 부여할 수 있다.
자격 증명 풀을 이용하게 되면 다른 AWS 서비스에 직접 접근하거나 API Gateway를 통해 서비스에 접근하도록 정의하는 권한을 가진 임시 AWS 자격 증명을 생성할 수 있다.
- AWS 리소스 접근을 위한 임시 자격 증명 발급
- User Pool, SNS, SAML 등 다양한 인증 제공자 통합 가능
- 로그인한 사용자가 S3, Dynamo DB 등 AWS 리소스에 접근할 수 있도록 권한 부여
예시)
Cognito Identity Pool → AWS STS → Temporary AWS Credentials → S3, DynamoDB 접근
활용 사례
1. 사용자 풀로 인증

- 사용자는 사용자 풀을 통해 가입하거나 타사 ID 제공자를 통해 로그인 가능
- 인증이 성공되면 사용자 풀에서 발급하는 토큰 받음
- 이후 이 토큰을 활용해 백엔드 리소스 접근, AWS 자격 증명 획득 등 가능
2. 사용자 풀 토큰을 사용해 백엔드 리소스에 액세스

- 사용자 풀 그룹을 생성해 권한을 관리하고 사용자 타입 구분 관리 가능
OAuth 2.0을 사용하면 사용자가 보호된 리소스에 액세스할 수 있는 자체 리소스 서버 제작 가능
✔️ 구현 시 고려사항
- 사용자 풀 그룹 정보를 토큰에 포함시키고 백엔드에서 이 정보 확인해 권한 검증
- 사용자 풀 + 백엔드 간 역할 분리 설계 고려
3. 사용자 풀로 API Gateway 및 Lambda를 사용하여 리소스 액세스

- 서버리스 구조와의 연계로
사용자 풀 인증 → API Gateway → Lambda 흐름을 가지는 경우
- API Gateway에서 사용자 풀 토큰을 검증한 뒤, Lambda 함수 또는 자체 API로 요청을 전달해 리소스에 접근
- 그룹 기반으로 IAM 역할을 매핑해 권한 제어 가능
- 사용자가 속한 그룹이 ID 토큰에 포함되고 이 그룹을 통해 IAM 역할이나 리소스 접근 연결 가능
✔️ 활용 포인트
- 서버리스 백엔드를 구축 중이라면 Cognito + API Gateway + Lambda로 구성하면 비교적 빠르게 구축 가능
- 사용자 풀 그룹을 활용해 역할 기반 접근 제어 (RBAC) 구현 추천
4. 사용자 풀 및 자격 증명 풀을 사용해 AWS 서비스에 액세스

- 인증 성공 후 사용자 풀에서 토큰을 받고, 그 토큰을 자격 증명 풀로 전달하면 임시 AWS 자격 증명을 받아 AWS 서비스에 직접 접근 가능
- 사용자 측 또는 앱에서 AWS 리소스에 직접 접근하는 구조 지원
- 클라이언트에서 AWS 리소스를 직접 조작할 경우 IAM 역할 정책을 최소 권한 원칙으로 설계해야 함
5. 서드파티에 인증 및 자격 증명 풀로 AWS 서비스 액세스

- 소셜 로그인등으로 로그인하고 그 이후 AWS 서비스에 접근하는 흐름을 말함
- 자격 증명 풀은 외부 ID 제공자로 인증된 사용자의 토큰을 받아 AWS 자격 증명으로 교환 가능
- 익명 게스트 사용자도 자격증명 풀을 통해 AWS 리소스에 접근 가능하기에 사용자 유형에 따라 설계 필요
6. Amazon Cognito를 사용해 AWS AppSync 리소스에 액세스

- GraphQL API 등으로 구성된 AppSync에서 인증, 인가를 구현하는 시나리오
- 사용자 풀 인증 토큰을 이용해 AppSync의 인증 방식 중 하나인
AMAZON_COGNITO_USER_POOLS 방식 사용 가능
- 자격 증명 풀에서 받은 IAM 자격 증명을 이용해 AppSync API에 대한 AWS_IAM 방식 인증도 가능