

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

# 使用 CMK 時的跨帳戶整合考量
<a name="cross-account-integration-considerations"></a>

當您嘗試從 DynamoDB 整合到 Amazon Redshift 時，初始動作會從 Amazon Redshift 啟動。如果沒有適當的許可，此動作可能會導致靜默失效。下列各節詳細說明此跨帳戶整合所需的許可。

## 必要的 AWS KMS 政策和許可
<a name="required-kms-policies-permissions"></a>

取代下列範例中的預留位置：
+ `111122223333`：託管 Amazon Redshift 的 AWS 帳戶 ID
+ `444455556666`：託管 DynamoDB 的 AWS 帳戶 ID
+ `REDSHIFT_ROLE_NAME`：Amazon Redshift 使用的 IAM 角色名稱
+ `REGION`： AWS 區域 您的資源所在的 。
+ `TABLE_NAME`：DynamoDB 資料表的名稱
+ `KMS_KEY_ID`：KMS 金鑰的 ID

### DynamoDB 帳戶中的 KMS 金鑰政策
<a name="kms-key-policy-dynamodb-account"></a>

下列 AWS KMS 金鑰政策可啟用 DynamoDB 和 Amazon Redshift 服務之間的跨帳戶存取。在此範例中，帳戶 444455556666 包含 DynamoDB 資料表和 AWS KMS 金鑰，而帳戶 111122223333 包含需要存取以解密資料的 Amazon Redshift 叢集。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Enable IAM User Permissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::444455556666:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Sid": "Allow Redshift to use the key",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/REDSHIFT_ROLE_NAME"
            },
            "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:GenerateDataKey",
                "kms:GenerateDataKeyWithoutPlaintext"
            ],
            "Resource": "*"
        }
    ]
}
```

------

### Amazon Redshift 角色的 IAM 政策 (在 Amazon Redshift 帳戶中)
<a name="iam-policy-redshift-role"></a>

下列 IAM 政策允許 Amazon Redshift 服務在跨帳戶案例中存取 DynamoDB 資料表及其相關聯的 AWS KMS 加密金鑰。在此範例中，帳戶 444455556666 包含 Amazon Redshift 服務需要存取的 DynamoDB 資源和 AWS KMS 金鑰。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowDynamoDBAccess",
            "Effect": "Allow",
            "Action": [
                "dynamodb:DescribeTable",
                "dynamodb:BatchGetItem",
                "dynamodb:Scan",
                "dynamodb:Query",
                "dynamodb:BatchGetItem",
                "dynamodb:GetItem",
                "dynamodb:GetRecords",
                "dynamodb:GetShardIterator",
                "dynamodb:DescribeStream",
                "dynamodb:ListStreams"
            ],
            "Resource": [
                "arn:aws:dynamodb:*:444455556666:table/TABLE_NAME",
                "arn:aws:dynamodb:*:444455556666:table/TABLE_NAME/stream/*"
            ]
        },
        {
            "Sid": "AllowKMSAccess",
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:GenerateDataKey",
                "kms:GenerateDataKeyWithoutPlaintext"
            ],
            "Resource": "arn:aws:kms:us-east-1:444455556666:key/KMS_KEY_ID"
        }
    ]
}
```

------

### Amazon Redshift 角色的信任關係
<a name="trust-relationship-redshift-role"></a>

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

****  

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

------

### DynamoDB 資料表政策 (如果使用資源型政策)
<a name="dynamodb-table-policy"></a>

下列資源型政策允許帳戶 111122223333 中的 Amazon Redshift 服務存取帳戶 444455556666 中的 DynamoDB 資料表和串流。將此政策連接至您的 DynamoDB 資料表，以啟用跨帳戶存取。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowRedshiftAccess",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/REDSHIFT_ROLE_NAME"
            },
            "Action": [
                "dynamodb:DescribeTable",
                "dynamodb:BatchGetItem",
                "dynamodb:Scan",
                "dynamodb:Query",
                "dynamodb:BatchGetItem",
                "dynamodb:GetItem",
                "dynamodb:GetRecords",
                "dynamodb:GetShardIterator",
                "dynamodb:DescribeStream",
                "dynamodb:ListStreams"
            ],
            "Resource": [
                "arn:aws:dynamodb:*:444455556666:table/TABLE_NAME",
                "arn:aws:dynamodb:*:444455556666:table/TABLE_NAME/stream/*"
            ]
        }
    ]
}
```

------

## 重要考量
<a name="important-considerations"></a>

1. 確保 KMS 金鑰與您的 DynamoDB 資料表位於相同的區域。

1. KMS 金鑰必須是客戶受管金鑰 (CMK)，而不是 AWS 受管金鑰。

1. 如果您使用的是 DynamoDB 全域資料表，請設定所有相關區域的許可。

1. 考慮新增條件陳述式，以根據 VPC 端點或 IP 範圍限制存取。

1. 為了增強安全性，請考慮使用 `aws:PrincipalOrgID` 條件來限制對組織的存取。

1. 透過 CloudTrail 和 CloudWatch 指標監控 KMS 金鑰用量。