

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# DynamoDB 多帳戶全域資料表
<a name="globaltables-MultiAccount"></a>

多帳戶全域資料表會自動跨多個 AWS 區域和多個 AWS 帳戶複寫 DynamoDB 資料表資料，以改善彈性、隔離帳戶層級的工作負載，以及套用不同的安全和控管控制。每個複本資料表都位於不同的 AWS 帳戶中，在區域和帳戶層級啟用故障隔離。您也可以將複本與您的 AWS 組織結構對齊。相較於相同帳戶全域資料表，多帳戶全域資料表提供額外的隔離、控管和安全性優勢。

多帳戶全域資料表提供下列優點：
+ 在您選擇的 AWS 帳戶和區域中自動複寫 DynamoDB 資料表資料
+ 使用不同的政策、護欄和合規界限跨帳戶複寫資料，以增強安全性和管理
+ 將複本放在不同的帳戶中，以改善操作彈性和 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 控制平面 APIs 進行設定。

建立多帳戶全域資料表時，客戶必須為每個區域複本設定 `GlobalTableSettingsReplicationMode = ENABLED` 。這可確保在一個區域中所做的組態變更會自動傳播到參與全域資料表的所有其他區域。

您可以在建立資料表後啟用設定複寫。這支援將資料表最初建立為區域資料表，稍後升級至多帳戶全域資料表的情況。

**同步設定**

下表設定一律會同步多帳戶全域資料表中所有複本：

**注意**  
與相同帳戶全域資料表不同，多帳戶全域資料表不允許對這些設定進行每個區域覆寫。唯一的例外是，允許覆寫讀取自動擴展政策 （資料表和 GSIs)，因為它們是單獨的外部資源。
+ 容量模式 (佈建容量或隨需)
+ 資料表佈建的讀取和寫入容量
+ 資料表讀取和寫入自動擴展
+ 本機次要索引 (LSI) 定義
+ 全域次要索引 (GSI) 定義
+ GSI 佈建的讀取和寫入容量
+ GSI 讀取和寫入自動擴展
+ MREC 模式中的 Streams 定義
+ 存留時間 (TTL)
+ 暖輸送量
+ 隨需最大讀取和寫入輸送量

**非同步設定**

下列設定不會在複本之間同步，且必須針對每個區域中的每個複本資料表獨立設定。
+ 資料表類別
+ 伺服器端加密 (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 區域之間的距離，以及其他變數，例如工作負載類型和輸送量。例如，相較於非洲 (開普敦) (af-south-1) 區域，美國西部 (加利佛尼亞北部) (us-west-1) 區域的來源複本到美國西部 (奧勒岡) (us-west-2) 區域的 `ReplicationLatency` 較低。

`ReplicationLatency` 值上升可能表示，某個複本的更新未及時傳播到其他複本資料表。在此情況下，您可以暫時將應用程式的讀取和寫入活動重新導向至不同的 AWS 區域。

**處理多帳戶全域資料表中的複寫延遲問題**

如果由於客戶在複本資料表上引發的問題而`ReplicationLatency`超過 3 小時，DynamoDB 會傳送通知，要求客戶解決基礎問題。可能阻止複寫的常見客戶引發問題包括：
+ 從複本資料表的資源政策中移除必要的許可
+ 選擇退出託管多帳戶全域資料表複本的 AWS 區域
+ 拒絕解密資料所需的資料表 AWS KMS 金鑰許可

DynamoDB 會在複寫延遲升高的 3 小時內傳送初始通知，然後在 20 小時後傳送第二次通知，如果問題仍未解決。如果未在所需的時段內修正問題，DynamoDB 會自動取消複本與全域資料表的關聯。受影響的複本接著會轉換為區域資料表。

# 教學課程：建立多帳戶全域資料表
<a name="V2globaltables_MA.tutorial"></a>

本節提供step-by-step說明。 DynamoDB AWS 

## 使用 DynamoDB 主控台建立多帳戶全域資料表
<a name="create-ma-gt-console"></a>

請依照下列步驟，使用 建立多帳戶全域資料表 AWS 管理主控台。下列範例會在美國建立具有複本資料表的全域資料表。

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/)：// 開啟第一個帳戶的 DynamoDB 主控台 （例如 *111122223333*)。

1. 在此範例中，請從導覽列的區域選擇器選擇**美國東部 (俄亥俄)**。

1. 在主控台左側的導覽窗格中，選擇 **Tables** (資料表)。

1. 選擇 **Create Table** (建立資料表)。

1. 在**建立資料表**頁面上：

   1. 對於 **Table name** (資料表名稱)，請輸入 **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 管理主控台 ，並在 [https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/)：// 開啟第二個帳戶的 DynamoDB 主控台 （例如 *444455556666*)。

1. 在此範例中，從導覽列的區域選擇器中選擇**美國東部 （維吉尼亞北部）**。

1. 主控台會確認選取區域中沒有同名的資料表。若有同名的資料表，您必須先刪除現有的資料表，才可在該區域中建立新的複本資料表。

1. 在**建立資料表**附近的下拉式清單中，選擇**從另一個帳戶建立**

1. 在**從另一個帳戶建立資料表**頁面上：

   1. 新增 **arn:aws:dynamodb:us-east-2:*111122223333*:table/MusicTable**做為來源資料表的資料表 Arn。

   1. 在**複本資料表 ARNs** 中，再次新增來源資料表的 ARN**arn:aws:dynamodb:us-east-2:*111122223333*:table/MusicTable**。如果多帳戶全域資料表中已有多個複本，您必須將每個現有複本新增至ReplicaTableARN。

   1. 保留其他預設設定，然後選擇**提交**。

1. 音樂資料表 **（以及任何其他複本資料表） 的全域**資料表索引標籤會顯示資料表已在多個區域中複寫。

1. 若要測試複寫：

   1. 您可以使用此資料表存在複本的任何區域

   1. 選擇**探索資料表項目**。

   1. 選擇 **Create item** (建立項目)。

   1. 為 **Artist** 輸入 **item\$11**，為 **SongTitle** 輸入 **Song Value 1**。

   1. 選擇 **Create item** (建立項目)。

   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) 身分政策和以資源為基礎的政策。本主題說明如何使用 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` 許可來控制，但我們也依賴服務連結角色 (SLRs) 來管理特定跨帳戶跨區域複寫和自動擴展功能。這些角色每個 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 主體，因為這可能會干擾設定管理，如果複本或 GSIs 之間的輸送量不相符，則可能會影響複寫。如果您拒絕必要的 SLR 許可，對受影響複本的複寫和複寫可能會停止，而複本資料表狀態會變更為 `REPLICATION_NOT_AUTHORIZED`。對於多帳戶全域資料表，如果複本保持 `REPLICATION_NOT_AUTHORIZED` 狀態超過 20 小時，則複本會不可復原地轉換為單一區域 DynamoDB 資料表。SLR 具有下列許可：
+ `application-autoscaling:DeleteScalingPolicy`
+ `application-autoscaling:DescribeScalableTargets`
+ `application-autoscaling:DescribeScalingPolicies`
+ `application-autoscaling:DeregisterScalableTarget`
+ `application-autoscaling:PutScalingPolicy`
+ `application-autoscaling:RegisterScalableTarget`

### 自動擴展服務連結角色
<a name="globaltables_MA_autoscaling_slr"></a>

設定佈建容量模式的全域資料表時，必須為全域資料表設定自動擴展。DynamoDB Auto Scaling 服務會使用 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 和資料表名稱值。

以下是我們在下列各節涵蓋的step-by-step主題：
+ 建立多帳戶全域資料表並新增複本
+ 更新多帳戶全域資料表
+ 刪除全域資料表和移除複本

### 建立全域資料表並新增複本
<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 區域中的帳戶 A，而第二個複本 (ReplicaB) 位於 eu-south-1 區域中的帳戶 B。
+ 在來源帳戶 （帳戶 A) 中，程序會從建立主要複本資料表開始。帳戶管理員必須將資源型政策連接至此資料表，以明確授予目的地帳戶 （帳戶 B) 執行關聯的必要許可。此政策也會授權 DynamoDB 複寫服務執行必要的複寫動作。
+ 目的地帳戶 （帳戶 B) 遵循類似的程序，方法是在建立複本時連接對應的資源型政策，並參考要用來建立複本的來源資料表 ARN。此政策會鏡像帳戶 A 授予的許可，建立信任的雙向關係。在建立複寫之前，DynamoDB 會驗證這些跨帳戶許可，以確認已具備適當的授權。

若要建立此設定：
+ 帳戶 A 的管理員必須先將資源型政策連接至ReplicaA。此政策明確授予帳戶 B 和 DynamoDB 複寫服務必要的許可。
+ 同樣地，帳戶 B 的管理員必須將相符政策連接至ReplicaB，並在建立資料表呼叫中將對應的許可反向授予帳戶 A，以建立參考複本 A 做為來源資料表的複本 B。

------
#### [ 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>

在此設定中，帳戶 A、帳戶 ReplicaB 和帳戶 C 分別有 3 個複本ReplicaA A、複本 B 和ReplicaC C。複本 A 是第一個複本，其開頭為區域資料表，然後將ReplicaB 和ReplicaC 新增至其中。
+ 帳戶 A 的管理員必須先將資源型政策連接至ReplicaA，以允許複寫所有成員，並允許帳戶 B 和帳戶 C 的 IAM 主體新增複本。

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

------
+ 帳戶 B 的管理員必須新增指向ReplicaA做為來源的複本 （複本 B)。複本 B 具有下列政策，允許所有成員之間複寫，並允許帳戶 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" ] }
        }
    ]
}
```

------
+ 最後，帳戶 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`

您也可以更新其他全域資料表組態，例如自動擴展政策和存留時間設定。這些額外的更新操作需要下列許可：

若要使用 `UpdateTimeToLive` API 更新存留時間設定，您必須在包含複本的所有區域中對資料表資源擁有下列許可： `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 受管金鑰。

使用 CMKs多帳戶全域資料表需要每個複本的金鑰政策，才能授予 DynamoDB 複寫服務主體 (`replication.dynamodb.amazonaws.com`) 存取金鑰以進行複寫和設定管理的許可。需要以下許可：
+ `kms:Decrypt`
+ `kms:ReEncrypt*`
+ `kms:GenerateDataKey*`
+ `kms:DescribeKey`

**Important (重要)**

DynamoDB 需要存取複本的加密金鑰才能刪除複本。如果您想要停用或刪除用於加密複本的客戶受管金鑰，因為您要刪除複本，您應該先刪除複本，等待從複寫群組中移除資料表，方法是呼叫其中一個複本中的描述，然後停用或刪除金鑰。

如果您停用或撤銷 DynamoDB 對用於加密複本之客戶受管金鑰的存取權，複本的複寫將停止，複本狀態將變更為 `INACCESSIBLE_ENCRYPTION_CREDENTIALS`。如果複本保持 `INACCESSIBLE_ENCRYPTION_CREDENTIALS` 狀態超過 20 小時，複本會不可復原地轉換為單一區域 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"
                ]
            }
        }
      }
   ]
 }
```

------