创建 DynamoDB 的零 ETL 集成
在创建零 ETL 集成之前,请查看将零 ETL 集成与 Amazon Redshift 结合使用时的注意事项中概述的注意事项和要求。按照这个常规流程创建从 DynamoDB 到 Amazon Redshift 的零 ETL 集成
使用零 ETL 集成将 DynamoDB 数据复制到 Amazon Redshift
确认您的登录凭证具备适当的权限,使您可以处理 Amazon Redshift 与 DynamoDB 的零 ETL 集成。有关示例 IAM 策略,请参阅与 DynamoDB 零 ETL 集成配合使用的 IAM 策略。
-
在 DynamoDB 控制台中,配置您的 DynamoDB 表,让它具有时间点故障恢复(PITR)、资源策略、基于身份的策略和加密密钥权限,如《Amazon DynamoDB 开发人员指南》中所述。
-
从 Amazon Redshift 控制台:创建和配置目标 Amazon Redshift 数据仓库。
-
从 AWS CLI 或 Amazon Redshift 控制台:为您的数据仓库开启区分大小写。
-
从 Amazon Redshift 控制台:为您的 Amazon Redshift 数据仓库配置授权。
-
-
在 Amazon Redshift 控制台中,创建零 ETL 集成,如本主题后面所述。
-
在 Amazon Redshift 控制台中,在 Amazon Redshift 数据仓库中创建目标数据库。有关更多信息,请参阅 在 Amazon Redshift 中创建目标数据库。
-
在 Amazon Redshift 控制台中,查询在 Amazon Redshift 数据仓库中复制的数据。有关更多信息,请参阅 在 Amazon Redshift 中查询复制的数据。
在此步骤中,您将创建 Amazon DynamoDB 与 Amazon Redshift 的零 ETL 集成。
与 DynamoDB 零 ETL 集成配合使用的 IAM 策略
在创建零 ETL 集成时,您的登录凭证必须同时拥有 DynamoDB 和 Amazon Redshift 操作的权限,以及拥有集成源和目标的相关资源的权限。以下是演示所需最低权限的示例。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:ListTables" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "dynamodb:GetResourcePolicy", "dynamodb:PutResourcePolicy", "dynamodb:UpdateContinuousBackups" ], "Resource": [ "arn:aws:dynamodb:
<region>
:<account>
:table/my-ddb-table" ] }, { "Sid": "AllowRedshiftDescribeIntegration", "Effect": "Allow", "Action": [ "redshift:DescribeIntegrations" ], "Resource": "*" }, { "Sid": "AllowRedshiftCreateIntegration", "Effect": "Allow", "Action": "redshift:CreateIntegration", "Resource": "arn:aws:redshift:<region>
:<account>
:integration:*" }, { "Sid": "AllowRedshiftModifyDeleteIntegration", "Effect": "Allow", "Action": [ "redshift:ModifyIntegration", "redshift:DeleteIntegration" ], "Resource": "arn:aws:redshift:<region>
:<account>
:integration:<uuid>
" }, { "Sid": "AllowRedshiftCreateInboundIntegration", "Effect": "Allow", "Action": "redshift:CreateInboundIntegration", "Resource": "arn:aws:redshift:<region>
:<account>
:namespace:<uuid>
" } ] }
使用客户自主管理型密钥加密 DynamoDB 集成
如果您指定自定义 KMS 密钥而不是创建 DynamoDB 零 ETL 集成时的 AWS 拥有的密钥,则密钥策略必须为 Amazon Redshift 服务主体提供对 CreateGrant
操作的访问权限。此外,该策略必须让请求者账户或角色有权运行 DescribeKey
和 CreateGrant
操作。
以下示例密钥策略语句演示了策略中所需的权限。一些示例包括用于进一步缩小权限范围的上下文密钥。
以下策略语句让请求者账户或角色可以检索有关 KMS 密钥的信息。
{ "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::
{account-ID}
:role/{role-name}
" }, "Action":"kms:DescribeKey", "Resource":"*" }
以下策略语句让请求者账户或角色可以添加对 KMS 密钥的授权。kms:ViaService
条件键将 KMS 密钥的使用限制为来自 Amazon Redshift 的请求。
{ "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::
{account-ID}
:role/{role-name}
" }, "Action":"kms:CreateGrant", "Resource":"*", "Condition":{ "StringEquals":{ "kms:EncryptionContext:{context-key}
":"{context-value}
", "kms:ViaService":"redshift.{region}
.amazonaws.com" }, "ForAllValues:StringEquals":{ "kms:GrantOperations":[ "Decrypt", "GenerateDataKey", "CreateGrant" ] } } }
以下策略语句可让 Amazon Redshift 服务主体添加对 KMS 密钥的授权。
{ "Effect":"Allow", "Principal":{ "Service":"redshift.amazonaws.com" }, "Action":"kms:CreateGrant", "Resource":"*", "Condition":{ "StringEquals":{ "kms:EncryptionContext:
{context-key}
":"{context-value}
", "aws:SourceAccount":"{account-ID}
" }, "ForAllValues:StringEquals":{ "kms:GrantOperations":[ "Decrypt", "GenerateDataKey", "CreateGrant" ] }, "ArnLike":{ "aws:SourceArn":"arn:aws:*:{region}
:{account-ID}
:integration:*" } } }
有关更多信息,请参阅《AWS Key Management Service 开发人员指南》中的创建密钥策略。
加密上下文
加密零 ETL 集成时,可以将键值对添加为其他加密上下文。您可能想要添加这些键值对,以便添加有关待复制数据的其他上下文信息。有关更多信息,请参阅 AWS Key Management Service 开发人员指南中的加密内容。
除了您添加的任何加密上下文对外,Amazon Redshift 还会添加以下加密上下文对:
-
aws:redshift:integration:arn
-IntegrationArn
-
aws:servicename:id
-Redshift
这会将您可以添加的加密上下文对总数从 8 减少到 6,并增加授予约束条件的总字符限制。有关更多信息,请参阅《AWS Key Management Service 开发人员指南》中的 Using grant constraints。