공부하기싫어
article thumbnail

#AWS Certified Developer Associate

 

Cognito 사용자 풀, Cognito 자격증명 풀 및 Cognito Sync

 

 

 

371. Cognito 개요

cognito 는 사용자들에게 신분(identity) 을 주기 위해 사용됨

사용자는 IAM user 가 아닌 클라우드 외부의 사용자를 의미함

 

Cognito User Pools :

애플리케이션 사용자들에게 로그인 기능을 제공함

API Gateway 및 ALB 와 직접적인 통합을 할 수 있음

 

Cognito Identity Pools (Federated Identity) :

자격 증명 풀 (신분 연합)

애플리케이션에 연결된 외부 사용자들에게 AWS 자격 증명을 제공하고 AWS 리소스에 직접 액세스 할 수 있도록 해줌

자격 증명 풀 + 사용자 풀 통합 - 신분을 가지고 AWS 에 액세스 하는 사용자들이 사용자 풀에 저장된다고 할 수 있음

 

Cognito Sync :

모바일기기의 데이터를 cognito 로 동기화 해줌

데이터 앱 동기화 작업은 AppSync 라는 새로운 서비스로 대체되서 사용되고 있음

 

Cognito vs IAM

Cognito

'수백명의 사용자', '모바일 사용자', '모바일 앱에서 SAML 을 통한 사용자 인증 필요' 의 경우 Cognito 를 사용

애플리케이션을 통해 로그인하고 등록한 다른 모든 사용자 등에 대해서는 Cognito 사

 

IAM : AWS 환경 내에서의 사용자 신뢰를 의미

 

 

 

 

 

372. Cognito 사용자 풀 (Cognito User Pools , CUP)

웹 및 모바일 애플리케이션 사용자들의 서버리스 데이터베이스를 생성할 수 있는 방법

단순 로그인 (사용자 이름이나 이메일 + 비밀번호의 조합) 가능

비밀번호 변경 가능

이메일 및 전화번호 인증 가능

MFA (Multi-Factor Authentication, 다요소 인증) 가능

Federated Identities (연합 인증) (facebook, google, saml 등) 가능

만약 개인 정보가 다른곳에서 유출된 경우 사용자를 차단할 수 있음

사용자가 cognito 사용자 풀을 통해 로그인을 하면 api 로부터 JWT 토큰을 받게 됨 (json web token)

 

 

CUP Itegrations

API Gateway 와 ALB 와 통합됨

 

api gateway 의 경우

사용자들이 cognito 사용자 풀을 통해 인증을 하고 json web token 을 받음

받은 jwt 를 api gateway 로 전달하고

api gateway 는 cognito 토큰을 평가하고 유효 여부를 판단한 뒤 백엔드로의 액세스를 허용해줌

 

alb 와 리스너와 규칙을 사용해서 cognito 사용자 풀에 대해

사용자들을 인증할 수 있음

인증이 끝나면 사용자들을 대상그룹의 백엔드로 보냄

여기서 대상 그룹은 ec2 instance, lambda, ecs container 등

 

 

 

373. Cognito 사용자 풀 실습

강의에 나온 콘솔과 실제 aws 콘솔이 다르다

콘솔이 구버전일 때 강의를 촬영했나보다

 

step 1 로그인 환경 구성

로그인 환경 구성

user name, email, phone number 로 로그인 할 수 있다고 한다

여러개를 체크할 수도 있다고 함

 

연동 로그인

연동로그인을 체크하게 되면 여러 서드 파티 자격 증명이 나오게 된다

openid connect 로 지원하는 다른 사이트 자격증명을 사용할 수도 있나보다

 

step 2 보안 요구사항 구성

 

암호 정책

비밀번호 규칙을 지정할 수 있다

cognito 지정값이 있지만 실습을 위해 사용자 지정으로 바꾸고 모든 조건을 해제한 후 길이도 6인 최소로 해줬다

 

mfa

mfa 가 권장된다고 한다 sms 메세지나 앱을 통한 otp 인증을 할 수 있지만 실습에는 없음으로 하고 넘어갔다

 

사용자 계정 복구

암호를 잊어버렸을때 복구하는 법을 설정한다고 한다

 

step 3 가입 환경 구성

셀프 서비스 가입

사용자가 직접 등록할수 있게할지를 선택한다고 한다

퍼블릭 앱 사용시 필수일 것이다

 

속성 확인 및 사용자 계정 확인

정확히 이해는 안가는데 cognito 가 사용자를 직접 인증한다는 것 같다

활성화 하지 않으면 관리 api 작업 및 lambda 트리거가 사용자를 검증하고 확인한다고 하는데

편의를 위해 새로 만들어진 기능인것 같다

 

필수 속성

필수 속성을 정의하고 추가할 수 있다

여러 속성이 있는데 닉네임을 추가해봤다

 

사용자 지정 속성

속성을 아무거나 새로 만들수 있다고 한다

 

 

step 4 메세지 전송 구성

cognito 를 사용하여 이메일 전송

SES 는 배우지도 않았기때문에 cognito 를 통한 이메일 전송 선택

일단 기본값으로 놓고 넘어간다고 한다

 

step 5 앱 통합

이름을 입력해주고

 

아래에 여러 기능들이 있지만 강의에서 다루진 않을것 같다

 

이렇게 해서 생성해줬는데 강의에선 기본값으로 풀을 생성한다고 한다

그런데 새로운 콘솔에는 기본값 풀 생성이 없는것 같아서 이전 콘솔로 이동해서 생성해줬다

 

이전 콘솔

 

새로 만들어준 풀로 들어가서

앱 통합에 앱 클라이언트를 새로 만들어줬다

이 앱 클라이언트로 들어가서

 

콜백 url

로그인이 성공하고 콜백되는 url 을 입력해줬다

위의 호스팅 url 을 사용하려면 도메인을 설정해야 한다고 한다

 

콘솔 메인으로 돌아가서 앱 통합의 도메인에서 도메인을 생성해줬다

cognito domain

cognito 로 접속하기 위해서 사용할 수 있는 도메인이다

 

이렇게 설정해준 후 사용자 풀 콘솔의 앱 통합에 있는 호스팅 UI 에서 호스팅 UI 보기를 클릭하면

 

hosting ui

이렇게 ui 화면을 미리 볼 수 있다

 

로그인을 해본다고 한다

 

sign up

규칙에 맞게 회원가입을 해주고

verification

메일로 인증을 해주면

 

callback url

설정해뒀던 콜백 url 로 이동하게 된다

 

사용자 풀 콘솔로 돌아가서 user 탭에 가보면

 

방금 가입한 정보를 확인할 수 있다

 

사용자들이 로그인 혹은 가입 등을 할 때마다 이벤트가 발생하게 되는데

이런 이벤트들에 반응하도록 람다 함수를 호출할 수 있다고 한다

 

lambda 트리거

여러가지 작업에 의해 발생한 이벤트에 트리거되는 람다 함수를 실행할 수 있다

 

 

374. Cognito 사용자 풀 - 기타

Lambda triggers

- cognito 사용자 풀은 트리거를 통해 람다 함수를 동기식으로 호출할 수 있음

- 람다 트리거를 이용해 가입 요청을 허용 또는 거부할 수 있음

- 커스텀 분석을 위해 인증 성공 후 이벤트를 로깅할 수 있음

- 토큰 클레임을 증가시키거나 억제할 수 있음

 

Hosted Authentication UI

- 호스팅 인증 ui 가 있어 애플리케이션에서 그 ui 를 프로그래밍 하지 않고도 cognito 가 생성한 것을 재사용할 수 있음

- 이 호스팅 ui 를 이용하면 소셜 로그인과 OIDC 및 SAML 과의 통합을 위한 기반을 가질 수 있음

- 이런 UI 를 애플리케이션 내에서 사용하고 싶을 때 로고나 커스텀 CSS 를 통해 수정할 수 있음

 

 

(03.03 끝)

 

(03.05 시작)

 

375. Cognito 자격 증명 풀

Cognigo Identity Pools (Federated Identities) - cognito 자격 증명 풀 (연합 인증)

 

자격 증명 풀은 신뢰할 수 있는 제 3자를 통해 사용자들에게 로그인을 허용함

제 3자는 공용 제공자 일 수 있는데 예를들어 Amazon, Facebook, Google, Apple 등으로 로그인 하는 것

- Amaozn Cognito 사용자 풀로 이미 로그인된 사용자들을 허용할 수 있음

- Open ID Connect 나 SAML 제공자도 허용할 수 있음

- 커스텀 로그인 서버인 Developer Authenticated Identities 도 허용 가능

- 인증되지 않은 게스트 사용자들의 AWS 로의 액세스도 허용할 수 있음

 

사용자들은 이 AWS 자격 증명을 획득한 이후 직접 AWS 서비스로 액세스 할 수 있음

- SDK 를 이용한 API 콜을 통하거나 API Gateway 를 통해 액세스

- 이 자격 증명들은 Cognito 자격 증명 풀에서의 설정을 기반으로 한 IAM 정책을 가지고 있음

- Fine-Grained Control 의 user_id 값을 기반으로 커스터마이징 될 수 있음

 

 

웹과 모바일 애플리케이션에서 사설 S3 버킷과 DynamoDB 테이블에 접근하려고 함

- IAM 유저를 생성하는 것이 아닌 자격 증명 풀로 자격 증명 부여

 

1. 사용자들이 토큰을 획득하게 하기 위해 cognito 사용자 풀 혹은 연동 로그인으로 연결되도록 허용함

2. 토큰을 받은 뒤 cognito 자격 증명 풀 서비스로 통신을 보내 토큰과 임시 aws 자격 증명의 교환을 요청함

3. 자격 증명 풀은 정의된 제공자를 통한 로그인을 검증함

4. 검증이 끝나면 cognito 자격 증명 풀이 웹 및 모바일 앱 사용자를 위한 임시 자격 증명을 받기 위해 STS 서비스와 통신함

5. 위 과정이 끝나면 자격 증명은 애플리케이션으로 반환됨

6. 이러한 자격 증명과 관련 IAM 정책으로 사용자들은 aws 를 사용하고 직접 액세스 할 수 있게 됨

 

자격 증명 풀 + 사용자

 

IAM Role

인증된 사용자 및 게스트 사용자 모두에 해당하는 Default IAM Role 의 정의가 가능함

사용자 ID 에 따라 어떤 역할이 어떤 사용자에게 배정될지 선택하는 규칙을 정의할 수 있음

정책 변수를 사용해서 IAM 정책을 커스타마이징 할 수 있음

이런 IAM 자격 증명은 STS 를 통해 Cognito 자격 증명 풀에 의해 획득됨

역할은 올바른 작동을 위해 반드시 Cognito 자격 증명 풀의 신뢰 정책을 가지고 있어야 함

 

 

 

376. Cognito 자격 증명 풀 실습

cognito 콘솔에서 연동자격 증명으로 들어가서 새 자격 증명 풀을 만든다고 함

 

새 자격 증명 풀

이름을 입력해주고

인증되지 않은 자격 증명으로 게스트 유저에 대한 접근을 허용해준다

인증 흐름은 '향상된 흐름' 과 '3단계 기본 흐름' 을 선택할 수 있는데 체크하지 않으면 향상된 흐름으로 선택된다고 함

 

인증 공급자

위 연동 로그인을 모두 사용할 수 있다고 함

cognito 사용자 풀과 연결을 위해 사용자 풀 id 와 앱 클라이언트 id 를 입력해줘야 한다고 하는데

이전에 만들었던 demopool-default 의 id 들을 가져왔다

풀 생성

 

그러면 IAM 역할이 새로운 자격 증명 풀을 사용하도록 식별해야 한다고 함

역할을 생성해줘야 한다는 것 같음

 

두가지 역할을 생성할 것을 허용해줘야 하는데

첫번째 역할은 일반 유저를 위한 역할이고 두번째 역할은 인증되지 않은 신분을 위한 역할이 생성된다

허용

 

샘플 코드

허용해주면 역할이 생성되었다는 화면이 나오면서 샘플 코드 화면으로 전환된다

플랫폼에 알맞는 sdk 를 다운받을 수 있고 샘플 코드를 제공해준다

 

대시보드로 이동하면

 

대시보드

인증되지 않은 유저 수와 사용자 풀에 등록된 유저 수를 확인할 수 있고 그래프도 제공해 준다

 

자격 증명 브라우저로 이동해보면

사용자가 로그인한 후 신분 ID 로 이들을 검색할 수 있다

 

IAM 콘솔로 가서 역할을 확인해보면

생성을 허용해준 위 2가지 역할이 바로 인증된 사용자들이 aws 에서 무엇에 액세스 할 수 있을지 정하기 위해 커스터마이징 해야 하는 부분이다

정책을 연결하거나 직접 추가해서 aws 리소스로의 접근을 허용할 수 있다

 

다시 cognito 자격 증명 풀 대시보드로 돌아와서 자격 증명 풀 편집으로 들어가보면 추가 옵션을 확인할 수 있다고 한다

 

푸시 동기화는 만약 한 기기에서 사용자 설정이 변경된 경우, 이 변경이 다른 모든 기기로 푸시될 수 있는 기능이다

 

cognito streams 를 사용하면 cognito 의 모든 데이터 세트 변경 사항이 kinesis 스트림에 실시간으로 푸시된다

그럼 이 kinesis 스트림에서 이벤트들에 대한 실시간 처리를 활성화 할 수 있다

 

cognito events 는 cognito 에서의 중요 이벤트에 대응해 람다 함수를 실행하게 하는 것

 

 

 

377. Cognito 사용자 풀 vs Cognito 자격 증명 풀

cognito user pools 과 cognito identity pools 차이점

 

Cognito User Pools :

웹 및 모바일 애플리케이션을 사용하는 사용자들의 db 가 있음

공용 소셜 로그인 제공자나 OIDC, SAML 을 통해서 로그인을 연합할 수 있음

로고를 포함해 인증에 사용되는 UI 를 커스터마이징 할 수있음

인증 플로우 도중 람다를 이용한 트리거가 있음 - 예를들어 통합을 원치 않는 경우 커스텀 분석 솔루션을 이용할 수 있음

 

Cognito Identity Pools :

사용자들을 위한 AWS 자격 증명을 획득하도록 해줌

사용자들은 공용소셜, OIDC, SAML, Cognito User Pool 을 이용해 로그인 할 수 있음

사용자들은 게스트 사용자(인증되지 않은 사용자) 일 수 있음

IAM 역활과 정책에 매핑됨 - 정책 변수를 이용해 사용자들에게 딱 맞춘 역할을 커스터마이징 할 수 있음

 

CUP + CIP :

사용자 풀은 사용자 및 비밀번호의 관리에 사용됨

자격 증명 풀은 AWS 서비스로의 액세스를 부여하는데 사용됨

 

 

 

378. Cognito 동기화

Cognito Sync :

더이상 사용되지 않는 서비스 - AWS AppSync 로 대체되어 사용되고 있음

사용자 선호와 환경 설정 및 모바일 또는 웹 애플리케이션의 상태를 저장하는 서비스

이 서비스는 기기 간 동기화를 지원함 (iOS, Android 등 어떤 플랫폼에서도 가능함)

오프라인 작업이 가능함 - 설정을 변경하고 다시 온라인에 접속하게 되면 변경 사항이 자동으로 동기화됨

최대 1MB 의 데이터를 데이터 세트에 저장할 수 있음

최대 20개의 데이터세트가 동기화 될 수 있음

 

Push Sync : 신분 데이터가 바뀌면 모든 기기들에 소리 없이 알림을 보내는 기능, 모든 기기에서 동기화를 해줌

Cognito Stream : Cognito 에서 Kinesis 로 데이터를 스트리밍 할 수 있음

Cognito Events : 이벤트에 대응해 람다 함수를 실행할 수 있음