

# 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 キーは、AWS マネージドキーではなく、カスタマーマネージドキー (CMK) である必要があります。

1. DynamoDB グローバルテーブルを使用している場合は、関連するすべてのリージョンのアクセス許可を設定します。

1. VPC エンドポイントまたは IP 範囲に基づいてアクセスを制限する条件ステートメントを追加することを検討します。

1. セキュリティを強化するには、`aws:PrincipalOrgID` 条件を使用して組織へのアクセスを制限することを検討します。

1. CloudTrail メトリクスと CloudWatch メトリクスを通じて KMS キーの使用状況をモニタリングします。