DynamoDB Accelerator(DAX)는 DynamoDB와 함께 작동하여 애플리케이션에 캐싱 계층을 원활하게 추가하도록 설계되었습니다. 그러나 DAX 및 DynamoDB의 액세스 제어 메커니즘은 별개입니다. 두 서비스 모두 AWS Identity and Access Management(IAM)를 사용하여 각자의 보안 정책을 구현하지만 DAX와 DynamoDB의 보안 모델은 서로 다릅니다.
두 보안 모델을 모두 이해하여 DAX를 사용하는 애플리케이션에 알맞은 보안 조치를 구현하는 것이 좋습니다.
이 단원에서는 DAX가 제공하는 액세스 제어 메커니즘을 설명하고, 사용자의 필요에 맞게 맞춤 설정할 수 있는 샘플 IAM 정책을 제공합니다.
DynamoDB를 사용하면 사용자가 개별 DynamoDB 리소스에 수행할 수 있는 작업을 제한하는 IAM 정책을 생성할 수 있습니다. 예를 들어, 사용자가 특정 DynamoDB 테이블에서 읽기 전용 작업만 수행하도록 하는 사용자 역할을 생성할 수 있습니다. (자세한 설명은 Amazon DynamoDB의 Identity and Access Management 섹션을 참조하십시오.) 이에 비해, DAX 보안 모델은 클러스터 보안과 사용자를 대신하여 DynamoDB API 작업을 수행하는 클러스터 기능에 중점을 둡니다.
주의
현재 IAM 역할 및 정책을 사용하여 DynamoDB 테이블 데이터에 대한 액세스 권한을 제한하고 있다면, DAX 사용으로 해당 정책이 손상될 수 있습니다. 예를 들어, 사용자가 DAX를 통해 DynamoDB 테이블에 액세스할 수 있지만 DynamoDB에 직접 액세스하는 동일한 테이블에 대한 명시적 액세스 권한은 없을 수 있습니다. 자세한 내용은 Amazon DynamoDB의 Identity and Access Management 단원을 참조하십시오.
DAX는 DynamoDB의 데이터에 대해 사용자 수준 구분을 적용하지 않습니다. 대신, 사용자는 해당 클러스터에 액세스할 때 DAX 클러스터의 IAM 정책 권한을 상속합니다. 따라서 DAX를 통해 DynamoDB 테이블에 액세스하면 DAX 클러스터의 IAM 정책에 있는 권한만 액세스 제어 정책으로 적용됩니다. 다른 권한은 인식되지 않습니다.
격리가 필요한 경우 추가 DAX 클러스터를 생성하고 이에 맞게 각 클러스터에 대한 IAM 정책 범위를 지정하는 것이 좋습니다. 예를 들어, 여러 DAX 클러스터를 생성하고 각 클러스터가 단일 테이블에만 액세스할 수 있도록 허용할 수 있습니다.
DAX의 IAM 서비스 역할
DAX 클러스터를 생성할 때 클러스터를 IAM 역할에 연결해야 합니다. 이를 클러스터에 대한 서비스 역할이라고 합니다.
DAXCluster01이라는 새 DAX 클러스터를 생성한다고 가정합니다. 이 경우 DAXServiceRole이라는 서비스 역할을 만들고 역할을 DAXCluster01에 연결할 수 있습니다. DAXServiceRole의 정책에서는 DAXCluster01과 상호 작용하는 사용자를 대신하여 DAXCluster01이 수행할 수 있는 DynamoDB 작업을 정의합니다.
서비스 역할을 생성할 때는 DAXServiceRole과 DAX 서비스 자체 간에 신뢰 관계를 지정해야 합니다. 신뢰 관계는 역할을 수임하고 권한을 사용할 수 있는 엔터티를 결정합니다. 다음은 DAXServiceRole의 신뢰 관계 문서의 예입니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "dax.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
이 신뢰 관계에서는 DAX 클러스터가 사용자 대신 DAXServiceRole을 수임하고 DynamoDB API 호출을 수행하도록 허용합니다.
허용되는 DynamoDB API 작업은 IAM 정책 문서에 설명되어 있습니다. 이 문서는 DAXServiceRole에 연결됩니다. 다음은 정책 문서의 예입니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DaxAccessPolicy",
"Effect": "Allow",
"Action": [
"dynamodb:DescribeTable",
"dynamodb:PutItem",
"dynamodb:GetItem",
"dynamodb:UpdateItem",
"dynamodb:DeleteItem",
"dynamodb:Query",
"dynamodb:Scan",
"dynamodb:BatchGetItem",
"dynamodb:BatchWriteItem",
"dynamodb:ConditionCheckItem"
],
"Resource": [
"arn:aws:dynamodb:us-west-2:123456789012:table/Books"
]
}
]
}
이 정책에서는 DAX가 DynamoDB 테이블에서 필요한 DynamoDB API 작업을 수행할 수 있게 허용합니다. dynamodb:DescribeTable
작업은 DAX가 테이블에 대한 메타데이터를 유지하는 데 필요하며 다른 작업은 테이블의 항목에 대해 수행되는 읽기 및 쓰기 작업입니다. Books
라는 테이블은 us-west-2 리전에 있으며 AWS 계정 ID 123456789012
가 소유합니다.
참고
DAX는 크로스 서비스 액세스 중에 혼동된 대리자 문제를 방지하는 메커니즘을 지원합니다. 자세한 내용은 IAM 사용 설명서의 혼동된 대리자 문제를 참조하세요.
DAX 클러스터 액세스를 허용하는 IAM 정책
DAX 클러스터를 생성했으면 사용자가 DAX 클러스터에 액세스할 수 있도록 사용자에게 권한을 부여해야 합니다.
예를 들어 Alice라는 사용자에게 DAXCluster01에 대한 액세스 권한을 부여한다고 가정합니다. 먼저 수신자가 액세스할 수 있는 DAX 클러스터 및 DAX API 작업을 정의하는 IAM 정책(AliceAccessPolicy)을 만듭니다. 그런 다음 이 정책을 사용자 Alice에게 연결하여 액세스 권한을 부여합니다.
다음은 수신자에게 DAXCluster01에 대한 전체 액세스 권한을 부여하는 정책 문서입니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"dax:*"
],
"Effect": "Allow",
"Resource": [
"arn:aws:dax:us-west-2:123456789012:cache/DAXCluster01"
]
}
]
}
이 정책 문서에서는 DAX 클러스터에 대한 액세스는 허용하지만 DynamoDB 권한은 부여하지 않습니다. (DynamoDB 권한은 DAX 서비스 역할에 의해 부여됩니다.)
먼저 사용자 Alice에 대해 위에 있는 정책 문서를 사용해 AliceAccessPolicy
를 생성합니다. 그런 다음 해당 정책을 Alice에 연결합니다.
참고
정책을 사용자에게 연결하는 대신, IAM 역할에 연결할 수 있습니다. 그렇게 하면 해당 역할을 수임하는 모든 사용자에게 정책에 정의된 권한이 부여됩니다.
사용자 정책에서는 DAX 서비스 역할과 함께 수신자가 DAX를 통해 액세스할 수 있는 DynamoDB 리소스 및 API 작업을 결정합니다.
사례 연구: DynamoDB 및 DAX 액세스
다음 시나리오는 DAX와 함께 사용하는 IAM 정책을 더 깊이 이해하는 데 도움이 될 수 있습니다. (이 단원의 나머지 부분에서 이 시나리오를 참조할 것입니다.) 다음은 시나리오에 대한 종합적인 개요를 보여주는 다이어그램입니다.

이 시나리오에는 다음 엔터티가 있습니다.
-
사용자(Bob)
-
IAM 역할(
BobUserRole
). Bob은 런타임에 이 역할을 수임합니다. -
IAM 정책(
BobAccessPolicy
). 이 정책은BobUserRole
에 연결됩니다.BobAccessPolicy
는BobUserRole
이 액세스할 수 있는 DynamoDB 및 DAX 리소스를 정의합니다. -
DAX 클러스터(
DAXCluster01
) -
IAM 서비스 역할(
DAXServiceRole
). 이 역할을 통해DAXCluster01
은 DynamoDB에 액세스할 수 있습니다. -
IAM 정책(
DAXAccessPolicy
). 이 정책은DAXServiceRole
에 연결됩니다.DAXAccessPolicy
는DAXCluster01
이 액세스할 수 있는 DynamoDB API 및 리소스를 정의합니다. -
DynamoDB 테이블(
Books
)
BobAccessPolicy
및 DAXAccessPolicy
의 정책 문 조합에서는 Bob이 Books
테이블로 할 수 있는 것이 무엇인지 결정합니다. 예를 들어 Bob은 Books
에 직접 액세스하거나(DynamoDB 엔드포인트 사용), 간접 액세스하거나(DAX 클러스터 사용), 두 가지 방법을 모두 사용해 액세스할 수 있습니다. 또한 Books
에서 데이터를 읽거나 데이터를 Books
에 쓰거나 둘 다 수행할 수 있습니다.
DynamoDB에 액세스할 수는 있지만 DAX로는 액세스할 수 없음

DynamoDB 테이블에 직접 액세스할 수는 있지만 DAX 클러스터를 사용하여 간접 액세스할 수는 없습니다. DynamoDB에 직접 액세스하는 경우 BobUserRole
에 대한 권한은 (역할에 연결되는) BobAccessPolicy
에 의해 결정됩니다.
DynamoDB에 대한 읽기 전용 액세스(전용)
Bob은 BobUserRole
을 사용해 DynamoDB에 액세스할 수 있습니다. 이 역할(BobAccessPolicy
)에 연결된 IAM 정책은 BobUserRole
이 액세스할 수 있는 DynamoDB 테이블과 BobUserRole
이 호출할 수 있는 API를 결정합니다.
BobAccessPolicy
에 대해 다음 정책 문서를 고려해 보세요.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DynamoDBAccessStmt",
"Effect": "Allow",
"Action": [
"dynamodb:GetItem",
"dynamodb:BatchGetItem",
"dynamodb:Query",
"dynamodb:Scan"
],
"Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Books"
}
]
}
이 문서가 BobAccessPolicy
에 연결되어 있으면 BobUserRole
이 DynamoDB 엔드포인트에 액세스하고 Books
테이블에 대한 읽기 전용 작업을 수행할 수 있습니다.
DAX는 이 정책에 나와 있지 않으므로 DAX를 통한 액세스는 거부됩니다.
DynamoDB에 대한 읽기/쓰기 액세스(전용)
BobUserRole
이 DynamoDB에 대한 읽기/쓰기 액세스 권한이 필요한 경우 다음 정책을 사용하면 됩니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DynamoDBAccessStmt",
"Effect": "Allow",
"Action": [
"dynamodb:GetItem",
"dynamodb:BatchGetItem",
"dynamodb:Query",
"dynamodb:Scan",
"dynamodb:PutItem",
"dynamodb:UpdateItem",
"dynamodb:DeleteItem",
"dynamodb:BatchWriteItem",
"dynamodb:ConditionCheckItem"
],
"Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Books"
}
]
}
마찬가지로 DAX는 이 정책에 나와 있지 않으므로 DAX를 통한 액세스는 거부됩니다.
DynamoDB 및 DAX에 대한 액세스

DAX 클러스터에 대한 액세스를 허용하려면 DAX 관련 작업을 IAM 정책에 포함해야 합니다.
다음은 DynamoDB API에 있는 비슷한 이름의 작업에 대응되는 DAX 관련 작업입니다.
-
dax:GetItem
-
dax:BatchGetItem
-
dax:Query
-
dax:Scan
-
dax:PutItem
-
dax:UpdateItem
-
dax:DeleteItem
-
dax:BatchWriteItem
-
dax:ConditionCheckItem
dax:EnclosingOperation
조건 키의 경우도 마찬가지입니다.
DynamoDB에 대한 읽기 전용 액세스 및 DAX에 대한 읽기 전용 액세스
DynamoDB 및 DAX에서 Books
테이블에 읽기 전용 액세스를 할 수 있는 권한이 Bob에게 필요하다고 가정합니다. 다음 정책(BobUserRole
에 연결됨)에서 이 액세스 권한을 부여합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DAXAccessStmt",
"Effect": "Allow",
"Action": [
"dax:GetItem",
"dax:BatchGetItem",
"dax:Query",
"dax:Scan"
],
"Resource": "arn:aws:dax:us-west-2:123456789012:cache/DAXCluster01"
},
{
"Sid": "DynamoDBAccessStmt",
"Effect": "Allow",
"Action": [
"dynamodb:GetItem",
"dynamodb:BatchGetItem",
"dynamodb:Query",
"dynamodb:Scan"
],
"Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Books"
}
]
}
이 정책에는 DAX 액세스에 대한 문(DAXAccessStmt
)과 DynamoDB 액세스에 대한 또 하나의 문(DynamoDBAccessStmt
)이 있습니다. 이 문에서는 Bob이 GetItem
, BatchGetItem
, Query
및 Scan
요청을 DAXCluster01
로 보내도록 허용합니다.
그러나 DAXCluster01
에 대한 서비스 역할에도 DynamoDB의 Books
테이블에 대한 읽기 전용 액세스 권한이 필요합니다. 다음은 이러한 요구 사항을 만족하는 IAM 정책으로서 DAXServiceRole
에 연결되어 있습니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DynamoDBAccessStmt",
"Effect": "Allow",
"Action": [
"dynamodb:GetItem",
"dynamodb:BatchGetItem",
"dynamodb:Query",
"dynamodb:Scan"
],
"Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Books"
}
]
}
DynamoDB에 대한 읽기/쓰기 액세스 및 DAX를 사용한 읽기 전용 액세스
특정 사용자 역할에 대해 DynamoDB 테이블에 대한 읽기/쓰기 액세스 권한을 제공함과 동시에 DAX를 통한 읽기 전용 액세스 권한을 허용할 수 있습니다.
Bob의 경우 BobUserRole
의 IAM 정책은 Books
테이블에 대한 DynamoDB 읽기 및 쓰기 작업을 허용하면서 DAXCluster01
을 통한 읽기 전용 작업을 지원해야 합니다.
다음은 이러한 액세스 권한을 부여하는 BobUserRole
에 대한 정책 문서의 예입니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DAXAccessStmt",
"Effect": "Allow",
"Action": [
"dax:GetItem",
"dax:BatchGetItem",
"dax:Query",
"dax:Scan"
],
"Resource": "arn:aws:dax:us-west-2:123456789012:cache/DAXCluster01"
},
{
"Sid": "DynamoDBAccessStmt",
"Effect": "Allow",
"Action": [
"dynamodb:GetItem",
"dynamodb:BatchGetItem",
"dynamodb:Query",
"dynamodb:Scan",
"dynamodb:PutItem",
"dynamodb:UpdateItem",
"dynamodb:DeleteItem",
"dynamodb:BatchWriteItem",
"dynamodb:DescribeTable",
"dynamodb:ConditionCheckItem"
],
"Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Books"
}
]
}
이외에도 DAXServiceRole
에는 DAXCluster01
이 Books
테이블에 대한 읽기 전용 작업을 수행하도록 허용하는 IAM 정책이 필요합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DynamoDBAccessStmt",
"Effect": "Allow",
"Action": [
"dynamodb:GetItem",
"dynamodb:BatchGetItem",
"dynamodb:Query",
"dynamodb:Scan",
"dynamodb:DescribeTable"
],
"Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Books"
}
]
}
DynamoDB에 대한 읽기/쓰기 액세스 및 DAX에 대한 읽기/쓰기 액세스
DynamoDB에서 직접 또는 DAXCluster01
에서 간접적으로 Books
테이블에 대해 읽기/쓰기 액세스를 할 수 있는 권한이 Bob에게 필요하다고 가정합시다. 다음 정책 문서(BobAccessPolicy
에 연결됨)에서 이 액세스 권한을 부여합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DAXAccessStmt",
"Effect": "Allow",
"Action": [
"dax:GetItem",
"dax:BatchGetItem",
"dax:Query",
"dax:Scan",
"dax:PutItem",
"dax:UpdateItem",
"dax:DeleteItem",
"dax:BatchWriteItem",
"dax:ConditionCheckItem"
],
"Resource": "arn:aws:dax:us-west-2:123456789012:cache/DAXCluster01"
},
{
"Sid": "DynamoDBAccessStmt",
"Effect": "Allow",
"Action": [
"dynamodb:GetItem",
"dynamodb:BatchGetItem",
"dynamodb:Query",
"dynamodb:Scan",
"dynamodb:PutItem",
"dynamodb:UpdateItem",
"dynamodb:DeleteItem",
"dynamodb:BatchWriteItem",
"dynamodb:DescribeTable",
"dynamodb:ConditionCheckItem"
],
"Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Books"
}
]
}
이외에도 DAXServiceRole
에는 DAXCluster01
이 Books
테이블에 대한 읽기/쓰기 작업을 수행하도록 허용하는 IAM 정책이 필요합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DynamoDBAccessStmt",
"Effect": "Allow",
"Action": [
"dynamodb:GetItem",
"dynamodb:BatchGetItem",
"dynamodb:Query",
"dynamodb:Scan",
"dynamodb:PutItem",
"dynamodb:UpdateItem",
"dynamodb:DeleteItem",
"dynamodb:BatchWriteItem",
"dynamodb:DescribeTable"
],
"Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Books"
}
]
}
DAX를 통해 DynamoDB에 액세스할 수 있지만 DynamoDB에 직접 액세스할 수는 없음
이 시나리오에서는 Bob이 DAX를 통해 Books
테이블에 액세스할 수 있지만 DynamoDB의 Books
테이블에는 직접 액세스할 수 없습니다. 따라서, Bob에게 DAX에 대한 액세스 권한이 부여되면, 다른 방법으로는 액세스할 수 없는 DynamoDB 테이블에도 액세스할 수 있게 됩니다. DAX 서비스 역할에 대해 IAM 정책을 구성하는 경우에는 사용자 액세스 정책을 통해 DAX 클러스터에 대한 액세스 권한을 부여받은 사용자가 해당 정책에서 지정한 테이블에 대한 액세스 권한을 갖게 된다는 점에 유의하세요. 이 경우 BobAccessPolicy
는 DAXAccessPolicy
에 지정된 테이블에 대한 액세스 권한을 갖게 됩니다.

현재 IAM 역할 및 정책을 사용하여 DynamoDB 테이블 및 데이터에 대한 액세스 권한을 제한하고 있는 경우 DAX를 사용하면 이러한 정책이 손상될 수 있습니다. 아래 정책에서는 Bob이 DAX를 통해 DynamoDB 테이블에 액세스할 수 있지만 DynamoDB의 동일한 테이블에는 명시적으로 직접 액세스할 수 없습니다.
다음은 이러한 액세스 권한을 부여하는 정책 문서(BobAccessPolicy
)로서 BobUserRole
에 연결됩니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DAXAccessStmt",
"Effect": "Allow",
"Action": [
"dax:GetItem",
"dax:BatchGetItem",
"dax:Query",
"dax:Scan",
"dax:PutItem",
"dax:UpdateItem",
"dax:DeleteItem",
"dax:BatchWriteItem",
"dax:ConditionCheckItem"
],
"Resource": "arn:aws:dax:us-west-2:123456789012:cache/DAXCluster01"
}
]
}
이 액세스 정책에는 DynamoDB에 직접 액세스할 수 있는 권한이 없습니다.
BobAccessPolicy
와 함께 다음 DAXAccessPolicy
에서는 BobUserRole
이 Books
테이블에 직접 액세스할 수 없다 하더라도 DynamoDB 테이블 Books
에 대한 액세스 권한을 BobUserRole
에 부여합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DynamoDBAccessStmt",
"Effect": "Allow",
"Action": [
"dynamodb:GetItem",
"dynamodb:BatchGetItem",
"dynamodb:Query",
"dynamodb:Scan",
"dynamodb:PutItem",
"dynamodb:UpdateItem",
"dynamodb:DeleteItem",
"dynamodb:BatchWriteItem",
"dynamodb:DescribeTable",
"dynamodb:ConditionCheckItem"
],
"Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Books"
}
]
}
이 예에 표시된 대로 사용자 액세스 정책 및 DAX 클러스터 액세스 정책에 대해 액세스 제어를 구성할 때는 최소 권한 원칙이 지켜지도록 종단 간 액세스에 대해 온전히 이해하고 있어야 합니다. 또한 사용자에게 DAX 클러스터에 대한 액세스 권한을 부여함으로 인해 이전에 설정한 액세스 제어 정책이 손상되지 않게 해야 합니다.