빠른 모바일 인증 구현을 위한 Amazon Cognito 서비스 소개 :: 윤석찬 - AWS Monthly Webinar
빠른 인증 서비스 구현을 위한
Amazon Cognito 서비스 소개
윤석찬
아마존웹서비스코리아, 테크에반젤리스트
@channyun
v
모바일 개발자 가라사대…
직면한 문제점
플랫폼 파편화
확장성 높은 동기화의 어려움
앱 관리 및 운영 비용 증가
핵심 UX 만드는데도 시간 증가
사용자에게 줄 핵심 기능 구현 시간 저하
앱개발은 만만한 작업이 아니다!
모바일 앱 코드
사용자 인증 및 관리
사용자 데이터 싱크
비동기 커뮤니케이션
활성 디바이스 분석
사용자 행태 분석
사용자 참여 분석
푸시 노티피케이션
사용자 이벤트 기능처리
플랫폼 독립적 모바일 백엔드
데이터 유효성 및 전송
파일 및 미디어 저장
공유 데이터베이스 스토리지
데이터 수집
기타등등…
v
AWS 가라사대…
모바일 앱 코드
사용자 인증 및 관리
사용자 데이터 싱크
비동기 커뮤니케이션
디바이스 대응
푸시 노티피케이션
사용자 이벤트 기능처리
플랫폼 독립적 모바일 백엔드
데이터 유효성 및 전송
파일 및 미디어 저장
공유 데이터베이스 스토리지
데이터 수집
기타등등…
Amazon Mobile Analytics
Amazon SNS Mobile Push
AWS Lambda
Mobile-optimized Connectors
(Amazon Kinesis, Amazon S3,
Amazon DynamoDB, Amazon SQS)
Amazon Cognito
v
AWS 가라사대…
모바일 앱 관리
서버 없는 모바일 백엔드
API 개발 및 인증 관리
SDK 생성 및 개발자 지원
앱 자동 테스트
품질 관리 향상
다양한 디바이스 대응
AWS Device Farm
Amazon API Gateway
모바일 앱 개발
모바일 백엔드를 한번에 구성
모바일 샘플 앱 코드 제공
모바일 서비스 통합 및 선택 연동
AWS MobileHub
Amazon
Cognito
Amazon Mobile
Analytics
Amazon SNS
Mobile Push
Amazon Kinesis
Recorder
DynamoDB
Mapper
S3 Transfer
Manager
SQS Client Amazon SES
Client
AWS 글로벌 인프라
모바일 앱, 모바일 게임, IoT 디바이스
AWS 모바일 SDK(iOS, Android), API 엔드포인트, AWS 관리 콘솔
컴퓨팅 스토리지 네트워크 데이터 분석 데이터베이스
AWS Lambda
Lambda
Functions
λ λ λλ
AWS 모바일 빌딩 블럭
Amazon API
Gateway
Amazon
Device Farm
v
AWS Mobile SDK
Amazon Mobile
Analytics
Amazon Cognito
(Sync)
AWS Identity and
Access Management
Amazon Cognito
(Identity Broker)
Amazon S3
Transfer Manager
Amazon CloudFront
(Device Detection)
Amazon DynamoDB
(Object Mapper)
Amazon Kinesis
(Recorder)
Amazon Mobile
Analytics
Amazon SNS
Mobile Push
Your
Mobile
App
사용자 인증
사용자 권한 부여
사용자 행동 분석
미디어의 저장 및 공유
인증정보 단말간 공유
미디어 전송
공유 데이터의 저장
실시간 데이터 스트림 처리
재방문 추적
푸시 알림 전송
AWS Mobile SDK
v
Amazon Cognito 소개
간단한 인증 방식
제공 및 접근 관리
완전 관리형
서비스로서 사용자
가입 및 로그인 기능
제공
디바이스 및 플랫폼간
데이터 동기화
사용자 가입 및
로그인 서비스
디바이스 및 플랫폼
관계 없이 사용자 인증
및 데이터 동기화
다양한 소셜 로그인
방식을 통해 쉽게
로그인 가능
v
아이덴티티
제공자
사용자
아이덴티티철수 영희 민수
모든 디바이스
모든 플랫폼
모든 AWS
서비스
Amazon Cognito: 사용자 인증
Mobile
Analytics
S3 DynamoDB Kinesis
다양한 소셜 로그인 제공
트위터, 페이스북, 구글플러스 및 아마존
인증을 손쉽게 인증할 수 있음
디바이스 및 플랫폼간 인식 가능
다양한 디바이스와 운영체제에서도 사용자
인증이 가능함
안전한 인증 체계 구축
모바일 디바이스에서 안전하게 AWS 서비스에
접근가능하며 IAM(Identity and Access
Management)사용 가능
v
Amazon Cognito: 게스트 사용자 지원
Visitor
Preferences
Cognito
Store
Guest
EC2 S3 DynamoDB Kinesis
게스트 사용자 접근
90%의 단순 앱 사용자를 위해 계정 생성이나
로그인없이도 AWS 서비스를 안전하게 접근 가능
클라우드 데이터 저장
손님에서 가입 및 로그인 하면 끊김없이 데이터
저장 가능
보안 베스트 프랙티스 활용
가입 및 로그인 후에도 사용자 권한은 일시적이고
제한적으로 접근하게 되며 AWS 보안 규정에
따라 안전하게 관리 가능
iOS Android JavaScript
v
Amazon Cognito: 모바일 보안 체계
EC2 S3 DynamoDB Kinesis
AWS Credentials 보호
AWS Access Key나 Access Credential을
모바일앱에 포함하지 않고, 임시 크리덴셜을
부여받음
임시 토큰 기반 인증
일시적이고 제한된 권한만 가진 토큰을 무작위로
생성 전달하며 이를 삭제할 수 있음
세부적인 AWS 접속 허용
기존 IAM 사용자 권한에 따라서 제한적인 AWS
접근 권한을 조절 가능.
자체 인증 시스템 사용
자체 인증을 가지고 있는 경우에도,
GetOpenIdTokeForDeveloperIdentity() 를
통해 활용 가능
v
Amazon Cognito: 인증 체계도
Identitypool
Identity
Providers
같은 보안 정책을
공유하는 아이덴티티풀
Access Policy
Access to AWS
Servicesidentitypool
Unauthenticated
Identities
authenticated
identities
AWS IAM Roles
AWS Account
웹 아이덴티티풀
S3
DynamoDB
Get Delete Put
v
Amazon Cognito: 데이터 동기화
User Data
Storage and
Sync
iOS/Android/FireOS
k/v data
Identity pool
앱데이터, 환경 설정 및 상태 저장
로그인 이후에 앱 및 디바이스 데이터를
디바이스 및 플랫폼과 관계 없이 한 줄의
코드로 저장
오프라인 지원
데이터는 로컬 SQLite DB에 먼저
저장하므로 인터넷 접속과 관계 없이
사용 가능
백엔드 없이 이용
간단한 SDK를 이용하여 서버 사이드
코드가 필요 없음
사례: Concrete Software
Amazon Cognito를 이용하여 보다
빠르고 사용자 경험이 좋은
모바일 게임을 만들 수
있었습니다.Keith A. Pichelman
CEO, Concrete Software
”
“ • 다중 디바이스 및 플랫폼을 통해
중단없는(seamless) 사용자 경험 제공 필요
• 백엔드 서버 없이도 클라우드에 게임 진행 사항
저장 및 디바이스별 동기화
문제점
해결법
• Amazon Cognito를 통해 안전하게 AWS
자원에 접근 가능
• Cognito Sync를 통해 백엔드 인프라 없이도
사용자 디바이스의 캐싱하고 클라우드에
저장하는 유연성 제공
v
Amazon Cognito: 동기화 기능 예제
CredentialsProvider 및 CognitoClient 초기화
데이터 동기화
원하는 데이터 셋이나 키/밸류 설정
provider = new CognitoCachingCredentialsProvider (context, AWS_ACCOUNT_ID,
COGNITO_POOL_ID, COGNITO_ROLE_UNAUTH, COGNITO_ROLE_AUTH, Regions.US_EAST_1);
cognito = new CognitoSyncManager (context, Regions.US_EAST_1, provider);
dataset.synchronize(new SyncCallback(){..});
cognito.openOrCreateDataset(datasetName);
dataset.put(key, value);
v
DataSet *dataset = [syncClient openOrCreateDataSet:@"myDataSet"];
NSString *value = [dataset readStringForKey:@"myKey"];
[dataset putString:@"my value" forKey:@"myKey"];
AWSCognitoSyncClient *syncClient = [[AWSCognitoSyncClient alloc]
initWithConfiguration: configuration];
[dataset synchronize];
Amazon Cognito: 동기화 기능 예제
CredentialsProvider 및 CognitoClient 초기화
데이터 동기화
원하는 데이터 셋이나 키/밸류 설정
모든 개발자의 숙명… 회원 가입 및 로그인
항상 해야 하는 중복된 작업
자신의 사용자 디렉토리를 만들기 위해
많은 시간과 리소스를 투자해야만 했음
인증 및 보안에 대한 고려가 필요
사용자 확인, 인증 및 암호 관리 등
보안적인 관리 및 처리가 쉽지 않음
인증의 확장성의 문제
앱이 성공하고 나면, 늘어나는 사용자 디렉토리
인프라를 확장 필요성
Amazon Cognito UserPools
Amazon Cognito User Pools 소개
Federation Identities
Your User Pools
사용자 계정 서비스에 대한
관리형 서비스로서,수억명의
사용자까지 쉽게 확대 가능
3rd 파티 ID제공자 (페이스북, Twitter and
SAML 제공자 등)를 통해 로그인 할수 있음.
AWS 리소스에 대한 앱의 접근에 대해
제어할 수 있음
Cognito User Pools 특징
여러분의 모바일 웹 및 앱에
대해 별도 사용자 관리
기능을 만들지 않아도 됩니다.
쉬운 사용자 관리
AWS가 가진 보안에 대한
경험을 기반으로 이메일 인증,
MFA 인증의 기능을 쉽게
적용할 수 있습니다.
높은 수준 보안 관리
사용자 디레토리를 손쉽게
생성합니다. 간단하면서,
안전하고, 낮은 비용의 완전
관리형 서비스로 수억명까지
확장 가능합니다.
사용자 디렉토리 관리
Congnito User Pools 주요 기능
이메일 혹은
전화번호 확인
암호
분실/재설정
회원 가입 및
로그인
사용자는 이메일 주소나
전화번호를 통해 계정 확인
사용자는 자신의 암호를
변경하거나 재설정 가능
사용자는 이메일, 전화번호
혹은 아이디로 회원 가입
맞춤형 사용자
프로파일
사용자 프로필 가져오기
및 추가 속성 관리 가능
SMS-기반 MFA
멀티 팩터 인증(MFA)를
사용하게 할 수 있음
토큰 기반 인증
원격 암호
프로토콜
OpenID Connect (OIDC)
와 OAuth 2.0 지원
Secure Remote Password
(SRP)를 통한 암호 처리
AWS Lambda Hook을 통한 커스터마이징
Lambda Hook 로직을 추가
- Pre- and post user sign-up
- Pre- and post user sign-in
- Post user confirmation
사용 예
- 사기 감지
- Email 검증
- 맞춤형 메시지 검증
및 광고 게재
Cognito User Pools 과 API 게이트웨이
Custom Authorizer 기능
API에 대한 접근을 제어하기
위해 Oauth나 SAML과 같은 토큰
인증 기능 사용 가능
Native Support
User Pools는 API 게이트웨이와 함께
API 요청을 인가. API 게이트웨이가
ID 토큰을 받아서 유저풀에 기반한
사용자 인증 가능
Amazon Cognito 실습해 보기
https://github.com/channy/aws-lambda-zombie-workshop/blob/master/README-ko.md
Zombie Microservices Workshop은 Amazon
Congnito, AWS Lambda 및 Amazon API Gateway,
Amazon DynamoDB와 기타 AWS 서비스를
기반으로 서버 없는(Serverless)
애플리케이션을 구축해 보는 실습 과정으로 전
세계적인 좀비 확산 사태가 발생할 경우, AWS
Lambda 생존자 구출 특공대의 일원으로서
생존자간 소통을 위한 시스템을 구축하는
업무를 완료하게 됩니다.
한국어 실습 가이드
v
AWS Mobile SDK로 개발 시작하기
SDK 다운로드 iOS | Android | Unity
Amazon Cognito용 Javascript SDK(베타) 다운로드
SDK 시작 안내서 iOS | Android | Unity
Cognito 시작 안내서 iOS | Android
Cognito API 참조 사용자 풀 | ID 페더레이션 | 동기화
Cognito 사용자 풀 샘플 앱 iOS | Andriod
https://aws.amazon.com/ko/cognito/dev-resources/
Q&A
@channyun
AWS 클라우드 서비스 사용 시, 궁금한 점은 페이스북 메시지 혹은
이메일 channyun@amazon.com 으로 해주세요!
http://bit.ly/awskr-feedback