

# DynamoDB 다중 계정 글로벌 테이블
<a name="globaltables-MultiAccount"></a>

다중 계정 글로벌 테이블은 DynamoDB 테이블 데이터를 여러 AWS 리전 및 여러 AWS 계정에 자동으로 복제하여 복원력을 개선하고, 계정 수준에서 워크로드를 격리하고, 고유한 보안 및 거버넌스 제어를 적용합니다. 각 복제본 테이블은 개별 AWS 계정에 상주하므로 리전 및 계정 수준 모두에서 장애 격리가 가능합니다. 복제본을 AWS 조직 구조에 맞게 정렬할 수도 있습니다. 다중 계정 글로벌 테이블은 동일 계정 글로벌 테이블에 비해 추가 격리, 거버넌스 및 보안 이점을 제공합니다.

다중 계정 글로벌 테이블은 다음과 같은 이점을 제공합니다.
+ DynamoDB 테이블 데이터를 선택한 AWS 계정 및 리전 간에 자동으로 복제
+ 고유한 정책, 가드레일 및 규정 준수 경계가 있는 계정 간에 데이터를 복제하여 보안 및 거버넌스 강화
+ 복제본을 별도의 AWS 계정에 배치하여 운영 복원력 및 계정 수준 장애 격리 개선
+ 다중 계정 전략을 사용할 때 사업부 또는 소유권별로 워크로드 조정
+ 각 복제본을 해당 AWS 계정으로 청구하여 비용 어트리뷰션 간소화

자세한 내용은 [여러 AWS 계정 사용의 이점](https://docs.aws.amazon.com/whitepapers/latest/organizing-your-aws-environment/benefits-of-using-multiple-aws-accounts.html)을 참조하세요. 워크로드에 다중 계정 복제가 필요하지 않거나 로컬 재정의로 더 간단한 복제본 관리를 원하는 경우 동일한 계정 글로벌 테이블을 계속 사용할 수 있습니다.

[다중 리전 최종 일관성(MREC)](V2globaltables_HowItWorks.md#V2globaltables_HowItWorks.consistency-modes.mrec)을 사용하여 다중 계정 글로벌 테이블을 구성할 수 있습니다. [다중 리전 강력한 일관성(MRSC)](V2globaltables_HowItWorks.md#V2globaltables_HowItWorks.consistency-modes.mrsc)용으로 구성된 글로벌 테이블은 다중 계정 모델을 지원하지 않습니다.

**Topics**
+ [DynamoDB 글로벌 테이블 작동 방식](V2globaltables_MA_HowItWorks.md)
+ [자습서: 다중 계정 글로벌 테이블 생성](V2globaltables_MA.tutorial.md)
+ [DynamoDB 글로벌 테이블 보안](globaltables_MA_security.md)

# DynamoDB 글로벌 테이블 작동 방식
<a name="V2globaltables_MA_HowItWorks"></a>

다중 계정 글로벌 테이블은 DynamoDB 글로벌 테이블을 완전 관리형, 서버리스, 다중 리전 및 다중 활성 기능으로 확장하여 여러 AWS 계정에 걸쳐 확장합니다. 다중 계정 글로벌 테이블은 AWS 리전 및 계정 간에 데이터를 복제하여 동일한 계정 글로벌 테이블과 동일한 액티브-액티브 기능을 제공합니다. 복제본에 쓸 때 DynamoDB는 데이터를 다른 모든 복제본에 복제합니다.

동일 계정 글로벌 테이블과의 주요 차이점은 다음과 같습니다.
+ 다중 계정 복제는 다중 리전 최종 일관성(MREC) 글로벌 테이블에 대해 지원됩니다.
+ 단일 리전 테이블로 시작하는 경우에만 복제본을 추가할 수 있습니다. 기존의 동일 계정 글로벌 테이블을 다중 계정 설정으로 변환하는 것은 지원되지 않습니다. 마이그레이션하려면 새 다중 계정 글로벌 테이블을 생성하기 전에 기존 복제본을 삭제하여 단일 리전 테이블로 돌아가야 합니다.
+ 각 복제본은 별도의 AWS 계정에 있어야 합니다. *N*개의 복제본이 있는 다중 계정 글로벌 테이블의 경우 *N*개의 계정이 있어야 합니다.
+ 다중 계정 글로벌 테이블은 기본적으로 모든 복제본에서 통합 테이블 설정을 사용합니다. 모든 복제본은 동일한 구성(예: 처리량 모드 및 TTL)을 자동으로 공유하며, 동일한 계정 글로벌 테이블과 달리 이러한 설정은 복제본당 재정의할 수 없습니다.
+ 고객은 리소스 정책에서 DynamoDB 글로벌 테이블 서비스 위탁자에 복제 권한을 제공해야 합니다.

다중 계정 글로벌 테이블은 동일한 계정 글로벌 테이블과 동일한 기본 복제 기술을 사용합니다. 테이블 설정은 모든 리전 복제본에 자동으로 복제되며 고객은 복제본당 설정을 재정의하거나 사용자 지정할 수 없습니다. 이렇게 하면 동일한 글로벌 테이블에 참여하는 여러 AWS 계정에서 일관된 구성과 예측 가능한 동작이 보장됩니다.

DynamoDB 글로벌 테이블의 설정은 테이블의 동작 방식과 리전 간에 데이터가 복제되는 방식을 정의합니다. 이러한 설정은 테이블을 생성할 때 또는 새 리전 복제본을 추가할 때 DynamoDB 컨트롤 플레인 API를 통해 구성됩니다.

다중 계정 글로벌 테이블을 생성할 때 고객은 각 리전 복제본에 대해 `GlobalTableSettingsReplicationMode = ENABLED`를 설정해야 합니다. 이렇게 하면 한 리전에서 수행된 구성 변경 사항이 글로벌 테이블에 참여하는 다른 모든 리전에 자동으로 전파됩니다.

테이블 생성 후 설정 복제를 활성화할 수 있습니다. 이는 원래 테이블이 리전 테이블로 생성되고 나중에 다중 계정 글로벌 테이블로 업그레이드되는 시나리오를 지원합니다.

**동기화된 설정**

다음 테이블 설정은 다중 계정 글로벌 테이블의 모든 복제본 간에 항상 동기화됩니다.

**참고**  
동일 계정 글로벌 테이블과 달리 다중 계정 글로벌 테이블은 이러한 설정에 대해 리전별 재정의를 허용하지 않습니다. 유일한 예외는 읽기 자동 크기 조정 정책(테이블 및 GSI)에 대한 재정의가 별도의 외부 리소스이므로 허용된다는 것입니다.
+ 용량 모드(프로비저닝된 용량 또는 온디맨드)
+ 테이블 프로비저닝된 읽기 및 쓰기 용량
+ 테이블 읽기 및 쓰기 오토 스케일링
+ 로컬 보조 인덱스(LSI) 정의
+ 글로벌 보조 인덱스(GSI) 정의
+ GSI 프로비저닝된 읽기 및 쓰기 용량
+ GSI 테이블 읽기 및 쓰기 오토 스케일링
+ MREC 모드의 스트림 정의
+ TTL(Time To Live)
+ 웜 처리량
+ 온디맨드 최대 읽기 및 쓰기 처리량

**비동기화 설정**

다음 설정은 복제본 간에 동기화되지 않으므로 각 리전의 각 복제본 테이블에 대해 독립적으로 구성해야 합니다.
+ 테이블 클래스
+ 서버 측 암호화(SSE) 유형
+ 시점 복구
+ 서버 측 암호화(SSE) KMS 키 ID
+ 삭제 방지
+ Kinesis Data Streams(KDSD)
+ Tags
+ 리소스 정책
+ 테이블 Cloudwatch-Contributor Insights(CCI)
+ GSI Cloudwatch-Contributor Insights(CCI)

## 모니터링
<a name="V2globaltables_MA_HowItWorks.monitoring"></a>

다중 리전 최종 일관성(MREC)을 위해 구성된 글로벌 테이블은 [`ReplicationLatency`](metrics-dimensions.md#ReplicationLatency) 지표를 CloudWatch에 게시합니다. 이 지표는 하나의 복제본 테이블에 항목이 쓰인 시점부터 해당 항목이 글로벌 테이블의 다른 복제본에 나타날 때까지 걸린 시간을 추적합니다. `ReplicationLatency`는 밀리초 단위로 표현되며 글로벌 테이블의 모든 소스 및 대상 리전 쌍마다 내보내집니다.

일반적인 `ReplicationLatency` 값은 선택한 AWS 리전 간의 거리와 워크로드 유형 및 처리량과 같은 기타 변수에 따라 달라집니다. 예를 들어 미국 서부(캘리포니아 북부)(us-west-1) 리전의 소스 복제본은 아프리카(케이프타운)(af-south-1) 리전에 비해 미국 서부(오리건)(us-west-2) 리전에 대한 `ReplicationLatency`가 낮습니다.

`ReplicationLatency` 값이 상승하면 한 복제본의 업데이트 내용이 다른 복제본 테이블로 시기 적절하게 전파되지 않는다는 것을 나타낼 수 있습니다. 이 경우 애플리케이션의 읽기 및 쓰기 작업을 다른 AWS 리전으로 일시적으로 리디렉션할 수 있습니다.

**다중 계정 글로벌 테이블의 복제 지연 시간 문제 처리**

복제본 테이블의 고객 유도 문제로 인해 `ReplicationLatency`가 3시간을 초과하면 DynamoDB는 고객에게 기본 문제를 해결하도록 요청하는 알림을 보냅니다. 복제를 방해할 수 있는 일반적인 고객 유발 문제는 다음과 같습니다.
+ 복제본 테이블의 리소스 정책에서 필요한 권한 제거
+ 다중 계정 글로벌 테이블의 복제본을 호스팅하는 AWS 리전 옵트아웃
+ 데이터 복호화에 필요한 테이블의 AWS KMS 키 권한 거부

DynamoDB는 복제 지연 시간이 증가한 후 3시간 이내에 초기 알림을 보낸 다음 문제가 해결되지 않은 상태로 유지되면 20시간 후에 두 번째 알림을 보냅니다. 필요한 기간 내에 문제가 해결되지 않으면 DynamoDB는 글로벌 테이블에서 복제본의 연결을 자동으로 해제합니다. 그러면 영향을 받는 복제본이 리전 테이블로 변환됩니다.

# 자습서: 다중 계정 글로벌 테이블 생성
<a name="V2globaltables_MA.tutorial"></a>

이 섹션에서는 여러 AWS 계정에 걸쳐 있는 DynamoDB 글로벌 테이블을 생성하기 위한 단계별 지침을 제공합니다.

## DynamoDB 콘솔을 사용하여 다중 계정 글로벌 테이블 생성
<a name="create-ma-gt-console"></a>

다음 단계에 따라 AWS Management Console을 사용하여 다중 계정 글로벌 테이블을 생성합니다. 다음 예제에서는 미국의 복제본 테이블로 글로벌 테이블을 만듭니다.

1. AWS Management Console에 로그인하고 첫 번째 계정(예: *111122223333*)에 대해 DynamoDB 콘솔([https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/))을 엽니다.

1. 이 예제에서는 탐색 모음의 리전 선택기에서 **미국 동부(오하이오)**를 선택합니다.

1. 콘솔 왼쪽의 탐색 창에서 **테이블**을 선택합니다.

1. **Create Table(테이블 생성)**을 선택합니다.

1. **테이블 생성** 페이지에서 다음을 수행합니다.

   1. **테이블 이름**에 **MusicTable**을(를) 입력합니다.

   1. **파티션 키(Partition key)**에 **Artist**를 입력합니다.

   1. **정렬 키**에는 **SongTitle**을 입력합니다.

   1. 기타 기본 설정을 유지하고 **테이블 생성**을 선택합니다.

1. 테이블에 다음 리소스 정책 추가

------
#### [ JSON ]

****  

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

------

1. 이 최신 테이블은 새로운 전역 테이블에서 첫 번째 복제본 테이블 역할을 합니다. 이는 나중에 추가하는 다른 복제본 테이블의 프로토타입입니다.

1. 테이블이 **활성화**될 때까지 대기합니다. 새로 생성된 테이블의 경우 **글로벌 테이블** 탭에서 **설정 복제**로 이동하여 **활성화**를 클릭합니다.

1. 이 계정(여기에서는 *111122223333*)에서 로그아웃합니다.

1. AWS Management Console에 로그인하고 두 번째 계정(예: *444455556666*)에 대해 DynamoDB 콘솔([https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/))을 엽니다.

1. 이 예제에서는 탐색 모음의 리전 선택기에서 **미국 동부(버지니아 북부)**를 선택합니다.

1. 콘솔은 선택한 리전에 동일한 이름의 테이블이 존재하지 않는지 확인합니다. 이름이 동일한 테이블이 있는 경우 해당 리전에서 새 복제본 테이블을 생성하려면 먼저 기존 테이블을 삭제해야 합니다.

1. **테이블 생성** 근처의 드롭다운에서 **다른 계정에서 생성**을 선택합니다.

1. **다른 계정에서 테이블 생성** 페이지에서 다음을 수행합니다.

   1. 소스 테이블에 대한 테이블 ARN으로 **arn:aws:dynamodb:us-east-2:*111122223333*:table/MusicTable**을 추가합니다.

   1. **복제본 테이블 ARN**에서 소스 테이블의 ARN **arn:aws:dynamodb:us-east-2:*111122223333*:table/MusicTable**을 다시 추가합니다. 다중 계정 글로벌 테이블의 일부로 이미 여러 복제본이 있는 경우 모든 기존 복제본을 ReplicaTableARN에 추가해야 합니다.

   1. 기타 기본 설정을 유지하고 **제출**을 선택합니다.

1. 음악 테이블의 **글로벌 테이블** 탭 및 다른 복제본 테이블의 글로벌 테이블 탭은 테이블이 여러 리전에서 복제되었음을 나타냅니다.

1. 복제를 테스트하려면 다음을 수행합니다.

   1. 이 테이블에 복제본이 있는 모든 리전을 사용할 수 있습니다.

   1. **테이블 항목 탐색**을 선택합니다.

   1. **항목 생성**을 선택합니다.

   1. **Artist**에 **item\$11**을 입력하고 **SongTitle**에는 **Song Value 1**을 입력합니다.

   1. **항목 생성**을 선택합니다.

   1. 다른 리전으로 전환하여 복제를 확인합니다.

   1. Music 테이블에 생성한 항목이 포함되어 있는지 확인합니다.

## AWS CLI를 사용하여 다중 계정 글로벌 테이블 생성
<a name="ma-gt-cli"></a>

다음 예제에서는 AWS CLI를 사용하여 다중 계정 글로벌 테이블을 생성하는 방법을 보여줍니다. 이 예제에서는 교차 계정 복제를 설정하기 위한 전체 워크플로를 보여줍니다.

------
#### [ CLI ]

다음 AWS CLI 명령을 사용하여 교차 계정 복제를 사용하는 다중 계정 글로벌 테이블을 생성합니다.

```
# STEP 1: Setting resource policy for the table in account 111122223333

cat > /tmp/source-resource-policy.json << 'EOF'
{
    "Version": "2012-10-17", 		 	 	 
    "Statement": [
        {
            "Sid": "DynamoDBActionsNeededForSteadyStateReplication",
            "Effect": "Allow",
            "Action": [
                "dynamodb:ReadDataForReplication",
                "dynamodb:WriteDataForReplication",
                "dynamodb:ReplicateSettings"
            ],
            "Resource": "arn:aws:dynamodb:us-east-2:111122223333:table/MusicTable",
            "Principal": {"Service": ["replication.dynamodb.amazonaws.com"]},
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": ["444455556666","111122223333"],
                    "aws:SourceArn": [
                        "arn:aws:dynamodb:us-east-1:444455556666:table/MusicTable",
                        "arn:aws:dynamodb:us-east-2:111122223333:table/MusicTable"
                    ]
                }
            }
        },
        {
            "Sid": "AllowTrustedAccountsToJoinThisGlobalTable",
            "Effect": "Allow",
            "Action": [
                "dynamodb:AssociateTableReplica"
            ],
            "Resource": "arn:aws:dynamodb:us-east-2:111122223333:table/MusicTable",
            "Principal": {"AWS": ["444455556666"]}
        }
    ]
}
EOF

# Step 2: Create a new table (MusicTable) in US East (Ohio), 
#   with DynamoDB Streams enabled (NEW_AND_OLD_IMAGES),
#   and Settings Replication ENABLED on the account 111122223333

aws dynamodb create-table \
    --table-name MusicTable \
    --attribute-definitions \
        AttributeName=Artist,AttributeType=S \
        AttributeName=SongTitle,AttributeType=S \
    --key-schema \
        AttributeName=Artist,KeyType=HASH \
        AttributeName=SongTitle,KeyType=RANGE \
    --billing-mode PAY_PER_REQUEST \
    --stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \
    --global-table-settings-replication-mode ENABLED \
    --resource-policy file:///tmp/source-resource-policy.json \
    --region us-east-2 


# Step 3: Creating replica table in account 444455556666

# Resource policy for account 444455556666
cat > /tmp/dest-resource-policy.json << 'EOF'
{
    "Version": "2012-10-17", 		 	 	 
    "Statement": [
        {
            "Sid": "DynamoDBActionsNeededForSteadyStateReplication",
            "Effect": "Allow",
            "Action": [
                "dynamodb:ReadDataForReplication",
                "dynamodb:WriteDataForReplication",
                "dynamodb:ReplicateSettings"
            ],
            "Resource": "arn:aws:dynamodb:us-east-1:444455556666:table/MusicTable",
            "Principal": {"Service": ["replication.dynamodb.amazonaws.com"]},
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": ["444455556666","111122223333"],
                    "aws:SourceArn": [
                        "arn:aws:dynamodb:us-east-1:444455556666:table/MusicTable",
                        "arn:aws:dynamodb:us-east-2:111122223333:table/MusicTable"
                    ]
                }
            }
        }
    ]
}
EOF

# Execute the replica table creation
aws dynamodb create-table \
    --table-name MusicTable \
    --global-table-source-arn "arn:aws:dynamodb:us-east-2:111122223333:table/MusicTable" \
    --resource-policy file:///tmp/dest-resource-policy.json \
    --global-table-settings-replication-mode ENABLED \
    --region us-east-1

# Step 4: View the list of replicas created using describe-table
aws dynamodb describe-table \
    --table-name MusicTable \
    --region us-east-2 \
    --query 'Table.{TableName:TableName,TableStatus:TableStatus,MultiRegionConsistency:MultiRegionConsistency,Replicas:Replicas[*].{Region:RegionName,Status:ReplicaStatus}}'

# Step 5: To verify that replication is working, add a new item to the Music table in US East (Ohio)
aws dynamodb put-item \
    --table-name MusicTable \
    --item '{"Artist": {"S":"item_1"},"SongTitle": {"S":"Song Value 1"}}' \
    --region us-east-2

# Step 6: Wait for a few seconds, and then check to see whether the item has been 
# successfully replicated to US East (N. Virginia) and Europe (Ireland)
aws dynamodb get-item \
    --table-name MusicTable \
    --key '{"Artist": {"S":"item_1"},"SongTitle": {"S":"Song Value 1"}}' \
    --region us-east-1

aws dynamodb get-item \
    --table-name MusicTable \
    --key '{"Artist": {"S":"item_1"},"SongTitle": {"S":"Song Value 1"}}' \
    --region us-east-2

# Step 7: Delete the replica table in US East (N. Virginia) Region
aws dynamodb delete-table \
    --table-name MusicTable \
    --region us-east-1

# Clean up: Delete the primary table
aws dynamodb delete-table \
    --table-name MusicTable \
    --region us-east-2
```

------

# DynamoDB 글로벌 테이블 보안
<a name="globaltables_MA_security"></a>

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

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

## 복제에 대한 서비스 위탁자 권한 부여
<a name="globaltables_MA_service_principal"></a>

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

다음 서비스 위탁자 권한은 교차 계정 복제에 필수적입니다.
+ `dynamodb:ReadDataForReplication`은 복제 목적으로 데이터를 읽을 수 있는 기능을 부여합니다. 이 권한을 사용하면 한 복제본의 변경 사항을 읽고 다른 복제본으로 전파할 수 있습니다.
+ `dynamodb:WriteDataForReplication`은 복제된 데이터를 대상 테이블에 쓸 수 있도록 허용합니다. 이 권한을 사용하면 글로벌 테이블의 모든 복제본에서 변경 사항을 동기화할 수 있습니다.
+ `dynamodb:ReplicateSettings`를 사용하면 복제본 간에 테이블 설정을 동기화하여 참여하는 모든 테이블에서 일관된 구성을 제공할 수 있습니다.

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

## 다중 계정 글로벌 테이블에 대한 서비스 연결 역할
<a name="globaltables_MA_service_linked_roles"></a>

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

### 설정 관리 서비스 연결 역할
<a name="globaltables_MA_settings_management_slr"></a>

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 서비스 연결 역할 오토 스케일링
<a name="globaltables_MA_autoscaling_slr"></a>

프로비저닝된 용량 모드에 대한 글로벌 테이블을 구성할 때 글로벌 테이블에 대한 오토 스케일링도 구성해야 합니다. DynamoDB 오토 스케일링은 AWS Application Auto Scaling 서비스를 사용하여 글로벌 테이블 복제본에서 프로비저닝된 처리량 용량을 동적으로 조정합니다. Application Auto Scaling 서비스는 이름이 [AWSServiceRoleForApplicationAutoScaling\$1DynamoDBTable](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-service-linked-roles.html)인 서비스 연결 역할(SLR)을 생성합니다. 이 서비스 연결 역할은 DynamoDB 테이블에 대한 오토 스케일링을 처음 구성할 때 AWS 계정에 자동으로 생성됩니다. 이를 통해 Application Auto Scaling은 프로비저닝된 테이블 용량을 관리하고 CloudWatch 경보를 생성할 수 있습니다.

복제본에 리소스 기반 정책을 적용할 때는 [AWSApplicationAutoscalingDynamoDBTablePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSApplicationAutoscalingDynamoDBTablePolicy.html)에 정의된 권한이 Application Auto Scaling SLR 위탁자를 거부하지 않는지 확인하세요. 이로 인해 오토 스케일링 기능이 중단될 수 있기 때문입니다.

## 글로벌 테이블이 AWS IAM을 사용하는 방법
<a name="globaltables_MA_iam"></a>

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

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

다음은 아래 섹션에서 다루는 단계별 주제입니다.
+ 다중 계정 글로벌 테이블 생성 및 복제본 추가
+ 다중 계정 글로벌 테이블 업데이트
+ 글로벌 테이블 삭제 및 복제본 제거

### 글로벌 테이블 생성 및 복제본 추가
<a name="globaltables_MA_creating"></a>

#### 글로벌 테이블 생성 권한
<a name="globaltables_MA_creating_permissions"></a>

리전 테이블에 새 복제본을 추가하여 다중 계정 글로벌 테이블 또는 기존 다중 계정 글로벌 테이블을 구성하는 경우, 작업을 수행하는 IAM 위탁자는 모든 기존 구성원의 승인을 받아야 합니다. 복제본 추가가 성공하려면 모든 기존 멤버가 테이블 정책에서 다음 권한을 부여해야 합니다.
+ `dynamodb:AssociateTableReplica` - 이 권한을 통해 테이블을 글로벌 테이블 설정에 조인할 수 있습니다. 이는 복제 관계의 초기 설정을 활성화하는 기본 권한입니다.

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

#### 글로벌 테이블 생성을 위한 IAM 정책 예제
<a name="globaltables_MA_creating_examples"></a>

##### 2개 복제본 설정에 대한 IAM 정책 예제
<a name="globaltables_MA_2replica_example"></a>

다중 계정 글로벌 테이블의 설정은 보안 복제를 제공하는 특정 권한 부여 흐름을 따릅니다. 고객이 두 개의 복제본이 있는 글로벌 테이블을 설정하려는 실제 시나리오를 살펴보면서 실제로 어떻게 작동하는지 살펴보겠습니다. 첫 번째 복제본(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"
                    ]
                }
            }
        }
    ]
}
```

------

##### 3개 복제본 설정에 대한 IAM 정책 예제
<a name="globaltables_MA_3replica_example"></a>

이 설정에서는 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"
                    ]
                }
            }
        }
    ]
}
```

------

### 다중 계정 글로벌 테이블 업데이트
<a name="globaltables_MA_updating"></a>

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` 오류로 실패합니다.

### 글로벌 테이블 삭제 및 복제본 제거
<a name="globaltables_MA_deleting"></a>

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

#### 글로벌 테이블 삭제 및 복제본 제거 권한
<a name="globaltables_MA_deleting_permissions"></a>

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

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

## 글로벌 테이블이 AWS KMS를 사용하는 방법
<a name="globaltables_MA_kms"></a>

모든 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 정책
<a name="globaltables_MA_kms_example"></a>

이 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"
                ]
            }
        }
      }
   ]
 }
```

------