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/*"
]
}
]
}
重要注意事项
-
确保 KMS 密钥与 DynamoDB 表位于同一区域。
-
KMS 密钥必须是客户自主管理型密钥(CMK),而不是 Amazon 托管式密钥。
-
如果使用的是 DynamoDB 全局表,请为所有相关区域配置权限。
-
考虑添加条件语句以根据 VPC 端点或 IP 范围限制访问权限。
-
为了增强安全性,请考虑使用 aws:PrincipalOrgID 条件来限制组织的访问权限。
-
通过 CloudTrail 和 CloudWatch 指标监控 KMS 密钥使用情况。