Amazon Cognito

๊ฐ„๋‹จํ•˜๊ณ  ์•ˆ์ „ํ•œ ์‚ฌ์šฉ์ž ๊ฐ€์ž…, ๋กœ๊ทธ์ธ ๋ฐ ์•ก์„ธ์Šค ์ œ์–ด

Amazon Cognito๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์›น๊ณผ ๋ชจ๋ฐ”์ผ ์•ฑ์— ๋น ๋ฅด๊ณ  ์†์‰ฝ๊ฒŒ ์‚ฌ์šฉ์ž ๊ฐ€์ž…, ๋กœ๊ทธ์ธ ๋ฐ ์•ก์„ธ์Šค ์ œ์–ด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Amazon Cognito์—์„œ๋Š” ์ˆ˜๋ฐฑ๋งŒ์˜ ์‚ฌ์šฉ์ž๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๊ณ , Facebook, Google ๋ฐ Amazon๊ณผ ๊ฐ™์€ ์†Œ์…œ ์ž๊ฒฉ ์ฆ๋ช… ๊ณต๊ธ‰์ž์™€ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์ž๊ฒฉ ์ฆ๋ช… ๊ณต๊ธ‰์ž(SAML 2.0 ์‚ฌ์šฉ)๋ฅผ ํ†ตํ•œ ๋กœ๊ทธ์ธ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๋›ฐ์–ด๋‚œ ์•ฑ์„ ๋งŒ๋“œ๋Š” ๋ฐ ์‹œ๊ฐ„์„ ํ• ์• ํ•˜์‹ญ์‹œ์˜ค.

์ธ์ฆ์€ Amazon Cognito๊ฐ€ ์ฒ˜๋ฆฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Cognito-SI-CI-IMG_landing_userpool

์•ˆ์ „ํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์‚ฌ์šฉ์ž ๋””๋ ‰ํ„ฐ๋ฆฌ

Amazon Cognito ์‚ฌ์šฉ์ž ํ’€์€ ์ˆ˜์–ต ๋ช…์˜ ์‚ฌ์šฉ์ž๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์•ˆ์ „ํ•œ ์‚ฌ์šฉ์ž ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ํ’€์€ ์™„์ „๊ด€๋ฆฌํ˜• ์„œ๋น„์Šค์ด๋ฏ€๋กœ ์„œ๋ฒ„ ์ธํ”„๋ผ ๊ตฌ์„ฑ์— ๋Œ€ํ•œ ๊ฑฑ์ • ์—†์ด ์†์‰ฝ๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Cognito ์‚ฌ์šฉ์ž ํ’€์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ

 

Cognito-SI-CI-IMG_landing_federation

์†Œ์…œ ๋ฐ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์ž๊ฒฉ ์ฆ๋ช… ์—ฐ๋™

Amazon Cognito๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ SAML์„ ์ง€์›ํ•˜๋Š” Facebook, Google ๋ฐ Amazon๊ณผ ๊ฐ™์€ ์†Œ์…œ ์ž๊ฒฉ ์ฆ๋ช… ๊ณต๊ธ‰์ž์™€ Microsoft Active Directory์™€ ๊ฐ™์€ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์ž๊ฒฉ ์ฆ๋ช… ๊ณต๊ธ‰์ž๋ฅผ ํ†ตํ•ด ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฐ๋™์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ

 

Cognito-SI-CI-IMG_landing_security

ํ‘œ์ค€ ๊ธฐ๋ฐ˜ ์ธ์ฆ

Amazon Cognito ์‚ฌ์šฉ์ž ํ’€์€ ํ‘œ์ค€ ๊ธฐ๋ฐ˜ ์ž๊ฒฉ ์ฆ๋ช… ๊ณต๊ธ‰์ž์ด๋ฉฐ Oauth 2.0, SAML 2.0, OpenID Connect์™€ ๊ฐ™์€ ์ž๊ฒฉ ์ฆ๋ช… ๋ฐ ์•ก์„ธ์Šค ๊ด€๋ฆฌ ํ‘œ์ค€์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

ํ‘œ์ค€ ๊ธฐ๋ฐ˜ ์ธ์ฆ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ

 

Cognito-SI-CI-IMG_landing_compliance

์•ฑ๊ณผ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ๋ณด์•ˆ

Amazon Cognito๋Š” Multi-Factor Authentication๊ณผ ์ „์†ก ๋ฐ์ดํ„ฐ ๋ฐ ์ €์žฅ ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™”๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. Amazon Cognito๋Š” HIPAA ์ ๊ฒฉ ์„œ๋น„์Šค์ด๋ฉฐ, PCI DSS, SOC, ISO/IEC 27001, ISO/EIC 27017, ISO/EIC 27018 ๋ฐ ISO 9001์„ ์ค€์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.

๋ณด์•ˆ ๋ฐ ๊ทœ์ • ์ค€์ˆ˜์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ

 

Cognito-SI-CI-IMG_landing_access

AWS ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ์ œ์–ด

Amazon Cognito๋Š” ์•ฑ์˜ ๋ฐฑ์—”๋“œ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œ์–ดํ•˜๋Š” ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์—ญํ• ์„ ์ •์˜ํ•˜๊ณ  ์‚ฌ์šฉ์ž๋ฅผ ์„œ๋กœ ๋‹ค๋ฅธ ์—ญํ• ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ•ด๋‹น ์‚ฌ์šฉ์ž์—๊ฒŒ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ๋ถ€์—ฌ๋œ ๋ฆฌ์†Œ์Šค์—๋งŒ ์•ฑ์ด ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

AWS ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ์ œ์–ด์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ

Cognito-SI-CI-IMG_landing_customui

์‰ฝ๊ฒŒ ์•ฑ๊ณผ ํ†ตํ•ฉ

์ž๊ฒฉ ์ฆ๋ช… ๊ณต๊ธ‰์ž ์—ฐ๋™์„ ์œ„ํ•œ ๊ธฐ๋ณธ UI์™€ ๊ฐ„ํŽธํ•œ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•ด Amazon Cognito๋ฅผ ํ†ตํ•ฉํ•˜์—ฌ ๋ช‡ ๋ถ„ ๋งŒ์— ์•ฑ์— ์‚ฌ์šฉ์ž ๊ฐ€์ž…, ๋กœ๊ทธ์ธ ๋ฐ ์•ก์„ธ์Šค ์ œ์–ด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UI๋ฅผ ์‚ฌ์šฉ์ž ์ง€์ •ํ•˜์—ฌ ๋ชจ๋“  ์‚ฌ์šฉ์ž ์ƒํ˜ธ ์ž‘์šฉ ํ™”๋ฉด์— ํšŒ์‚ฌ ๋ธŒ๋žœ๋“œ๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ ์†ํ•˜๊ฒŒ Amazon Cognito๋ฅผ ์•ฑ์— ํ†ตํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ• ์•Œ์•„๋ณด๊ธฐ

 

์ •๋ง ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค

  • iOS Objective C
    Cognito-SI-icon_ios
  • Android
    Cognito-SI-icon_android
  • iOS Swift
    Cognito-SI-icon_ios
  • ์›น ์•ฑ
    Cognito-SI-icon_web
  • iOS Objective C
  • SDK์™€ ์ฝ”๋“œ ๋ช‡ ์ค„๋กœ ์‚ฌ์šฉ์ž๋ฅผ ๋กœ๊ทธ์ธ์‹œํ‚ค๊ณ  ํ† ํฐ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    // iOS Objective-C
    // AppDelegate.m
    - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options {
      return [[AWSCognitoAuth defaultCognitoAuth] application:app openURL:url options:options];
    }
    // ViewController.m
    AWSCognitoAuth * cognitoAuth = [AWSCognitoAuth defaultCognitoAuth];
    [cognitoAuth getSession:self completion:^(AWSCognitoAuthUserSession * _Nullable session, NSError * _Nullable error) {
      if(error) {
        NSLog(@"Error: %@", error.userInfo[@"error"]);
      } else {
        //Do something with session
        NSLog(@"Claims: %@", t.result.idToken.claims);       
      }
    }];
  • Android
  • SDK์™€ ์ฝ”๋“œ ๋ช‡ ์ค„๋กœ ์‚ฌ์šฉ์ž๋ฅผ ๋กœ๊ทธ์ธ์‹œํ‚ค๊ณ  ํ† ํฐ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    //Android
    // 1) -- Create an instance of Auth --
    Auth.Builder builder = new Auth.Builder()
      .setAppClientId(getString(R.string.cognito_client_id));    
      .setAppCognitoWebDomain(getString(R.string.cognito_web_domain));
      .setApplicationContext(getApplicationContext());
      .setAuthHandler(new callback());
      .setSignInRedirect(getString(R.string.app_redirect_signin));
      .setSignOutRedirect(getString(R.string.app_redirect_signout));
      .setScopes(userScopes);
      auth = builder.build();
     
    // 2) โ€“ Set up url redirect in your app manifest --
    <intent-filter>
      <data android:host="YOUR_REDIRECT_URI_AUTHORITY"android:scheme="YOUR_REDIRECT_SCHEME"/>
    </intent-filter>
     
    // 3) -- Get tokens for your user --
    auth.getSession();
  • iOS Swift
  • SDK์™€ ์ฝ”๋“œ ๋ช‡ ์ค„๋กœ ์‚ฌ์šฉ์ž๋ฅผ ๋กœ๊ทธ์ธ์‹œํ‚ค๊ณ  ํ† ํฐ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    // iOS Swift
    // AppDelegate.swift
    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
      return AWSCognitoAuth.default().application(app, open: url, options: options)
    }
    // ViewController.swift
    let cognitoAuth = AWSCognitoAuth.default()
    cognitoAuth.getSession(self)  { (session:AWSCognitoAuthUserSession?, error:Error?) in
      if(error != nil) {
        print((error! as NSError).userInfo["error"] as? String)
       }else {
       //Do something with session
      }
    }
  • ์›น ์•ฑ
  • SDK์™€ ์ฝ”๋“œ ๋ช‡ ์ค„๋กœ ์‚ฌ์šฉ์ž๋ฅผ ๋กœ๊ทธ์ธ์‹œํ‚ค๊ณ  ํ† ํฐ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    // Add amazon-cognito-auth-js SDK in your application.
    //1) -- Create an instance of Auth --
      var authData = {
      ClientId                       : '<add ClientId>',
      AppWebDomain       : '<add App Web Domain>',
      TokenScopesArray   : '<add scope array>',
      RedirectUriSignIn    : '<add redirect url when signed in>',
      RedirectUriSignOut : '<add redirect url when signed out>'
    };
    var auth = new AWSCognito.CognitoIdentityServiceProvider.CognitoAuth(authData);
     
    // 2) -- Get tokens for your user --
    auth.getSession();
Cognito_SI_IMG_landing_iphone

์‚ฌ์šฉํ•œ ๋งŒํผ๋งŒ ๋น„์šฉ์„ ์ง€๋ถˆํ•˜๋ฉฐ, ์ตœ์†Œ ๋น„์šฉ์ด ์—†์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ํ’€์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ Amazon Cognito ์ž๊ฒฉ ์ฆ๋ช…์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ์›”๋ณ„ ํ™œ์„ฑ ์‚ฌ์šฉ์ž(MAU)๋งŒ์„ ๊ธฐ์ค€์œผ๋กœ ๋น„์šฉ์„ ์ง€๋ถˆํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ์—ญ์›” ๋‚ด์— ๊ฐ€์ž…, ๋กœ๊ทธ์ธ, ํ† ํฐ ์ƒˆ๋กœ ๊ณ ์นจ ๋˜๋Š” ์•”ํ˜ธ ๋ณ€๊ฒฝ๊ณผ ๊ฐ™์ด ํ•ด๋‹น ์‚ฌ์šฉ์ž์™€ ๊ด€๋ จ๋œ ์ž๊ฒฉ ์ฆ๋ช… ์ž‘์—…์ด ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ, ์‚ฌ์šฉ์ž๋Š” MAU๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค. ํ›„์† ์„ธ์…˜์ด๋‚˜ ํ•ด๋‹น ์—ญ์›”์˜ ๋น„ํ™œ์„ฑ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•ด์„œ๋Š” ์š”๊ธˆ์ด ๋ถ€๊ณผ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์š”๊ธˆ ๊ณ„์ธต(MAU) MAU๋‹น ์š”๊ธˆ
์ฒ˜์Œ 50,000 ๋ฌด๋ฃŒ
๋‹ค์Œ 50,000 0.00550 USD
๋‹ค์Œ 900,000 0.00460 USD
๋‹ค์Œ 9,000,000 0.00325 USD
10,000,000 ์ดˆ๊ณผ 0.00250 USD

SAML ์—ฐ๋™์„ ํ†ตํ•ด ๋กœ๊ทธ์ธํ•˜๋Š” ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ, 50๋ช…์˜ ํ”„๋ฆฌ ํ‹ฐ์–ด ์ดˆ๊ณผ ์‹œ ์š”๊ธˆ์€ MAU๋‹น 0.45 USD์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ 10,000๋ช… ์ด์ƒ์ธ ๊ฒฝ์šฐ AWS์— ๋งž์ถคํ˜• ์š”๊ธˆ์„ ๋ฌธ์˜ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. Amazon Cognito์—์„œ๋Š” ์—ฐ๋™ ์ž๊ฒฉ ์ฆ๋ช… ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ถŒํ•œ์ด ์žˆ๋Š” ์‚ฌ์šฉ์ž ๋˜๋Š” ๊ฒŒ์ŠคํŠธ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ AWS ์ž๊ฒฉ ์ฆ๋ช…์„ ํ™•๋ณดํ•˜๋Š” ๋น„์šฉ์ด ๋ฌด๋ฃŒ์ž…๋‹ˆ๋‹ค. AWS ์š”๊ธˆ์€ ์—ฌ๊ธฐ์—์„œ ์ž์„ธํžˆ ์•Œ์•„๋ณด์‹ญ์‹œ์˜ค.


AWS ์‹œ์ž‘ํ•˜๊ธฐ

icon1

AWS ๊ณ„์ • ๊ฐ€์ž…

AWS ํ”„๋ฆฌ ํ‹ฐ์–ด์— ์ฆ‰์‹œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
icon2

10๋ถ„ ์ž์Šต์„œ๋กœ ์•Œ์•„๋ณด๊ธฐ

๊ฐ„๋‹จํ•œ ์ž์Šต์„œ๋ฅผ ํ†ตํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด์‹ญ์‹œ์˜ค.
icon3

AWS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์ถ•์„ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค

AWS ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๋‹จ๊ณ„๋ณ„ ์•ˆ๋‚ด์„œ๋ฅผ ํ†ตํ•ด ๋นŒ๋“œ๋ฅผ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค.
๋‹จ ๋ช‡ ๋ถ„ ๋งŒ์— ์•ˆ์ „ํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๊ฐ€์ž… ๊ธฐ๋Šฅ ์ถ”๊ฐ€.
๊ตฌ์ถ•ํ•  ์ค€๋น„๊ฐ€ ๋˜์…จ์Šต๋‹ˆ๊นŒ?