[AWS] DynamoDB의 IAM Policy을 활용한 세분화된 액세스 제어 방법(Fine-Grained Access Control)
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 테이블에 사용자 게임 데이터를 저장합니다. 개별 사용자가 다른 사용자의 게임 데이터에 액세스하지 못하도록 하려면 어떻게 해야 할까요?
- 개별 사용자 키로 게임 데이터를 암호화합니다.
- 특정 기본 키 값을 기준으로 특정 항목에 대한 액세스를 제한합니다.
- SQS 대기열에 데이터를 스테이징하여 DynamoDB에 액세스하기 전에 메타데이터를 주입합니다.
- DynamoDB에서 레코드를 읽고 관련 없는 데이터를 클라이언트 측에서 폐기합니다.
정답
정답. 2번