与 CMK 跨账户集成考虑的注意事项 - Amazon DynamoDB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

与 CMK 跨账户集成考虑的注意事项

当尝试从 DynamoDB 集成到 Amazon Redshift 时,初始操作将从 Amazon Redshift 启动。如果没有适当的权限,此操作可能会导致静默失败。以下各节详细介绍此跨账户集成所需的权限。

所需的 Amazon KMS 角色和权限

替换示例中的以下占位符:

  • REDSHIFT_ACCOUNT_ID:托管 Amazon Redshift 的 Amazon Web Services 账户 ID

  • DYNAMODB_ACCOUNT_ID:托管 DynamoDB 的 Amazon Web Services 账户 ID

  • REDSHIFT_ROLE_NAME:Amazon Redshift 使用的 IAM 角色名称

  • REGION:您的资源所在的 Amazon Web Services 区域

  • 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 密钥必须是客户自主管理型密钥(CMK),而不是 Amazon 托管式密钥。

  3. 如果使用的是 DynamoDB 全局表,请为所有相关区域配置权限。

  4. 考虑添加条件语句以根据 VPC 端点或 IP 范围限制访问权限。

  5. 为了增强安全性,请考虑使用 aws:PrincipalOrgID 条件来限制组织的访问权限。

  6. 通过 CloudTrail 和 CloudWatch 指标监控 KMS 密钥使用情况。