42
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 이재일, ZIPBROTHERS Cognito 와 함께 Serverless를 손쉽게 사용자 인증 구현하기

Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

Embed Size (px)

Citation preview

Page 1: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

이재일, ZIPBROTHERS

Cognito 와 함께 Serverless를손쉽게 사용자 인증 구현하기

Page 2: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

안녕하세요.

저는 이재일 입니다.

어느 작은 스타트업의 CTO

(초보 테크 오퍼레이터)입니다.

현재 여자친구는 1년 째

Page 3: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017
Page 4: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017
Page 5: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

본 강연에서 다룰 내용

What is Cognito?

Cognito User Pool ( Identity Provider )

Cognito Federated Identity

Why Cognito?

Cognito 자격증명이 적용된 Serverless

Conclusion

Page 6: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

What is Cognito?

Page 7: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

What is Cognito?

1

23

Page 8: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

What is Cognito?

Federated

Identities

Cognito

User

Pool

Page 9: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

What is Cognito?

Cognito User Pool

Cognito Federated Identity

Congito 는 사용자 통합 인증 플랫폼

{

Page 10: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

What is Cognito?

IAM Role

Temporary Permitted Session

User 식별, 통합

Login Provider 인증

임시권한 발급

Cognito User Pool

Cognito Federated Identity

Page 11: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

Cognito User Pool 101

Page 12: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

3rd party Identity Provider 를 거치지 않고, 클릭 몇 번으로 자기 서비스만의 사용자관리풀을 구축할 수 있음.

Page 13: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

User Attributes는 커스터마이징 가능.

상기 항목들을 기본 Attribute로 제공.

Page 14: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

Password는 AWS가 안전하게 관리.

Password Rule 지정 가능. Regexr 을 이용한 Rule 지정은 불가능.

관리자에 의한 계정이 생성되고, 한번도 사용 되지 않은 채 방치될 경우 해당 계정을 삭제함.

Page 15: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

MFA 를 지원함. (Email, SMS Dual)

체크한 항목으로 Verification 을 강제함.

Page 16: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

{####} 이 인증코드로 치환됨.

Web Console의 버그-> 한글 입력이 불가능.-> CLI나 SDK를 이용하면 됨.

Page 17: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

User Pool 로그인 시 발급되는 Refresh Token 의 만료 주기. 자동로그인에 사용.

JavaScript, Python SDK에서 버그 이슈 있음.

Android, iOS SDK 이외의 경우 SRP 알고리즘에 버그 존재. 타언어 SDK는 사용 불가.

Lambda Trigger와 연계됨.

Page 18: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

User Pool

App(Client)

App(Client)

UserN..UserN..UserN..UserN..

UserN..UserN..UserN..UserN..

AttrA, AttrC, AttrH

AttrA, AttrB, AttrD

App(Client) 마다 다른 Attributes Permission 지정 가능

Page 19: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

User Pool

App(Client)

App(Client)

UserN..UserN..UserN..UserN..

UserN..UserN..UserN..UserN..

AttrA, AttrC, AttrH

AttrA, AttrB, AttrD

Group1

Group2

모든 User 는 여러 그룹에 소속될 수 있음.

Page 20: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

User Pool

App(Client)

App(Client)

UserN..UserN..UserN..UserN..

UserN..UserN..UserN..UserN..

AttrA, AttrC, AttrH

AttrA, AttrB, AttrD

Group1

Group2

Use Case - 사내 동호회 회원관리

볼스주식회사

영업팀

개발팀

(각각다른 Attrs)

(각각다른 Attrs)

테니스동호회

야구동호회

Page 21: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

User Pool Lambda Trigger

• Pre sign-up

• Post Confirmation

• Custom message

• Pre authentication

• Post authentication

• Define Auth Challenge

• Create Auth Challenge

• Verify Auth Challenge

User UserPool

sign_up()

confirm_user()

initiate_auth()

auth_challenge()

respond_to_auth_challenge()

verify_auth_challenge()

Page 23: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

Cognito Federated Identity 101

Page 24: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

클릭 몇 번으로 3rd party Identity Provider 는 물론 User Pool을 이용해 생성한 Identity Provider 와 연동 가능. 통합 사용자 관리가 매우 편리함.

Page 25: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

IAM RoleTemporary Permitted Session

해당 provider와 연결된 Identity 반환신규 -> Identity 생성 후 반환

STS로부터 임시권한발급

Federated Identity

Page 26: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

Identity Id

Page 27: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017
Page 29: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

User Pool

1. sign_up()

2. confirm()

Federated Identities

3. get_id()

4. validate()

5. return_identity()

6. AssumeRoleWithCredentials()IAM Role

7. create_sts_session_with_IAM_Role()8. return permitted session()

Identity Provider + Federated Identities Flow

Page 30: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

Then, WHY Cognito?

Page 31: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

Then, WHY Cognito?

아주 쉬운 사용자 풀 생성, 관리( 사용자풀 구축을 위한 시스템 엔지니어링, 코딩이 거의필요없음)

Page 32: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

Third-party Identity Provider Federation 용이

Then, WHY Cognito?

Page 33: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

임시 자격 증명(STS)을 이용한 AWS 리소스 연계 및 정밀한 접근권한 관리 가능

Then, WHY Cognito?

Page 34: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

User Pool

App(Client)

App(Client)

UserN..UserN..UserN..UserN..

UserN..UserN..UserN..UserN..

AttrA, AttrC, AttrH

AttrA, AttrB, AttrD

FederatedIdentities

IdentityN…IdentityN…IdentityN…IdentityN…IdentityN…IdentityN…IdentityN…IdentityN…

Default IAM Role

Custom IAM Role

Unauthorized IAM Role

[IDP] -link-[IDP] -link-[IDP] -link-

( Unauthorized IdentityN…)

Page 35: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

사용자 정보 유출 위험 감소 ( 사용자 정보 보관의 주체가AWS )

Then, WHY Cognito?

Information Leak

Page 36: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

Cognito 자격증명이 적용된Serverless

DEMO

Page 37: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

Cognito S3

DynamoDBLambda

AWS JS

SDK

DEMO

API Gateway

Cognito + AWS JS SDK + S3 을 이용한 서버리스 포토갤러리

Page 38: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

DEMO

사용자가 늘어난다 -> Cognito가 알아서 할 일이다.

새로운 사용자 모델 -> Cognito UserPool에서 App Client 하나 추가

같은 계정으로 새로운 서비스 -> Cognito UserPool 생성 후Federation

* 트래픽 부하가 늘어난다 -> Lambda 가 많이 켜진다.

(Python Serverless Deployment Using Zappa )

데이터베이스 IOPS 증가 -> DynamoDB Provising 상향

파일 업/다운로드 트래픽 -> 임시자격증명과 SDK로 Client-S3.

Direct

Page 39: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

Conclusion

Page 40: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

Conclusion

AWS Cognito 는 사용자 관리와 관련시스템 엔지니어링고민을 머릿속에서 지우게 해주는 아주 좋은 사용자 인증솔루션

Serverless 와 궁합이 잘 맞다!

활성 사용자 (MAU) 수가 많아질 경우 부담되는 가격이 흠.-> 프로젝트성 서비스 개발에 매우 적합.

No Cost, Fast Dev, Stable Infra.

STS 임시 자격증명을 이용해 부하분산을 고객의 Device에게!?

Page 41: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

본 강연이 끝난 후…

http://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html

https://github.com/aws/amazon-cognito-identity-js

https://blog.rackspace.com/part-2-building-serverless-architecture-aws

https://github.com/Miserlou/Zappa

https://aws.amazon.com/ko/blogs/mobile/integrating-amazon-cognito-user-pools-with-api-gateway/

Page 42: Amazon Cognito와 함께 서버리스를..! - 이재일 (강남비기너모임) :: AWS Community Day 2017

@awskrug

#AWSKRUG 해시태그로 소셜 미디어에여러분의 행사 소감을 올려주세요.

Thank you.