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

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

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

所需的 Amazon KMS 角色和权限

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

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

  • 444455556666:托管 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 密钥策略

以下 Amazon KMS 密钥策略使得您可以在 DynamoDB 服务和 Amazon Redshift 服务之间启用跨账户访问。在此示例中,账户 444455556666 包含 DynamoDB 表和 Amazon 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 账户中)

以下 IAM 策略使得 Amazon Redshift 服务能够在跨账户场景中访问 DynamoDB 表及其关联的 Amazon KMS 加密密钥。在此示例中,账户 444455556666 包含 Amazon Redshift 服务需要访问的 DynamoDB 资源和 Amazon 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 角色的信任关系

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

DynamoDB 表策略(如果使用基于资源的策略)

以下基于资源的策略使得账户 111122223333 中的 Amazon Redshift 服务可以访问账户 444455556666 中的 DynamoDB 表和 DynamoDB Streams。将此策略附加到您的 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/*" ] } ] }

重要注意事项

  1. 确保 KMS 密钥与 DynamoDB 表位于同一区域。

  2. KMS 密钥必须是客户自主管理型密钥(CMK),而不是 Amazon 托管式密钥。

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

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

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

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