클라우드(AWS)/DVA-C02

[AWS] DynamoDB의 IAM Policy을 활용한 세분화된 액세스 제어 방법(Fine-Grained Access Control)

찌르비 2024. 12. 7. 13:01
반응형

Amazon DynamoDB

Fine-Grained Access Control (세분화된 액세스 제어)

특정 사용자가 DynamoDB 테이블의 특정 항목(Item)에만 접근 할 수 있도록 제한하는 기능이다.

이를 통해 데이터를 더 안전하게 관리할 수 있으며, 각 사용자가 자신과 관련된 데이터만 보거나 수정할 수 있도록 만들 수 있다.

DynamoDB의 특정 항목에 대한 접근 제한은 IAM Policy를 통해서 설정할 수 있다.

그리고 설정한 IAM Policy는 Cognito를 통해 동적으로 할당할 수 있다. 

 

🎮 예시)

게임 앱에서 각 플레이어는 자신의 데이터만 볼 수 있어야 하고, 다른 플레이어의 데이터에 접근하면 안 됨

PlayerID를 파티션 키로 사용하여 IAM Policy로 각 플레이어가 자신의 PlayerID에만 접근하도록 제한.
데이터 예시: { "PlayerID": "user123", "Score": 2500, "Level": 15 }

 

 

IAM Policy 사용 방법

IAM Policy에서 조건(condition)을 사용해 파티션 키(partition key) 또는 정렬 키(sort key) 값에 따라 사용자가 어떤 데이터를 읽거나 쓸 수 있는지 세밀하게 제어할 수 있다.

 

예시) 사용자 이름이 파티션 키로 저장되어 있다면, 해당 사용자가 자신의 이름과 일치하는 키에만 접근할 수 있도록 제한.

– 테이블 이름: GameData
– 파티션 키: UserID
– 사용자의 IAM aws:username 속성을 UserID로 매핑하여, 각 사용자가 자신의 데이터에만 접근할 수 있도록 설정.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "dynamodb:GetItem",
        "dynamodb:Query",
        "dynamodb:PutItem",
        "dynamodb:UpdateItem",
        "dynamodb:DeleteItem"
      ],
      "Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/GameData",
      "Condition": {
        "StringEquals": {
          "dynamodb:LeadingKeys": "${aws:username}"
        }
      }
    }
  ]
}

 

 

AWS Cognito를 활용한 대규모 유저 관리

AWS Cognito는 대규모 사용자의 인증과 권한을 효율적으로 관리할 수 있는 서비스를 제공한다.

Cognito에서는 사용자 풀(User Pool)과 아이덴티티 풀(Identity Pool)을 이용해, 각 사용자에게 IAM Policy를 동적으로 할당할 수 있다.

이를 통해 10,000명 이상의 사용자에게도 각자의 데이터만 접근할 수 있도록 Fine-Grained Access Control을 적용할 수 있다.


🤔 문제

게임이 Amazon DynamoDB 테이블에 사용자 게임 데이터를 저장합니다. 개별 사용자가 다른 사용자의 게임 데이터에 액세스하지 못하도록 하려면 어떻게 해야 할까요?

 

  1. 개별 사용자 키로 게임 데이터를 암호화합니다.
  2. 특정 기본 키 값을 기준으로 특정 항목에 대한 액세스를 제한합니다.
  3. SQS 대기열에 데이터를 스테이징하여 DynamoDB에 액세스하기 전에 메타데이터를 주입합니다.
  4. DynamoDB에서 레코드를 읽고 관련 없는 데이터를 클라이언트 측에서 폐기합니다.

정답

더보기

정답. 2번

728x90
반응형