Category: Amazon Cognito


Amazon Cognito로 10분만에 인증 서비스 만들기

Amazon Cognito를 사용하면 모바일과 웹 앱에서 인증 및 보안 관리, 별도 사용자 계정 서비스를 활용하여 다양한 AWS 서비스를 손쉽게 연동하고 권한 및 접근 관리를 할 수 있습니다. 지난 9월 30일 부터 서울 리전-Asia Pacific (Seoul)에서 사용할 수 있게 되었습니다.

또한,  신규 기능으로서 완전 관리형 사용자 디렉토리인 사용자 풀(User Pools)은 몇 분 안에 모바일 앱 혹은 웹앱에 회원 가입 데이터베이스를 만들 수 있습니다. 게임 서비스를 만들 때 항상 필요한 기능인 로그인/로그아웃을 위한  인증 서버를 손쉽게 구성 관리할 수 있는 관리형 서비스입니다.  가입시 필요한 속성(주소, 이메일, 성별, 전화 번호 및 사용자 지정 특성 등)의 입력 방식과 회원 인증 방식도 지정가능합니다.

이번 글에서는 Amazon Cognito UserPools에서 실제 코드에서 어떻게 사용 하는지를 자세히 살펴보고자합니다.

1.  신규 사용자 풀 구성하기
AWS 관리 콘솔에서 Cognito 사용자 풀 생성 화면에서 오른쪽 상단의 Create a User Pool을 누른 후 아래 그림과 같이 이름을 지정하고 아래 Step through settings를 눌러 하나씩 세팅을 하면 쉽게 유저풀을 생성할 수 있습니다.

Attributes에서 회원 가입 시 필요한 속성을 정의하고,  원하는 추가 가입 속성을  설정할수도 있습니다. 사용자 풀을 설정하는 단계적인 방법은 이전의 블로그 글을 참고하시기 바랍니다.

2.  클라이언트 앱 구성하기
회원 가입 및 로그인/로그아웃 같은 기능을 외부 프로그램을  통해 제공하려면,  이에 대한 앱 정보(Apps)를 추가해야 합니다.  아래와 같이 구성 단계에서 Add an app을 선택하고 앱 이름을 선택하면 간단히 앱을 추가할 수 있습니다. 아래에서 AWS Javascript SDK 기반의 샘플 코드를 실행하기 때문에, 반드시 앱 생성시 client secret 체크 박스를 해제해야 합니다.

사용자 풀을 생성하고  나면,  앞에서 만든 앱을 위한 App client id를  조회 할 수 있습니다.  또한,  사용자 풀의 Pool ID  역시 아래 애플리케이션 설정을 할 때, 사용하는 값입니다.

위의 화면에서  Apps 항목의 연필 아이콘을 클릭하면, 아래 화면과 같이 App client id를 확인할 수 있습니다.

3. 회원 가입 기능 테스트하기
이제 우리가 만든 사용자 풀에 접근하는 기능을 만들어보겠습니다.  Amazon Cognito 사용자 풀 기능을 수행하는 예제는 많이 존재하지만,  그 중에서 https://github.com/aws/amazon-cognito-identity-js/에서 제공하는 nodejs를 이용한 예제를 실행해 봅니다.

위의 샘플 코드에서는 회원 가입,  로그인 관련 처리 및 다양한 시나리오에 대한 예제 코드를 제공합니다. 본 샘플 코드 중에서  examples/babel-webpack/src/config.js 파일을 편집해서 사용자 풀 접속 정보를 입력합니다. 이때 필요한 것이 앞에서 언급한 Pool ID와 App client ID입니다. 두 가지 값을 아래와 같이 설정합니다.

export default {
   region: 'ap-northeast-2',
   IdentityPoolId: '',
   UserPoolId: 'ap-northeast-1_d8o3MPLxxx',
   ClientId: '6svcu5kpgu7oklm5rdqufqxxxxx',
}

이렇게 설정을 하고 나면 예제를 실행할 수 있습니다. 예를 들어,  회원 가입의 경우, HTML에서 입력된 가입 속성과 관련된 정보를 저장하거나 가져오기 위해서는 각 속성을 JSON형식으로 지정한 후에 이를 signUP 함수 등에 전달합니다.  아래 Javascript 샘플 코드를 참고하세요.

var attributeList = [];
    var dataEmail = {
        Name : 'email',
        Value : '...' // your email here
    };
    var dataPhoneNumber = {
        Name : 'phone_number',
        Value : '...' // your phone number here with +country code and no delimiters in front
    };
    var attributeEmail = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserAttribute(dataEmail);
    var attributePhoneNumber = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserAttribute(dataPhoneNumber);

    attributeList.push(attributeEmail);
    attributeList.push(attributePhoneNumber);

    var cognitoUser;
    userPool.signUp('username', 'password', attributeList, null, function(err, result){
        if (err) {
            alert(err);
            return;
        }
        cognitoUser = result.user;
        console.log('user name is ' + cognitoUser.getUsername());
    });

위의 샘플 코드에서는 회원 가입 및 정보 수정 뿐만 아니라 Federated Identities 콘솔에서 Congnito 사용자 풀을 인증 수단으로 추가하면  로그인,  로그아웃 그리고 SMS 및 멀티 팩터 추가 인증  수단 활용 등의 다양한 시나리오도 확인해 볼 수 있습니다.

모바일/웹앱 형 게임을 만들 때 사용자 풀을 사용하면,  Amazon Cognito가 제공하는 페이스북 및 트위터 소셜 로그인 기능과 함께 자체 사용자 데이터베이스를 손쉽게 만들고 기능 확장이 가능하므로 꼭 사용해 보시길 권장합니다. (참고:  Amazon Cognito 사용자 풀 및 아이덴티티 자세한 설정 방법은 Zombie Microservices Workshop 한국어 가이드를 직접 실행해 보셔도 좋습니다.)

또한,  안드로이드나 iOS 애플리케이션에서 사용자 풀을 이용하시려면, AWS 모바일 블로그의  Using Android SDK with Amazon Cognito Your User Pools Android용 사용자 풀 활용 기술 문서iOS용 사용자 풀 활용 기술 문서를 참고하시기 바랍니다.

본 글은 아마존웹서비스 코리아의 솔루션즈 아키텍트가 국내 고객을 위해 전해 드리는 AWS 활용 기술 팁을 보내드리는 코너로서, 이번 글은 박선용 솔루션즈 아키텍트께서 작성해주셨습니다.

Amazon Cognito, 서울 리전 출시

Amazon Cognito를 사용하면 모바일과 웹 앱에서 인증 및 보안 관리, 별도 사용자 계정 서비스를 활용하여 다양한 AWS 서비스를 손쉽게 연동하고 권한 및 접근 관리를 할 수 있습니다. 오늘 부터 서울 리전-Asia Pacific (Seoul)를 사용할 수 있게 되었습니다.

amazon-congnito-seoul-region

Amazon Cognito를 사용하여 백엔드 코드를 작성하면, 별도 인증 관련 인프라 관리 필요 없이 모바일 및 웹 애플리케이션에 소셜 로그인 및  데이터 동기화를 손쉽게 추가 할 수 있습니다.  지난해 AWS CloudTrail 지원  및 로그인 공급자로 Twitter 및 Digits  추가 , Cognito 이벤트에 응답하는 AWS Lambda 함수 실행 기능 , 그리고 Amazon Kinesis 사용자 아이덴티티 데이터 스트리밍 같은 강력한 새로운 기능을 Cognito에 추가 했습니다.

또한, 완전 관리형 사용자 디렉토리인 사용자 풀(User Pools)를  통해 수 억 명의 사용자 데이터를 관리할 수 있고, 각 AWS 계정에서 여러 디렉토리를 사용할 수 있습니다. 사용자 풀은 바로 몇 분 안에 만들 수 있으며, 신규 고객이 여러분의 응용 프로그램 또는 서비스에 가입 할 때 필요한 속성(주소, 이메일, 성별, 전화 번호 및 사용자 지정 특성 등)의 입력 방식을 지정할 수 있습니다.

https://d0.awsstatic.com/product-marketing/Mobile/Cognito_Overview_4a.jpg

또한, 사용자 관련 데이터를 사용자 디바이스에 로컬로 저장할 수 있게 해주므로, 디바이스가 오프라인일 때도 애플리케이션이 작동합니다. 그런 다음 데이터를 사용자 디바이스 간에 동기화할 수 있으므로, 사용하는 디바이스에 관계없이 사용자의 앱 경험이 일관되게 유지됩니다. Amazon Cognito에서는 사용자 관리, 인증 및 디바이스 간 동기화를 처리하는 솔루션의 구축, 보안 및 확장에 대해 걱정하는 대신 뛰어난 앱 경험을 만드는 데 집중할 수 있습니다.

Amazon Cognito 서비스에 대한 간략한 소개는 온라인 세미나 발표 슬라이드Zombie Workshop 한국어 실습 가이드를 통해 직접 해보실 수 있습니다.

더 자세한 사항은 FAQ(자주 묻는 질문) 및  개발자 SDK 및 문서를 참고해 주시기 바랍니다.

– AWS 코리아 마케팅팀;

Amazon Cognito, 사용자 풀(User Pools) 정식 서비스 개시

몇달 전에 Amazon Cognito 사용자 풀(User Pools) 기능에 대해 소개했습니다. 당시에는 사용자 모바일 앱과 웹 앱으로 가입이나 로그인에 본 기능을 사용하는 방법에 대해 설명했습니다. 완전 관리형 사용자 디렉토리를 통해 수 억 명의 사용자 데이터를 관리할 수 있고, 각 AWS 계정에서 여러 디렉토리를 사용할 수 있습니다. 사용자 풀은 바로 몇 분 안에 만들 수 있으며, 신규 고객이 여러분의 응용 프로그램 또는 서비스에 가입 할 때 필요한 속성(주소, 이메일, 성별, 전화 번호 및 사용자 지정 특성 등)의 입력 방식을 지정할 수 수 있습니다. 보안 측면에서는 원하는대로 암호 강도를 제공하거나, Multi-Factor Authentication (MFA)의 사용 강제와 사용자의 전화 번호 또는 이메일 주소 확인 방법을 요청할 수 있습니다.

정식 서비스 시작
사용자 풀 서비스 공개 베타를 시작한 이후, 수 많은 훌륭한 피드백을 받았습니다. 그리고 오늘 사용자 풀 서비스를 정식으로 제공하면서, 몇 가지 기능을 더 추가합니다.

  • Device Remembering – Cognito는 각 사용자가 장치에서 로그인했는지 저장 가능
  • User Search – 속성에 따라 사용자 풀에서 사용자 검색 가능
  • Customizable Email Addresses – 사용자 풀에 사용자의 이메일 주소 관리 가능
  • Attribute Permissions – 각 사용자의 특성을 세밀하게 설정 가능
  • Custom Authentication Flow – 새로운 API와 Lambda 트리거를 사용하여 로그인 흐름 조정 가능
  • Admin Sign-in – 백엔드 서버와 Lambda 함수에서 사용자 앱에 로그인 가능
  • Global Sign-out – 로그인하고있는 모든 장치와 브라우저에서 사용자가 강제 로그 아웃
  • Custom Expiration Period – 토큰 업데이트에 유효 기간 설정 가능
  • API Gateway Integration – 사용자 풀을 사용하여 Amazon API Gateway 요청 승인 가능
  • New Regions – 신규 리전 출시

다음 각 새로운 기능에 대한 자세한 내용 알아봅니다.

Device Remembering
Cognito에서 각 사용자가 로그인에 사용 된 디바이스의 일련 번호를 기록 할 수 있게되었습니다. 사용자 풀 개발자는 작업 요청을 사용자에게 부여하는 옵션이 있습니다. 사용자 풀에서 MFA를 사용하고있는 경우, 기록된 장치에서 MFA 코드 입력 요구를 취소 할 수 있습니다. 이렇게 하면, 인식되지 않은 디바이스는 MFA 코드를 입력해야하고, 저장된 디바이스의 로그인 프로세스를 단순화 할 수 있습니다. 또한, 사용자 장치 목록을 통해 원격으로 로그 아웃 할 수 있습니다. 사용자 풀을 만들 때, 이 기능을 사용하거나 사용자 정의로 제공할 수 있습니다.

새로운 사용자 풀을 만들 때, 이 기능을 활성화하고 설정하는 방법은 다음을 참조하십시오. 우선, [Always] 또는 [User Opt-in]을 클릭하여, 이 기능을 활성화합니다.

디바이스 저장 설정에서 MFA를 숨길 지 여부를 결정합니다.

AWS Mobile SDK for iOS, Android, JavaScript 라이브러리에서 디바이스 저장을 위한  응용 프로그램 호출 방법을 제공합니다.

User Search
사용자 풀 개발자는 다음과 같은 특성에 따라 사용자를 검색 할 수 있습니다. username , given_name , family_name , name , preferred_user_name , email , phone_number , status 또는 user_status .

완전 일치 또는 접두사 일치 방식으로 검색 하려면 AWS Management Console , ListUsers API 함수 또는 list-users 커맨드 라인 도구를 사용합니다. 콘솔에서 검색하는 경우는 아래와 같습니다.

Customizable Email Addresses
사용자와 통신에 사용하는 이메일 주소를 보낸 사람과 답장 방식을 특정 할 수 있습니다. 새로운 사용자 풀을 만들 때 주소를 확인하는 경우, 아래와 같습니다.

본 기능 사용 전에 Amazon Simple Email Service (SES) 에서 보낸 사람의 주소를 확인해야합니다 (자세한 내용은 Verifying Email Addresses in Amazon SES 를 참조하십시오).

Attribute Permissions
각 사용자 속성에서 각 앱의 읽기 및 쓰기 권한을 설정 할 수 있습니다. 이를 통해 어떤 응용 프로그램이 사용자에 저장되어 있는지 여부나 어떤 특성을 보거나 변경할 수 있는지 여부를 관리 할 수​​ 있습니다. 예를 들어, 사용자가 잠재 고객인지 아닌지와 같은 속성을 정의 할 수 있습니다.

앱을 통해 속성을 볼 수 있지만 직접 변경할 수 없습니다. 대신 관리 도구 또는 백그라운드 프로세스를 사용하여 속성을 업데이트합니다. Console, API CLI에서 사용자 속성 권한을 설정할 수 있습니다.

Custom Authentication Flow
인증에 대한 새로운 API 함수를 사용할 수 있게 되었습니다. ( InitiateAuthRespondToAuthChallenge ). 그 외에도  세 개의 새로운 Lambda 트리거를 사용하여 자신의 로그인 흐름과 기존 프로세스를 정의 할 수 있습니다. 예를 들면, 경험 수준이 다른 사용자 위치 별, 보안 조건 별 등을 대상으로 사용자 흐름을 정의 할 수 있습니다. 필요에 따라 특정 사용자 또는 모든 사용자에게 CAPTCHA 사용을 요구할 수도 있습니다.

새로운 Lambda 트리거 유형은 아래의 세가지 입니다.

  • Define Auth Challenge – 사용자 인증 절차 정의
  • Create Auth Challenge – 사용자 인증 절차 시작
  • Verify Auth Challenge Response – 사용자 인증 절차 유효성 확인

다음과 같이 Console에서 트리거를 설정할 수 있습니다.

Global Sign-out
로그인 된 모든 장치에서 로그 아웃하는 옵션을 사용자에게 제공 할 수 있게 되었습니다. 유효 기간 만료가 아니라 호출되지 않은 액세스 토큰을 사용하여 GlobalSignOut 함수를 호출 할 수 있습니다. 개발자 Pool ID와 username을 사용하여 AdminUserGlobalSignOut 함수를 호출하여 모든 사용자가 원격으로 로그 아웃시킬 수 있습니다.

Custom Expiration Period
Cognito 로그인은 “업데이트” 토큰을 사용하기 때문에 모바일 앱을 열 때마다 로그인 할 필요가 없습니다. 기본적으로 토큰은 30 일이 지나면 만료됩니다. 하지만, 보안성과 편리함의 균형을 알맞게 유지하기 위해 각 사용자 풀을 생성하는 갱신 토큰의 유효 기간을 사용자 설정할 수 있게되었습니다.

API Gateway Integration
API 요청을 인증하기 위해 Cognito 사용자 풀 Amazon API Gateway 와 긴밀하게 협력하고 대처할 수있게되었습니다. ID 토큰을 받아 API Gateway를 설정하고 사용자 풀에서 사용자 상황을 인증 할 수 있습니다. 이 경우 먼저 사용자 풀을 참고하여 아이덴티티 토큰을 포함한 요청 헤더를 선택하고 Cognito User Pool Authorizer를 만듭니다.

원하는 방법으로 접근 해 새로운 인증을 선택합니다.

신규 리전 및 정식 서비스
이번 출시와 함께 US West (Oregon) 지역에서도 Cognito를 이용할 수있게되었습니다. 이미 이용 가능한 US East (Northern Virginia) 지역 외에 Europe (Ireland), US West (Oregon), Asia Pacific (Tokyo) 리전에서도 Your User Pools를 사용하실 수 있습니다.

좀 더 자세한 내용은 Getting Started with Your User Pools in Amazon Cognito(영문 동영상)을 참조하십시오.

– Jeff;

이 글은 Amazon Cognito Your User Pools – Now Generally Available의 한국어 번역입니다.

Amazon Cognito – 신규 사용자 풀(User Pools) 기능 추가

Amazon Cognito를 사용하여 백엔드 코드를 작성하면, 인프라 관리 필요없이 모바일 및 웹 애플리케이션에 소셜 인증 및 사용자 관리와 데이터 동기화를 손쉽게 추가 할 수 있습니다.  지난해 AWS CloudTrail 지원  및 로그인 공급자로 Twitter 및 Digits  추가 , Cognito 이벤트에 응답하는 AWS Lambda 함수 실행 기능 , 그리고 Amazon Kinesis 사용자 아이덴티티 데이터 스트리밍 같은 강력한 새로운 기능을 Cognito에 추가 했습니다.

사용자 풀(User Pool)
Amazon Cognito의 소셜 인증 기능을 통해 User Pool을 만들어 수 억 단위 사용자까지 확장하여 매니지드 서비스로  구축할 수 있게 됨에 따라  응용 프로그램 보안 및 사용자 인증을 대한 확장을 고려하지 않고도  자신의 사용자 디렉터리를 만들 수 있습니다. 이 기능은 이메일 의한 확인, 전화를 통한 확인 및 다단계 인증 등 확장된 보안 기능도 제공합니다. 앱 개발자로서 여러분은 이러한 목적을 위해, Federated Identity Pools라고 부르는 Cognito 기능을 사용하여 Amazon, Facebook, Google, Twitter 또는 Digits 같은 외부의 아이덴티티 공급자를 사용하는 옵션을 이미 가지고있었습니다.

User Pool을 사용하면 웹과 모바일 SaaS 애플리케이션, 게임 등에서 가입 및 로그인에 자세한 제어 할 수 있습니다. 높은 확장성 (잠재적으로 수십 또는 수억의 사용자)을 기반으로 디렉토리 서비스를 구축하고 가동시키는 것은 쉬운 일이 아니며, 사용자 이름, 암호 email 주소 및 기타 민감한 개인 정보 조각을 관리 할 때 추가 되는 보안 고려 사항 역시 매우 어려운 일입니다. 여러분이 User Pool을 사용하는 경우 해당 디렉토리 서비스를 직접 구축하고 운용할 필요가 없습니다.

계정 당 다중 사용자 풀 지원
이제 AWS 계정에서 여러 사용자 풀(User Pool)을 만들 수 있습니다 (한 가지 사용자 풀의 아이덴티티는 다른 풀과 완벽히 분리됩니다.)  각 풀에 대해 여러분은 각 사용자에 저장하려는 속성 (주소, 이메일, 전화 번호, 언어 등)에 대한 모든 권한을가집니다. 사용자 풀을 만든 이후, AWS Mobile SDK (iOS, Android 및 JavaScript에서 사용 가능)을 사용할 수 있습니다.

사용자는 SMS 기반의 다단계 인증 (Multi-Factor Authentication, MFA)이나 전화나 이메일 주소로 계정 확인을 포함한 각종 보안 기능을 통해 혜택을 얻을 수 있습니다. 암호 기능은 통신에 일반 텍스트 암호를 전송하지 않도록 Secure Remote Password (SRP) 통신 규약을 이용합니다.

사용자 풀 만들기
AWS Management Console (API 및 CLI에서도 가능)에서 User Pool을 만드는 과정을 연습 해 봅시다. (가상) 응용 프로그램은 PaymentApp이기 때문에, PaymentAppUsers라는 풀을 만듭니다.

기본 값을 확인하고 승인하거나, 모든 설정값을 변경할 수  있습니다. 여기에서는 모든 설정값을 변경하는 것을 선택하고,  새 사용자가 서비스에 가입 할 때 수집해야 하는 속성 세트를 선택합니다.

사용자 정의 속성을 설정할 수 있습니다. 내 응용 프로그램의 경우 사용자의 사용하고자하는 결제 화폐 통화를 저장하고 싶습니다.

그리고 원하는 암호 강도를 설정합니다. 지불 애플리케이션이므로, 모든 옵션을 체크합니다.

다음은 다단계 인증을 활성화하고 이메일 주소와 전화 번호를 확인할 필요가 있다면 선택합니다. 확인 과정 중 각 메서드와 관련된 메시지를 적절히 제공합니다.

응용 프로그램은 모바일 클라이언트도 가지고 있기 때문에 고유 ID와 비밀 키를 생성하도록합니다.

이제 가입, 검증, 인증 그리고 확인 단계에서 Cognito에 Lambda 기능을 실행 시키도록 할 수 있습니다 (이것은 선택적이지만 사용자 지정 특성을 확인해서 가입 흐름을 사용자 정의하려는 경우, 매우 편리합니다) .

마지막으로, 설정 사항을 모두 검토하고, 새로운 사용자 풀을 만듭니다.

이제 모바일 앱 및 웹 앱 개발 시 사용자 가입 절차를 원하는 대로 설정 가능합니다.

Asurion의 Cognito 사용 사례
Asurion은 2 억 이상의 고객에게 스마트폰 같은 장치에 대한 보험 계약을 제공하고 있습니다. Asurion은 신규 장치 보호 응용 프로그램 을 위한 사용자 디렉토리 관리를 위해 Cognito 사용 계획을하고 있습니다. 이 응용 프로그램은 장치에 대한 데이터를 수집하고 보험 이용료 최적화를 추천해줍니다.

Asurion은 다양한 아이덴티티 모델 지원을 이유로 Cognito을 선택하였습니다. 아이덴티티 시스템을 새로 만들 필요 없이, 확장성 고려 없이 자신의 전체 사용자 디렉토리를 보유하고 타사 소셜 아이덴티티 공급자를 통한 사용자 인증을 가질 수 있습니다.

Ravi Tiyyagura (Asurion ‘s Director of Enterprise Architecture)는 “수백만 사용자들의 안전하고 간단한 가입 및 로그인 환경을 제공하는 것은 매우 중요합니다. Amazon Cognito를 통해 우리는 백 엔드를 구축하고 관리하는 것에 대해 걱정하지 않고 그것을 할 수 있었습니다.”라고 밝혔습니다.

공개 베타 서비스
신규 사용자 풀 추가 기능은 오늘 공개 베타로 출시합니다. 모든 기능은 잘 준비되어 있으며, 앱 개발 및 테스트를 시작하는 데 사용할 수 있습니다. 몇 달 동안  제품 개발 용도로 이용 가능합니다.— Jeff;

이 글은 New – Your User Pools for Amazon Cognito의 한국어 번역입니다.