DAX 액세스 제어 - Amazon DynamoDB

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

DAX 액세스 제어

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 클러스터를 생성한다고 가정합니다. DAX라는 서비스 역할을 생성하고 이 역할을 DAXCluster01에 ServiceRole 연결할 수 있습니다. DAX 정책은 ServiceRole DAXCluster01과 상호 작용하는 사용자를 대신하여 DAXCluster01이 수행할 수 있는 DynamoDB 작업을 정의합니다.

서비스 역할을 생성할 때는 DAX와 DAX 서비스 자체 간의 신뢰 관계를 지정해야 합니다. ServiceRole 신뢰 관계는 역할을 수임하고 권한을 사용할 수 있는 엔터티를 결정합니다. 다음은 DAX의 신뢰 관계 문서 예시입니다. ServiceRole

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "dax.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

이 신뢰 관계를 통해 DAX 클러스터는 DAX를 ServiceRole 가정하고 사용자를 대신하여 DynamoDB API 호출을 수행할 수 있습니다.

허용되는 DynamoDB API 작업은 DAX에 첨부한 IAM 정책 문서에 설명되어 있습니다. ServiceRole 다음은 정책 문서의 예입니다.

{ "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에 연결됩니다. BobAccessPolicyBobUserRole이 액세스할 수 있는 DynamoDB 및 DAX 리소스를 정의합니다.

  • DAX 클러스터(DAXCluster01)

  • IAM 서비스 역할(DAXServiceRole). 이 역할을 통해 DAXCluster01은 DynamoDB에 액세스할 수 있습니다.

  • IAM 정책(DAXAccessPolicy). 이 정책은 DAXServiceRole에 연결됩니다. DAXAccessPolicyDAXCluster01이 액세스할 수 있는 DynamoDB API 및 리소스를 정의합니다.

  • DynamoDB 테이블(Books)

BobAccessPolicyDAXAccessPolicy의 정책 문 조합에서는 Bob이 Books 테이블로 할 수 있는 것이 무엇인지 결정합니다. 예를 들어 Bob은 Books에 직접 액세스하거나(DynamoDB 엔드포인트 사용), 간접 액세스하거나(DAX 클러스터 사용), 두 가지 방법을 모두 사용해 액세스할 수 있습니다. 또한 Books에서 데이터를 읽거나 데이터를 Books에 쓰거나 둘 다 수행할 수 있습니다.

DynamoDB에 액세스할 수는 있지만 DAX로는 액세스할 수 없음

DynamoDB 테이블에 직접 액세스할 수는 있지만 DAX 클러스터를 사용하여 간접 액세스할 수는 없습니다. DynamoDB에 직접 액세스하는 경우 BobUserRole에 대한 권한은 (역할에 연결되는) BobAccessPolicy에 의해 결정됩니다.

DynamoDB에 대한 읽기 전용 액세스(전용)

BobBobUserRole을 사용해 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이 GetItemBatchGetItemQuery 및 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에는 DAXCluster01Books 테이블에 대한 읽기 전용 작업을 수행하도록 허용하는 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에는 DAXCluster01Books 테이블에 대한 읽기/쓰기 작업을 수행하도록 허용하는 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 클러스터에 대한 액세스 권한을 부여받은 사용자가 해당 정책에서 지정한 테이블에 대한 액세스 권한을 갖게 된다는 점에 유의하세요. 이 경우 BobAccessPolicyDAXAccessPolicy에 지정된 테이블에 대한 액세스 권한을 갖게 됩니다.

현재 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에서는 BobUserRoleBooks 테이블에 직접 액세스할 수 없다 하더라도 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 클러스터 액세스 정책에 대한 액세스 제어를 구성할 때는 최소 권한 원칙이 준수되도록 end-to-end 액세스를 완전히 이해해야 합니다. 또한 사용자에게 DAX 클러스터에 대한 액세스 권한을 부여함으로 인해 이전에 설정한 액세스 제어 정책이 손상되지 않게 해야 합니다.