Amazon Redshift
集群管理指南 (API 版本 2012-12-01)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

更改集群加密

您可以使用 AWS 管理的密钥或客户管理的密钥 (CMK) 修改未加密的集群以使用 AWS Key Management Service (AWS KMS) 加密。当您修改集群以启用 KMS 加密时,Amazon Redshift 会自动将您的数据迁移到新加密的集群。您还可以通过修改集群将未加密的集群迁移到加密的集群。

在迁移操作过程中,您的集群处于只读模式,集群状态显示为正在调整大小

如果您的集群配置为启用跨 AWS 区域快照复制,则必须在更改加密之前将其禁用。有关更多信息,请参阅 将快照复制到另一个区域为 AWS KMS 加密的集群配置跨区域快照复制。您无法通过修改集群来启用硬件安全模块 (HSM) 加密。相反,需要创建一个新的 HSM 加密集群并将数据迁移到新集群。有关更多信息,请参阅 迁移到 HSM 加密的集群

使用控制台更改集群加密

  1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon Redshift 控制台:https://console.amazonaws.cn/redshift/

  2. 在导航窗格中,选择 Clusters,然后选择要修改的集群。

  3. 选择集群,然后选择修改

  4. 对于加密数据库,选择 KMS 以启用加密,或者选择以禁用加密。

  5. 要使用客户管理的密钥,对于主密钥,请选择输入密钥 ARN 并在 ARN 字段中输入 ARN。

  6. 选择 Modify

使用 CLI 更改集群加密

要修改未加密的集群以使用 KMS,请运行 modify-cluster CLI 命令并指定 –-encrypted,如下所示。默认情况下,使用您的默认 KMS 密钥。要指定客户管理的密钥,请包括 --kms-key-id 选项。

aws redshift modify-cluster --cluster-identifier <value> --encrypted --kms-key-id <value>

要从您的集群中删除加密,请运行以下 CLI 命令。

aws redshift modify-cluster --cluster-identifier <value> --no-encrypted

迁移到 HSM 加密的集群

要将未加密的集群迁移到使用硬件安全模块 (HSM) 加密的集群,您需要创建新的加密集群并将数据移动到新集群。您无法通过修改集群来迁移 HSM 加密的集群。

要从未加密集群迁移到 HSM 加密的集群,您必须先从现有源集群中卸载数据。然后,将数据重新加载到使用所选加密设置的新目标集群。有关启动加密集群的更多信息,请参阅Amazon Redshift 数据库加密

在迁移过程中,直至最后一步之前,您的源集群可供只读查询使用。最后一步是重命名目标集群和源集群,这将切换终端节点,使得所有流量都路由到新的目标集群。在重命名之后,直到重新启动目标集群后,目标集群才可用。在数据传输期间,源集群上的所有数据加载和其他写入操作将暂停。

准备迁移

  1. 确定与 Amazon Redshift 交互的所有关联系统,例如商业智能 (BI) 工具以及提取、转换和加载 (ETL) 系统。

  2. 确定验证查询以测试迁移。

    例如,您可以使用以下查询来查找用户定义表的数量。

    select count(*) from pg_table_def where schemaname != 'pg_catalog';

    以下查询返回所有用户定义表以及各个表中的行数的列表。

    select "table", tbl_rows from svv_table_info;
  3. 选择适合您迁移的时间。要找到集群使用率最低的时间,请监控 CPU 使用率和数据库连接数等集群指标。有关更多信息,请参阅查看集群性能数据

  4. 删除未使用的表。

    要创建表及每个表查询次数的列表,请运行以下查询。

    select database, schema, table_id, "table", round(size::float/(1024*1024)::float,2) as size, sortkey1, nvl(s.num_qs,0) num_qs from svv_table_info t left join (select tbl, perm_table_name, count(distinct query) num_qs from stl_scan s where s.userid > 1 and s.perm_table_name not in ('internal worktable','s3') group by tbl, perm_table_name) s on s.tbl = t.table_id where t."schema" not in ('pg_internal');
  5. 启动新的加密集群。

    为目标集群使用与源集群相同的端口号。有关启动加密集群的更多信息,请参阅Amazon Redshift 数据库加密

  6. 设置卸载和加载过程。

    您可以使用 Amazon Redshift 卸载/复制实用程序来帮助您在集群之间迁移数据。该实用程序可将数据从源集群导出到 Amazon S3 上的位置。数据使用 AWS KMS 进行加密。然后,实用程序会自动将数据导入到目标中。或者,您可以使用该实用程序在迁移完成后清除 Amazon S3。

  7. 运行测试来验证您的流程,并估计写入操作需要暂停多长时间。

    在卸载和加载操作期间,通过暂停数据加载和其他写入操作来确保数据一致性。使用您最大的表之一完整地运行卸载和加载过程,以帮助您估计时间。

  8. 创建数据库对象,例如 schema、视图和表。为帮助生成必需的数据定义语言 (DDL) 语句,您可以使用 AWS GitHub 存储库的 AdminViews 中的脚本。

迁移您的集群

  1. 停止源集群上的所有 ETL 进程。

    要确认进程中未执行任何写入操作,请使用 Amazon Redshift 管理控制台来监控写入 IOPS。有关更多信息,请参阅查看集群性能数据

  2. 运行您之前确定的验证查询,以便在迁移前收集有关未加密源集群的信息。

  3. (可选) 创建一个工作负载管理 (WLM) 队列以使用源集群和目标集群中的最大可用资源。例如,创建名为 data_migrate 的队列并且为队列配置 95% 的内存和并发度 4。有关更多信息,请参阅 Amazon Redshift Database Developer Guide 中的基于用户组和查询组将查询路由至队列

  4. 使用 data_migrate 队列运行 UnloadCopyUtility。

    使用 Amazon Redshift 控制台监控 UNLOAD 和 COPY 进程。

  5. 再次运行验证查询并验证结果与来自源集群的结果匹配。

  6. 重命名您的源和目标集群以交换终端节点。为避免中断,请在工作时间之外执行此操作。

  7. 验证您可以使用所有 SQL 客户端 (例如 ETL 和报告工具) 连接到目标集群。

  8. 关闭未加密的源集群。