웹 아이덴티티 페더레이션 사용 - Amazon DynamoDB

웹 아이덴티티 페더레이션 사용

대규모 사용자를 대상으로 하는 애플리케이션을 작성하려는 경우 필요에 따라 인증 및 권한 부여를 위해 웹 자격 증명 연동 기능을 사용할 수 있습니다. 웹 자격 증명 연동을 사용하면 개별 사용자를 생성할 필요가 없습니다. 그 대신에 사용자는 자격 증명 공급자에 로그인한 후 AWS Security Token Service(AWS STS)에서 임시 보안 자격 증명을 얻을 수 있습니다. 그러면 앱은 이러한 자격 증명을 사용하여 AWS 서비스에 액세스할 수 있습니다.

웹 자격 증명 연동은 다음 자격 증명 공급자를 지원합니다.

  • Login with Amazon

  • Facebook

  • Google

웹 ID 페더레이션 관련 추가 리소스

다음 리소스는 웹 ID 페더레이션에 대해 자세히 알아보는 데 도움이 됩니다.

  • AWS 개발자 블로그의 게시글 AWS SDK for .NET을 사용한 웹 자격 증명 연동에서는 Facebook에서 웹 자격 증명 연동을 사용하는 방법을 안내합니다. 여기에는 웹 자격 증명으로 IAM 역할을 수임하는 방법과 임시 보안 자격 증명을 사용해 AWS 리소스에 액세스하는 방법을 보여주는 C# 코드 조각이 포함되어 있습니다.

  • AWS Mobile SDK for iOSAWS Mobile SDK for Android에는 샘플 앱이 포함되어 있습니다. 이러한 앱에는 자격 증명 공급자를 호출하는 방법과 이러한 공급자의 정보를 사용하여 임시 보안 자격 증명을 가져오고 사용하는 방법을 보여 주는 코드가 포함되어 있습니다.

  • 모바일 애플리케이션을 사용한 웹 자격 증명 연동 항목에서는 웹 자격 증명 연동에 대해 설명하며, 웹 자격 증명 연동을 사용하여 AWS 리소스에 액세스하는 방법의 예를 보여 줍니다.

웹 아이덴티티 페더레이션에 대한 정책 예

DynamoDB에서 웹 자격 증명 연동을 사용하는 방법을 보려면 IAM 정책 조건을 사용하여 세분화된 액세스 제어 구현에 소개된 GameScores 테이블을 다시 살펴보세요. 다음은 GameScores의 기본 키입니다.

테이블 이름 기본 키 속성 파티션 키 이름 및 유형 정렬 키 이름 및 유형
GameScores(UserId, GameTitle, ...) 복합 속성 이름: UserId

유형: 문자열
속성 이름: GameTitle

유형: 문자열

이번에는 모바일 게임 앱에서 이 테이블을 사용하며 해당 앱에서 수천 명 또는 수만 명의 사용자를 지원해야 한다고 가정해 보겠습니다. 이 규모에서는 개별 앱 사용자를 관리하고 각 사용자가 GameScores 테이블에서 자신의 고유 데이터에만 액세스할 수 있도록 하는 것이 매우 어렵습니다. 다행히 많은 사용자가 이미 Facebook, Google 또는 Login with Amazon 같은 타사 자격 증명 공급자의 계정을 이미 보유하고 있습니다. 따라서 인증 작업에 대해 이러한 공급자 중 하나를 활용할 수 있습니다.

웹 자격 증명 연동을 사용하여 이 작업을 수행하려면 앱 개발자가 자격 증명 공급자(예: Login with Amazon)에 앱을 등록하고 고유한 앱 ID를 받아야 합니다. 그러고 나면 개발자는 IAM 역할을 생성해야 합니다. (이 예에서 이 역할의 이름은 GameRole입니다.) 이 역할에는 앱이 GameScores 테이블에 액세스할 수 있는 조건을 지정하는 IAM 정책 문서가 연결되어 있어야 합니다.

게임을 플레이하려는 사용자는 해당 게임 앱에서 자신의 Login with Amazon 계정에 로그인해야 합니다. 그런 다음 앱은 Login with Amazon 앱 ID를 지정하고 GameRole의 멤버십을 요청하여 AWS Security Token Service(AWS STS)를 호출합니다. AWS STS는 임시 AWS 자격 증명을 앱에 반환하여 앱이 GameRole 정책 문서에 따라 GameScores 테이블에 액세스하도록 허용합니다.

다음 다이어그램은 이러한 각 단계가 어떻게 서로 연결되는지 보여 줍니다.

게임 앱의 워크플로입니다. 앱은 Amazon ID 및 AWS STS를 사용하여 DynamoDB 테이블에 액세스하기 위한 임시 자격 증명을 얻습니다.

웹 아이덴티티 페더레이션 개요

  1. 앱은 타사 자격 증명 공급자를 호출하여 사용자와 앱을 인증합니다. 자격 증명 공급자가 웹 자격 증명 토큰을 앱에 반환합니다.

  2. 앱이 AWS STS를 호출하고 웹 자격 증명 토큰을 입력으로 전달합니다. AWS STS는 앱에 권한을 부여하고 임시 AWS 액세스 자격 증명을 제공합니다. 앱은 IAM 역할(GameRole)을 수임하고 역할의 보안 정책에 따라 AWS 리소스에 액세스할 수 있습니다.

  3. 앱은 DynamoDB를 호출하여 GameScores 테이블에 액세스합니다. GameRole을 위임했으므로 앱은 해당 역할과 연결된 보안 정책을 준수해야 합니다. 정책 문서는 앱이 사용자와 관련이 없는 데이터에 액세스할 수 없도록 합니다.

다시 한번 다음은 IAM 정책 조건을 사용하여 세분화된 액세스 제어 구현에 나온 GameRole의 보안 정책입니다.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"AllowAccessToOnlyItemsMatchingUserID", "Effect":"Allow", "Action":[ "dynamodb:GetItem", "dynamodb:BatchGetItem", "dynamodb:Query", "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem", "dynamodb:BatchWriteItem" ], "Resource":[ "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores" ], "Condition":{ "ForAllValues:StringEquals":{ "dynamodb:LeadingKeys":[ "${www.amazon.com:user_id}" ], "dynamodb:Attributes":[ "UserId", "GameTitle", "Wins", "Losses", "TopScore", "TopScoreDateTime" ] }, "StringEqualsIfExists":{ "dynamodb:Select":"SPECIFIC_ATTRIBUTES" } } } ] }

Condition 절은 앱에 표시되는 GameScores의 항목을 결정합니다. 이 작업은 Login with Amazon ID를 GameScoresUserId 파티션 키 값과 비교하여 수행됩니다. 이 정책에 나열된 DynamoDB 작업 중 하나를 통해서는 현재 사용자에게 속한 항목만 처리할 수 있습니다. 테이블의 다른 항목에는 액세스할 수 없습니다. 또한 정책에 나열된 특정 속성만 액세스할 수 있습니다.