CMK を使用したクロスアカウント統合に関する考慮事項 - Amazon DynamoDB

CMK を使用したクロスアカウント統合に関する考慮事項

DynamoDB から Amazon Redshift に統合しようとすると、最初のアクションが Amazon Redshift から起動されます。適切なアクセス許可がないと、このアクションはサイレントに失敗する可能性があります。以下のセクションでは、このクロスアカウント統合に必要なアクセス許可について詳しく説明します。

必要な AWS KMS ポリシーとアクセス許可

例の中で以下のプレースホルダーを置き換えます。

  • REDSHIFT_ACCOUNT_ID: Amazon Redshift がホストされている AWS アカウント ID

  • DYNAMODB_ACCOUNT_ID: DynamoDB がホストされている AWS アカウント ID

  • REDSHIFT_ROLE_NAME: Amazon Redshift で使用されている IAM ロール名

  • REGION: リソースが存在している AWS リージョン

  • TABLE_NAME: DynamoDB テーブルの名前

  • KMS_KEY_ID: KMS キーの ID

DynamoDB アカウントの KMS キーポリシー

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

Amazon Redshift ロールの IAM ポリシー (Amazon Redshift アカウント内)

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

Amazon Redshift ロールの信頼関係

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

DynamoDB テーブルポリシー (リソースベースのポリシーを使用している場合)

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

重要な考慮事項

  1. KMS キーが DynamoDB テーブルと同じリージョンにあることを確認します。

  2. KMS キーは、AWS マネージドキーではなく、カスタマーマネージドキー (CMK) である必要があります。

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

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

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

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