모바일 앱에 웹 ID 페더레이션 API 작업 사용 - AWS Identity and Access Management

모바일 앱에 웹 ID 페더레이션 API 작업 사용

최상의 결과를 얻으려면 거의 모든 웹 ID 페더레이션 시나리오에서 Amazon Cognito를 자격 증명 브로커로 사용하는 것이 좋습니다. Amazon Cognito는 사용하기 쉽고 익명(인증되지 않은) 액세스, 디바이스 및 공급자 간에 사용자 데이터 동기화 등의 추가 기능을 제공합니다. 그러나 AssumeRoleWithWebIdentity API를 수동 호출함으로써 웹 ID 페더레이션을 사용하는 앱을 이미 생성했다면, 그 앱을 계속해서 사용할 수 있고 앱은 여전히 잘 작동될 것입니다.

웹 ID 페더레이션을 Amazon Cognito 없이 사용하는 프로세스는 다음과 같은 일반적인 개요를 따릅니다.

  1. 외부 자격 증명 공급자(IdP)에서 개발자로 로그인하여 앱을 위한 고유 ID를 부여하는 IdP에서 앱을 구성합니다. (IdP마다 이 프로세스에 대해 다른 용어를 사용합니다. 이 개요에서는 IdP에 앱을 식별하는 프로세스를 구성이라는 용어로 설명합니다.) 각 IdP는 IdP 고유의 앱 ID를 제공함으로써, 동일한 앱을 다수의 IdP로 구성하는 경우 앱은 여러 개의 앱 ID를 갖게 됩니다. 각 공급자로 여러 개의 앱을 구성할 수 있습니다.

    다음 외부 링크는 흔히 사용되는 자격 증명 공급자(IdP) 중 일부를 사용하는 것에 대한 정보를 제공합니다.

    중요

    Google, Facebook 또는 Amazon Cognito의 OIDC 자격 증명 공급자를 사용하는 경우 AWS Management Console에서 IAM 자격 증명 공급자를 별도로 생성하지 마세요. AWS에 내장된 OIDC 자격 증명 공급자를 사용하면 됩니다. 다음 단계를 건너뛰고 자격 증명 공급자를 사용하여 새 역할을 생성하는 단계로 바로 이동합니다.

  2. Google, Facebook 또는 Amazon Cognito 외에 OIDC와 호환되는 다른 IdP를 사용하는 경우 IdP를 위한 IAM 자격 증명 공급자 엔터티를 생성합니다.

  3. IAM에서 하나 이상의 역할을 생성합니다. 각 역할에 대해 그 역할을 위임할 수 있는 대상(신뢰 정책)과 앱 사용자가 가지는 권한(권한 정책)을 정의합니다. 일반적으로 앱이 지원하는 각 IdP마다 하나의 역할을 생성합니다. 예를 들면 사용자가 Login with Amazon을 통해 로그인할 때 앱이 수임할 수 있는 역할, 사용자가 Facebook을 통해 로그인하는 경우 동일한 앱의 두 번째 역할, 사용자가 Google을 통해 로그인하는 경우 앱의 세 번째 역할 등을 생성할 수 있습니다. 신뢰 관계를 위해서는 IdP(예: Amazon.com)를 Principal(신뢰받는 개체)로 지정하고 앱 ID에 할당된 IdP와 일치하는 Condition을 포함시키세요. 여러 공급자의 역할에 대한 예는 서드 파티 자격 증명 공급자의 역할 만들기(연동)에 설명되어 있습니다.

  4. 애플리케이션에서 IdP로 사용자를 인증하세요. 이렇게 하는 방법의 구체적인 내용은 사용 중인 IdP(Login with Amazon, Facebook 또는 Google)와 앱이 실행되는 플랫폼에 따라 달라집니다. 예를 들어 Android 앱의 인증 방법은 iOS 앱 또는 JavaScript 기반 웹 앱과 다를 수 있습니다.

    일반적으로 사용자가 아직 로그인하지 않은 경우 IdP가 로그인 페이지 표시를 처리합니다. IdP가 사용자를 인증한 후에 IdP는 사용자에 대한 정보가 담긴 인증 토큰을 앱에 반환합니다. 포함된 정보의 내용은 IdP가 노출하는 것과 사용자가 공유하고자 하는 정보가 무엇인지에 달려 있습니다. 앱에서 이 정보를 사용할 수 있습니다.

  5. 앱에서 AssumeRoleWithWebIdentity 작업에 대한 서명되지 않은 호출을 수행하여 임시 보안 자격 증명을 요청합니다. 요청 시 IdP의 인증 토큰을 전달하고 해당 IdP에 대해 생성한 IAM 역할의 Amazon 리소스 이름(ARN)을 지정합니다. AWS는 그 토큰이 신뢰할 수 있고 유효한지 확인하여, 그럴 경우에는 요청에서 명명하는 역할에 대한 권한을 포함하는 임시 보안 자격 증명을 앱에 반환합니다. 그 응답에는 IdP가 사용자에게 연결하는 고유 사용자 ID와 같은, IdP에서 오는 사용자에 대한 메타데이터도 포함되어 있습니다.

  6. AssumeRoleWithWebIdentity 응답의 임시 보안 자격 증명을 사용하여 앱에서 AWS API 작업에 대한 서명된 요청을 생성합니다. IdP의 사용자 ID 정보로 앱의 사용자를 구분할 수 있습니다. 예를 들어 사용자 ID가 접두사 또는 접미사로 포함된 Amazon S3 폴더에 객체를 넣을 수 있습니다. 이렇게 함으로써 폴더를 잠그는 액세스 제어 정책을 생성해 그 ID를 지닌 사용자만 그 폴더에 액세스할 수 있게 됩니다. 자세한 내용은 이 주제의 후반부에서 웹 ID 페더레이션을 사용하여 사용자 식별 섹션을 참조하세요.

  7. 앱은 AWS에 요청할 필요가 있을 때마다 새 임시 보안 자격 증명을 받지 않아도 되도록 임시 보안 자격 증명을 캐시해야 합니다. 기본적으로 자격 증명은 1시간 동안 유효합니다. 자격 증명이 만료되면(또는 그 전에) AssumeRoleWithWebIdentity에 또 한 번 호출을 하여 새로운 임시 보안 자격 증명 집합을 얻으세요. IdP의 토큰 역시 보통 설정된 시간이 지나면 만료되기 때문에, IdP 및 IdP가 토큰을 어떻게 관리하느냐에 따라 AssumeRoleWithWebIdentity에 새로운 호출을 하기 전에 IdP의 토큰을 갱신해야 할 수도 있습니다. AWS SDK for iOS 또는 AWS SDK for Android를 사용하는 경우 AmazonSTSCredentialsProvider 작업을 사용해 IAM 임시 자격 증명을 필요에 따라 갱신하는 등 관리할 수 있습니다.