모바일 앱에 Amazon Cognito 사용 - AWS Identity and Access Management

모바일 앱에 Amazon Cognito 사용

웹 아이덴티티 페더레이션을 사용하는 기본 방법은 Amazon Cognito를 사용하는 것입니다. 예를 들어 개발자 Adele이 점수, 프로필과 같은 사용자 데이터가 Amazon S3와 Amazon DynamoDB에 저장되는 모바일 디바이스를 위한 게임을 만들고 있다고 합시다. 또한 Adele은 이 데이터를 디바이스에 로컬로 저장하고 Amazon Cognito를 사용해 여러 디바이스 간에 동기화된 상태로 유지할 수 있습니다. Adele은 보안 및 유지 보수 상의 이유로 장기 AWS 보안 자격 증명은 게임과 함께 배포되어서는 안 된다는 것을 알고 있습니다. 또한, 게임 사용자가 아주 많을 수도 있다는 것을 알고 있습니다. 이 모든 이유로 Adele은 각 플레이어에 대해 IAM에서 새로운 사용자 자격 증명을 생성하길 원하지 않습니다. 대신에 사용자가 Login with Amazon, Facebook, Google 또는 OpenID Connect(OIDC) 호환 자격 증명 공급자(IdP)와 같은 널리 알려진 외부 IdP를 통해 이미 설정한 자격 증명을 사용해 로그인할 수 있도록 게임을 구축합니다. Adele의 게임은 이러한 공급자 중 하나의 인증 메커니즘을 이용해 사용자의 자격 증명을 확인할 수 있습니다.

모바일 앱이 자신의 AWS 리소스에 액세스할 수 있도록 하기 위해 Adele은 먼저 선택한 IdP에 개발자 ID를 등록합니다. Adele은 이들 각 공급자로 애플리케이션을 구성하기도 합니다. Adele은 게임용 Amazon S3 버킷 및 DynamoDB 테이블을 포함하는 AWS 계정에서 Amazon Cognito를 사용해 게임에 필요한 권한을 정확하게 정의하는 IAM 역할을 생성합니다. Adele이 OIDC IdP를 사용하는 경우 IAM OIDC ID 제공자 엔터티도 생성하여 AWS 계정의 Amazon Cognito 아이덴티티 풀과 IdP 간에 신뢰를 구축합니다.

앱의 코드에서 Adele은 자신이 이전에 구성한 IdP에 대한 로그인 인터페이스를 호출합니다. IdP는 사용자가 로그인하도록 허용하는 모든 세부 정보를 처리하고 앱은 공급자에게서 OAuth 액세스 토큰 또는 OIDC ID 토큰을 얻습니다. Adele의 앱은 이 인증 정보를 주고 AWS 액세스 키 ID, 보안 액세스 키 및 세션 토큰으로 구성된 임시 보안 자격 증명 집합을 얻을 수 있습니다. 그러면 앱은 이러한 자격 증명을 사용하여 AWS가 제공하는 웹 서비스에 액세스할 수 있습니다. 앱은 수임하는 역할에 정의된 권한으로 제한됩니다.

다음 그림은 Login with Amazon을 IdP로 사용하는 경우 이것이 어떻게 작동하는지 그 흐름을 단순화해 보여줍니다. 2단계에서 앱은 Facebook, Google 또는 OIDC 호환 IdP를 사용할 수도 있지만, 여기에서는 생략했습니다.


      모바일 애플리케이션을 위해 Amazon Cognito를 사용하여 사용자를 페더레이션하는 샘플 워크플로우

  1. 고객은 모바일 디바이스에서 앱을 시작합니다. 앱은 사용자에게 로그인하도록 요청합니다.

  2. 앱은 Login with Amazon 리소스를 사용해 사용자의 자격 증명을 수락합니다.

  3. 앱이 Amazon Cognito API 작업 GetIdGetCredentialsForIdentity를 사용하여 Login with Amazon ID 토큰을 Amazon Cognito 토큰으로 교환합니다. Login with Amazon 프로젝트를 신뢰하도록 구성된 Amazon Cognito는 AWS STS와의 임시 세션 자격 증명과 교환하는 토큰을 생성합니다.

  4. 앱은 Amazon Cognito에서 임시 보안 자격 증명을 받습니다. 또한 앱은 Amazon Cognito의 기본(클래식) 워크플로를 사용하여 AssumeRoleWithWebIdentity로 AWS STS에서 토큰을 검색할 수 있습니다. 자세한 내용은 Amazon Cognito 개발자 안내서의 자격 증명 풀(페더레이션 아이덴티티) 인증 흐름을 참조하세요.

  5. 임시 보안 자격 증명은 앱에 의해 사용됨으로써 앱이 작동을 요청하는 어떤 AWS 리소스에도 액세스할 수 있습니다. 임시 보안 자격 증명과 연결된 역할 및 할당된 정책에 따라 액세스할 수 있는 항목이 결정됩니다.

다음 절차에 따라 Amazon Cognito를 사용해 사용자를 인증하도록 앱을 구성하고 앱에 AWS 리소스에 대한 액세스 권한을 부여합니다. 이 시나리오를 완수하기 위한 특정 단계에 대해서는 Amazon Cognito 설명서를 참조하세요.

  1. (선택 사항) Login with Amazon, Facebook, Google 또는 기타 OpenID Connect(OIDC) 호환 IdP에 개발자로 가입하여 해당 공급자를 통해 1개 이상의 앱을 구성합니다. Amazon Cognito에서는 사용자의 인증되지 않은(게스트) 액세스도 지원하므로 이 단계는 선택 사항입니다.

  2. AWS Management Console에서 Amazon Cognito로 이동합니다. Amazon Cognito 마법사를 사용해 자격 증명 풀을 생성합니다. 이 풀은 Amazon Cognito가 앱을 위해 최종 사용자 자격 증명을 정돈된 상태로 유지할 목적으로 사용하는 컨테이너입니다. 앱 간에 자격 증명 풀을 공유할 수 있습니다. 자격 증명 풀을 설정할 때 Amazon Cognito는 사용자에 대한 권한을 정의하는 1~2개의 IAM 역할(인증된 자격 증명용 한 개, 인증되지 않은 "게스트" 자격 증명용 한 개)을 생성합니다.

  3. AWSAmplify를 앱과 통합하고 Amazon Cognito를 사용하는 데 필요한 파일을 가져옵니다.

  4. 자격 증명 풀 ID, AWS 계정 번호 및 자격 증명 풀과 연결한 역할의 Amazon 리소스 이름(ARN)을 전달하여 Amazon Cognito 보안 인증 공급자의 인스턴스를 생성합니다. AWS Management Console의 Amazon Cognito 마법사에서 제공하는 샘플 코드를 사용하면 시작하는 데 도움이 됩니다.

  5. 앱이 AWS 리소스에 액세스할 때 클라이언트 객체에 자격 증명 공급자 인스턴스를 전달합니다. 이렇게 하면 클라이언트에 임시 보안 자격 증명이 전달됩니다. 자격 증명에 대한 권한은 앞서 정의한 역할 또는 역할들에 기반을 두고 있습니다.

자세한 내용은 다음 자료를 참조하세요.

  • AWS Amplify Framework Documentation의 로그인(Android).

  • AWS Amplify Framework Documentation( 프레임워크 설명서)의 Sign in (iOS)(로그인(iOS))