DynamoDB 글로벌 테이블 보안 - Amazon DynamoDB

DynamoDB 글로벌 테이블 보안

글로벌 테이블 복제본은 DynamoDB 테이블이므로 AWS Identity and Access Management(IAM) ID 정책 및 리소스 기반 정책을 포함하여 단일 리전 테이블에 대해 수행하는 복제본 액세스 제어와 동일한 방법을 사용합니다. 이 주제에서는 IAM 권한 및 AWS Key Management Service(AWS KMS) 암호화를 사용하여 DynamoDB 다중 계정 글로벌 테이블을 보호하는 방법을 다룹니다. 교차 리전 교차 계정 복제 및 오토 스케일링을 허용하는 리소스 기반 정책 및 서비스 연결 역할(SLR), 글로벌 테이블을 생성, 업데이트 및 삭제하는 데 필요한 IAM 권한, 다중 리전 최종 일관성(MREC) 테이블에 대해 알아봅니다. 또한 교차 리전 복제를 안전하게 관리하기 위한 AWS KMS 암호화 키에 대해서도 알아봅니다.

교차 계정 및 교차 리전 테이블 복제를 설정하는 데 필요한 리소스 기반 정책 및 권한에 대한 자세한 정보를 제공합니다. 이 보안 모델을 이해하는 것은 안전한 교차 계정 데이터 복제 솔루션을 구현해야 하는 고객에게 매우 중요합니다.

복제에 대한 서비스 위탁자 권한 부여

복제는 계정 경계를 넘어 수행되므로 DynamoDB의 다중 계정 글로벌 테이블은 고유한 권한 부여 접근 방식을 사용합니다. 이는 DynamoDB의 복제 서비스 위탁자인 replication.dynamodb.amazonaws.com을 사용하여 수행됩니다. 각 참여 계정은 복제본 테이블의 리소스 정책에서 해당 위탁자를 명시적으로 허용하여 aws:SourceAccount, aws:SourceArn 등의 키에 대한 소스 컨텍스트 조건에 따라 특정 복제본으로 제한할 수 있는 권한을 부여해야 합니다. 자세한 내용은 AWS 전역 조건 키를 참조하세요. 권한은 양방향입니다. 즉, 모든 복제본은 특정 복제본 쌍에서 복제를 설정하기 전에 서로에게 명시적으로 권한을 부여해야 합니다.

다음 서비스 위탁자 권한은 교차 계정 복제에 필수적입니다.

  • dynamodb:ReadDataForReplication은 복제 목적으로 데이터를 읽을 수 있는 기능을 부여합니다. 이 권한을 사용하면 한 복제본의 변경 사항을 읽고 다른 복제본으로 전파할 수 있습니다.

  • dynamodb:WriteDataForReplication은 복제된 데이터를 대상 테이블에 쓸 수 있도록 허용합니다. 이 권한을 사용하면 글로벌 테이블의 모든 복제본에서 변경 사항을 동기화할 수 있습니다.

  • dynamodb:ReplicateSettings를 사용하면 복제본 간에 테이블 설정을 동기화하여 참여하는 모든 테이블에서 일관된 구성을 제공할 수 있습니다.

각 복제본은 위의 권한을 다른 모든 복제본과 자신에게 부여해야 합니다. 즉, 소스 컨텍스트 조건에는 글로벌 테이블을 구성하는 전체 복제본 세트가 포함되어야 합니다. 이러한 권한은 다중 계정 글로벌 테이블에 추가될 때 각 새 복제본에 대해 확인됩니다. 이렇게 하면 승인된 DynamoDB 서비스에서만, 그리고 의도한 테이블 간에만 복제 작업이 수행되는지 확인할 수 있습니다.

다중 계정 글로벌 테이블에 대한 서비스 연결 역할

DynamoDB 다중 계정 글로벌 테이블은 모든 복제본에 설정을 복제하므로 각 복제본이 일관된 처리량으로 동일하게 설정되고 원활한 장애 조치 환경을 제공합니다. 설정 복제는 서비스 위탁자에 대한 ReplicateSettings 권한을 통해 제어되지만, 서비스 연결 역할(SLR)도 함께 사용하여 특정 교차 계정 교차 리전 복제 및 오토 스케일링 기능을 관리합니다. 이러한 역할은 AWS 계정당 한 번만 설정합니다. 생성되면 동일한 역할이 계정의 모든 글로벌 테이블을 처리합니다. 서비스 연결 역할에 대한 자세한 내용은 IAM 사용 설명서의 서비스 연결 역할 사용을 참조하세요.

설정 관리 서비스 연결 역할

Amazon DynamoDB는 계정에서 첫 번째 다중 계정 글로벌 테이블 복제본을 생성할 때 AWSServiceRoleForDynamoDBGlobalTableSettingsManagement 서비스 연결 역할(SLR)을 자동으로 생성합니다. 이 역할은 설정의 교차 계정 교차 리전 복제를 관리합니다.

복제본에 리소스 기반 정책을 적용할 때 AWSServiceRoleForDynamoDBGlobalTableSettingsManagement에 정의된 권한이 SLR 위탁자를 거부하지 않는지 확인합니다. 이 경우 설정 관리에 방해가 되고 복제본 또는 GSI 간에 처리량이 일치하지 않으면 복제가 손상될 수 있습니다. 필요한 SLR 권한을 거부하면 영향을 받는 복제본과의 복제가 중지되고 복제본 테이블 상태가 REPLICATION_NOT_AUTHORIZED로 변경됩니다. 다중 계정 글로벌 테이블의 경우, 복제본이 20시간 이상 REPLICATION_NOT_AUTHORIZED 상태로 유지되는 경우 복제본은 단일 리전 DynamoDB 테이블로 되돌릴 수 없이 변환됩니다. SLR에 다음 권한이 있습니다.

  • application-autoscaling:DeleteScalingPolicy

  • application-autoscaling:DescribeScalableTargets

  • application-autoscaling:DescribeScalingPolicies

  • application-autoscaling:DeregisterScalableTarget

  • application-autoscaling:PutScalingPolicy

  • application-autoscaling:RegisterScalableTarget

IAM 서비스 연결 역할 오토 스케일링

프로비저닝된 용량 모드에 대한 글로벌 테이블을 구성할 때 글로벌 테이블에 대한 오토 스케일링도 구성해야 합니다. DynamoDB 오토 스케일링은 AWS Application Auto Scaling 서비스를 사용하여 글로벌 테이블 복제본에서 프로비저닝된 처리량 용량을 동적으로 조정합니다. Application Auto Scaling 서비스는 이름이 AWSServiceRoleForApplicationAutoScaling_DynamoDBTable인 서비스 연결 역할(SLR)을 생성합니다. 이 서비스 연결 역할은 DynamoDB 테이블에 대한 오토 스케일링을 처음 구성할 때 AWS 계정에 자동으로 생성됩니다. 이를 통해 Application Auto Scaling은 프로비저닝된 테이블 용량을 관리하고 CloudWatch 경보를 생성할 수 있습니다.

복제본에 리소스 기반 정책을 적용할 때는 AWSApplicationAutoscalingDynamoDBTablePolicy에 정의된 권한이 Application Auto Scaling SLR 위탁자를 거부하지 않는지 확인하세요. 이로 인해 오토 스케일링 기능이 중단될 수 있기 때문입니다.

글로벌 테이블이 AWS IAM을 사용하는 방법

다음 섹션에서는 다양한 글로벌 테이블 작업에 필요한 권한을 설명하고 사용자 및 애플리케이션에 대한 적절한 액세스를 구성하는 데 도움이 되는 정책 예제를 제공합니다.

참고

설명된 모든 권한은 영향을 받는 리전의 특정 테이블 리소스 ARN에 적용되어야 합니다. 테이블 리소스 ARN은 arn:aws:dynamodb:region:account-id:table/table-name 형식을 따르며, 여기서 실제 리전, 계정 ID 및 테이블 이름 값을 지정해야 합니다.

다음은 아래 섹션에서 다루는 단계별 주제입니다.

  • 다중 계정 글로벌 테이블 생성 및 복제본 추가

  • 다중 계정 글로벌 테이블 업데이트

  • 글로벌 테이블 삭제 및 복제본 제거

글로벌 테이블 생성 및 복제본 추가

글로벌 테이블 생성 권한

리전 테이블에 새 복제본을 추가하여 다중 계정 글로벌 테이블 또는 기존 다중 계정 글로벌 테이블을 구성하는 경우, 작업을 수행하는 IAM 위탁자는 모든 기존 구성원의 승인을 받아야 합니다. 복제본 추가가 성공하려면 모든 기존 멤버가 테이블 정책에서 다음 권한을 부여해야 합니다.

  • dynamodb:AssociateTableReplica - 이 권한을 통해 테이블을 글로벌 테이블 설정에 조인할 수 있습니다. 이는 복제 관계의 초기 설정을 활성화하는 기본 권한입니다.

이 정확한 제어를 통해 승인된 계정만 글로벌 테이블 설정에 참여할 수 있습니다.

글로벌 테이블 생성을 위한 IAM 정책 예제

다중 계정 글로벌 테이블의 설정은 보안 복제를 제공하는 특정 권한 부여 흐름을 따릅니다. 고객이 두 개의 복제본이 있는 글로벌 테이블을 설정하려는 실제 시나리오를 살펴보면서 실제로 어떻게 작동하는지 살펴보겠습니다. 첫 번째 복제본(ReplicaA)은 ap-east-1 리전의 Account A에 있고, 두 번째 복제본(ReplicaB)은 eu-south-1 리전의 Account B에 있습니다.

  • 소스 계정(Account A)에서 프로세스는 기본 복제본 테이블 생성으로 시작됩니다. 계정 관리자는 연결을 수행하는 데 필요한 권한을 대상 계정(Account B)에 명시적으로 부여하는 리소스 기반 정책을 이 테이블에 연결해야 합니다. 또한 이 정책은 DynamoDB 복제 서비스에 필수 복제 작업을 수행할 수 있는 권한을 부여합니다.

  • 대상 계정(Account B)은 복제본을 생성하고 복제본 생성에 사용할 소스 테이블 ARN을 참조하는 동안 해당 리소스 기반 정책을 연결하여 유사한 프로세스를 따릅니다. 이 정책은 Account A가 부여한 권한을 미러링하여 신뢰할 수 있는 양방향 관계를 생성합니다. 복제를 설정하기 전에 DynamoDB는 이러한 교차 계정 권한을 검증하여 적절한 권한이 있는지 확인합니다.

이 설정을 완료하려면 다음을 수행합니다.

  • Account A의 관리자는 먼저 리소스 기반 정책을 ReplicaA에 연결해야 합니다. 이 정책은 Account B 및 DynamoDB 복제 서비스에 필요한 권한을 명시적으로 부여합니다.

  • 마찬가지로 Account B의 관리자는 Replica A를 소스 테이블로 참조하는 Replica B를 만들기 위해 테이블 생성을 직접 호출할 때 Account A에 해당 권한을 부여하기 위해 계정 참조를 반대로 설정한 일치하는 정책을 ReplicaB에 연결해야 합니다.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "DynamoDBActionsNeededForSteadyStateReplication", "Effect": "Allow", "Action": [ "dynamodb:ReadDataForReplication", "dynamodb:WriteDataForReplication", "dynamodb:ReplicateSettings" ], "Resource": "arn:aws:dynamodb:ap-east-1:111122223333:table/ReplicaA", "Principal": {"Service": ["replication.dynamodb.amazonaws.com"]}, "Condition": { "StringEquals": { "aws:SourceAccount": [ "111122223333", "444455556666" ], "aws:SourceArn": [ "arn:aws:dynamodb:ap-east-1:111122223333:table/ReplicaA", "arn:aws:dynamodb:eu-south-1:444455556666:table/ReplicaB" ] } } }, { "Sid": "AllowTrustedAccountsToJoinThisGlobalTable", "Effect": "Allow", "Action": [ "dynamodb:AssociateTableReplica" ], "Resource": "arn:aws:dynamodb:ap-east-1:111122223333:table/ReplicaA", "Principal": {"AWS": ["444455556666"]} } ] }
JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "DynamoDBActionsNeededForSteadyStateReplication", "Effect": "Allow", "Action": [ "dynamodb:ReadDataForReplication", "dynamodb:WriteDataForReplication", "dynamodb:ReplicateSettings" ], "Resource": "arn:aws:dynamodb:eu-south-1:444455556666:table/ReplicaB", "Principal": {"Service": ["replication.dynamodb.amazonaws.com"]}, "Condition": { "StringEquals": { "aws:SourceAccount": [ "111122223333", "444455556666" ], "aws:SourceArn": [ "arn:aws:dynamodb:ap-east-1:111122223333:table/ReplicaA", "arn:aws:dynamodb:eu-south-1:444455556666:table/ReplicaB" ] } } } ] }

이 설정에서는 Account A, Account B, Account C 각각에 3개의 복제본인 ReplicaA, ReplicaB, ReplicaC가 있습니다. ReplicaA는 리전 테이블로 시작하는 첫 번째 복제본으로, ReplicaB와 ReplicaC가 추가됩니다.

  • Account A의 관리자는 먼저 모든 멤버와의 복제를 허용하고 Account B 및 Account C의 IAM 위탁자가 복제본을 추가할 수 있도록 리소스 기반 정책을 ReplicaA에 연결해야 합니다.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "DynamoDBActionsNeededForSteadyStateReplication", "Effect": "Allow", "Action": [ "dynamodb:ReadDataForReplication", "dynamodb:WriteDataForReplication", "dynamodb:ReplicateSettings" ], "Resource": "arn:aws:dynamodb:ap-east-1:111122223333:table/ReplicaA", "Principal": {"Service": ["replication.dynamodb.amazonaws.com"]}, "Condition": { "StringEquals": { "aws:SourceAccount": [ "111122223333", "444455556666", "123456789012" ], "aws:SourceArn": [ "arn:aws:dynamodb:ap-east-1:111122223333:table/ReplicaA", "arn:aws:dynamodb:eu-south-1:444455556666:table/ReplicaB", "arn:aws:dynamodb:us-east-1:123456789012:table/ReplicaC" ] } } }, { "Sid": "AllowTrustedAccountsToJoinThisGlobalTable", "Effect": "Allow", "Action": [ "dynamodb:AssociateTableReplica" ], "Resource": "arn:aws:dynamodb:ap-east-1:111122223333:table/ReplicaA", "Principal": { "AWS": [ "444455556666", "123456789012" ] } } ] }
  • Account B의 관리자는 ReplicaA를 소스로 지정하는 복제본(ReplicaB)을 추가해야 합니다. ReplicaB에는 모든 멤버 간의 복제를 허용하고 Account C가 복제본을 추가하도록 허용하는 다음 정책이 있습니다.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "DynamoDBActionsNeededForSteadyStateReplication", "Effect": "Allow", "Action": [ "dynamodb:ReadDataForReplication", "dynamodb:WriteDataForReplication", "dynamodb:ReplicateSettings" ], "Resource": "arn:aws:dynamodb:eu-south-1:444455556666:table/ReplicaB", "Principal": {"Service": ["replication.dynamodb.amazonaws.com"]}, "Condition": { "StringEquals": { "aws:SourceAccount": [ "111122223333", "444455556666", "123456789012" ], "aws:SourceArn": [ "arn:aws:dynamodb:ap-east-1:111122223333:table/ReplicaA", "arn:aws:dynamodb:eu-south-1:444455556666:table/ReplicaB", "arn:aws:dynamodb:us-east-1:123456789012:table/ReplicaC" ] } } }, { "Sid": "AllowTrustedAccountsToJoinThisGlobalTable", "Effect": "Allow", "Action": [ "dynamodb:AssociateTableReplica" ], "Resource": "arn:aws:dynamodb:eu-south-1:444455556666:table/ReplicaB", "Principal": { "AWS": [ "123456789012" ] } } ] }
  • 마지막으로 Account C의 관리자는 모든 멤버 간의 복제 권한을 허용하는 다음 정책을 사용하여 복제본을 생성합니다. 정책은 추가 복제본 추가를 허용하지 않습니다.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "DynamoDBActionsNeededForSteadyStateReplication", "Effect": "Allow", "Action": [ "dynamodb:ReadDataForReplication", "dynamodb:WriteDataForReplication", "dynamodb:ReplicateSettings" ], "Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/ReplicaC", "Principal": {"Service": ["replication.dynamodb.amazonaws.com"]}, "Condition": { "StringEquals": { "aws:SourceAccount": [ "111122223333", "444455556666" ], "aws:SourceArn": [ "arn:aws:dynamodb:ap-east-1:111122223333:table/ReplicaA", "arn:aws:dynamodb:eu-south-1:444455556666:table/ReplicaB" ] } } } ] }

다중 계정 글로벌 테이블 업데이트

UpdateTable API를 사용하여 기존 글로벌 테이블에 대한 복제본 설정을 수정하려면 API 직접 호출을 수행하는 리전의 테이블 리소스에 대해 다음 권한이 필요합니다. dynamodb:UpdateTable

오토 스케일링 정책 및 TTL(Time To Live) 설정과 같은 다른 글로벌 테이블 구성을 추가로 업데이트할 수 있습니다. 이러한 추가 업데이트 작업에는 다음 권한이 필요합니다.

UpdateTimeToLive API를 사용하여 TTL(Time to Live) 설정을 업데이트하려면 복제본이 포함된 모든 리전의 테이블 리소스에서 다음 권한이 있어야 합니다. dynamodb:UpdateTimeToLive

UpdateTableReplicaAutoScaling API를 사용하여 복제본 오토 스케일링 정책을 업데이트하려면 복제본이 포함된 모든 리전의 테이블 리소스에서 다음 권한이 있어야 합니다.

  • application-autoscaling:DeleteScalingPolicy

  • application-autoscaling:DeleteScheduledAction

  • application-autoscaling:DeregisterScalableTarget

  • application-autoscaling:DescribeScalableTargets

  • application-autoscaling:DescribeScalingActivities

  • application-autoscaling:DescribeScalingPolicies

  • application-autoscaling:DescribeScheduledActions

  • application-autoscaling:PutScalingPolicy

  • application-autoscaling:PutScheduledAction

  • application-autoscaling:RegisterScalableTarget

참고

업데이트 테이블이 성공하려면 모든 복제본 리전 및 계정에 dynamodb:ReplicateSettings 권한을 제공해야 합니다. 복제본이 다중 계정 글로벌 테이블의 복제본에 설정을 복제할 수 있는 권한을 제공하지 않는 경우 권한이 수정될 때까지 모든 복제본의 모든 업데이트 작업이 AccessDeniedException 오류로 실패합니다.

글로벌 테이블 삭제 및 복제본 제거

글로벌 테이블을 삭제하려면 모든 복제본을 제거해야 합니다. 동일 계정 글로벌 테이블과 달리 UpdateTable을 사용하여 원격 리전의 복제본 테이블을 삭제할 수 없으며, 각 복제본은 이를 제어하는 계정에서 DeleteTable API를 통해 삭제해야 합니다.

글로벌 테이블 삭제 및 복제본 제거 권한

개별 복제본을 제거하고 글로벌 테이블을 완전히 삭제하려면 다음 권한이 필요합니다. 글로벌 테이블 구성을 삭제하면 다른 리전의 테이블 간 복제 관계만 제거됩니다. 마지막 남은 리전의 기본 DynamoDB 테이블은 삭제되지 않습니다. 마지막 리전의 테이블은 동일한 데이터 및 설정을 가진 표준 DynamoDB 테이블로 계속 존재합니다.

복제본을 제거하는 각 리전의 테이블 리소스에 대해 다음 권한이 필요합니다.

  • dynamodb:DeleteTable

  • dynamodb:DeleteTableReplica

글로벌 테이블이 AWS KMS를 사용하는 방법

모든 DynamoDB 테이블과 마찬가지로 글로벌 테이블 복제본은 항상 AWS Key Management Service(AWS KMS)에 저장된 암호화 키를 사용하여 저장 데이터를 암호화합니다.

참고

동일 계정 글로벌 테이블과 달리, 다중 계정 글로벌 테이블의 서로 다른 복제본을 서로 다른 유형의 AWS KMS 키(AWS 소유 키 또는 고객 관리형 키)로 구성할 수 있습니다. 다중 계정 글로벌 테이블은 AWS 관리형 키를 지원하지 않습니다.

CMK를 사용하는 다중 계정 글로벌 테이블에는 복제 및 설정 관리를 위해 키에 액세스할 수 있는 권한을 DynamoDB 복제 서비스 위탁자(replication.dynamodb.amazonaws.com)에게 부여하기 위해 각 복제본의 키 정책이 필요합니다. 다음 권한이 필요합니다.

  • kms:Decrypt

  • kms:ReEncrypt*

  • kms:GenerateDataKey*

  • kms:DescribeKey

중요

복제본을 삭제하려면 DynamoDB에서 복제본의 암호화 키에 액세스해야 합니다. 복제본을 삭제하기 때문에 복제본을 암호화하는 데 사용되는 고객 관리형 키를 비활성화하거나 삭제하려면, 먼저 복제본을 삭제한 후 다른 복제본 중 하나에서 describe를 직접 호출하여 테이블이 복제 그룹에서 제거될 때까지 기다린 다음 해당 키를 비활성화하거나 삭제해야 합니다.

복제본을 암호화하는 데 사용되는 고객 관리형 키에 대한 DynamoDB의 액세스를 비활성화하거나 취소하면 복제본과의 복제가 중지되고 복제본 상태가 INACCESSIBLE_ENCRYPTION_CREDENTIALS로 변경됩니다. 복제본이 20시간 이상 INACCESSIBLE_ENCRYPTION_CREDENTIALS 상태로 유지되는 경우 복제본은 단일 리전 DynamoDB 테이블로 되돌릴 수 없이 변환됩니다.

예제 AWS KMS 정책

이 AWS KMS 정책은 DynamoDB가 복제본 A와 B 간의 복제를 위해 두 AWS KMS 키 모두에 액세스할 수 있도록 허용합니다. 각 계정의 DynamoDB 복제본에 연결된 AWS KMS 키는 다음 정책으로 업데이트해야 합니다.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "replication.dynamodb.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": [ "111122223333", "444455556666" ], "aws:SourceArn": [ "arn:aws:dynamodb:ap-east-1:111122223333:table/ReplicaA", "arn:aws:dynamodb:eu-south-1:444455556666:table/ReplicaB" ] } } } ] }