Amazon Redshift 数据库加密 - Amazon Redshift

Amazon Redshift 数据库加密

在 Amazon Redshift 中,您可以为集群启用数据库加密,以保护静态数据。为集群启用加密时,会对集群及其快照的数据块和系统元数据进行加密。

您可以在启动集群时启用加密,也可以修改未加密的集群以使用 AWS Key Management Service (AWS KMS) 加密。为此,您可以使用 AWS 托管式密钥或客户托管式密钥。当您修改集群以启用 AWS KMS 加密时,Amazon Redshift 会自动将您的数据迁移到新加密的集群。从加密集群创建的快照也会被加密。您还可以通过修改集群和更改 Encrypt database(加密数据库)选项将加密的集群迁移到未加密的集群。有关更多信息,请参阅 更改集群加密

虽然加密是 Amazon Redshift 中的一项可选设置,但我们建议您为包含敏感数据的集群启用该设置。此外,根据管理数据的准则或法规,您可能需要使用加密。例如,支付卡行业数据安全标准 (PCI DSS)、萨班斯-奥克斯利法 (SOX)、健康保险流通与责任法案 (HIPAA) 以及其他此类法规为处理特定类型数据提供了准则。

Amazon Redshift 使用加密密钥层次结构来加密数据库。您可以使用 AWS Key Management Service (AWS KMS) 或硬件安全模块 (HSM) 来管理该层次结构中的顶级加密密钥。Amazon Redshift 用于加密的流程因您管理密钥的方式而异。Amazon Redshift 自动集成了 AWS KMS 但没有集成 HSM。当您使用 HSM 时,必须使用客户端和服务器证书在 Amazon Redshift 和 HSM 之间配置受信任的连接。

改进加密过程以提高性能和可用性

使用 RA3 节点加密

对 RA3 节点加密过程的更新大幅改进了体验。读取和写入查询都可以在此过程中运行,而加密对性能的影响较小。此外,加密完成的速度要快得多。更新的过程步骤包括还原操作,以及将集群元数据迁移到目标集群的操作。例如,改进的体验适用于诸如 AWS KMS 的加密类型。当您拥有 PB 级的数据量时,操作时间从几周缩短到几天。

在加密集群之前,如果您计划继续运行数据库工作负载,则可以通过添加具有弹性大小调整功能的节点来提高性能并加快此过程。在加密过程中不能使用弹性大小调整功能,因此,请在加密之前执行此操作。请注意,添加节点通常会导致成本增加。

使用其他节点类型加密

当您加密使用 DC2 节点的集群时,您无法像使用 RA3 节点那样运行写入查询。只能运行读取查询。

使用 RA3 节点进行加密的用法说明

以下见解和资源有助于您做好准备进行加密并监控整个加密过程。

  • 开始加密后运行查询 - 加密开始后,大约十五分钟内即可进行读取和写入。完成完整加密过程需要的时间取决于集群上的数据量和工作负载级别。

  • 加密需要多长时间? – 加密数据的时间取决于多个因素:包括正在运行的工作负载数量、所用的计算资源、节点的数量,以及节点的类型。我们建议您首先在测试环境中执行加密。根据经验,如果您处理的数据量达到 PB 级,则可能需要 1-3 天才能完成加密。

  • 我如何知道加密已完成? – 启用加密功能后,第一张快照的完成即确认加密已完成。

  • 回滚加密 - 如果您需要回滚加密操作,最好是从加密启动之前进行的最新备份中还原。在最后一次备份之后,必须重新应用任何新的更新(更新/删除/插入)。

  • 执行表还原 – 请注意,您无法将表从未加密集群还原到加密集群。

  • 加密单节点集群 – 加密单节点集群具有性能限制。此过程所花的时间比多节点集群加密要长。

  • 加密后创建备份 – 加密集群中的数据时,只有在集群完全加密后才会创建备份。此过程所需的时间量可能会有所不同。备份所需的时间可能为数小时到数天,具体取决于集群大小。加密完成后,可能有一段延迟,然后才会创建备份。

    注意,由于在加密过程中发生备份和还原操作,因此不会保留使用 BACKUP NO 创建的任何表或实体化视图。有关更多信息,请参阅 CREATE TABLECREATE MATERIALIZED VIEW

使用 AWS KMS 为 Amazon Redshift 进行数据库加密

当您选择 AWS KMS 对 Amazon Redshift 进行密钥管理时,加密密钥层次结构有四层。按层次顺序,这些密钥是根密钥、集群加密密钥(CEK)、数据库加密密钥(DEK)和数据加密密钥。

当您启动集群时,Amazon Redshift 会返回 AWS KMS keys 列表,此列表为您的 AWS 账户所创建或有权在 AWS KMS 中使用。在加密层次结构中选择要用作根密钥的 KMS 密钥。

默认情况下,Amazon Redshift 选择您的默认密钥作为根密钥。您的默认密钥是由 AWS 管理的密钥,系统为您的 AWS 账户创建该密钥,以便在 Amazon Redshift 中使用。当您首次启动 AWS 区域中某个已加密的集群并选择默认密钥时,AWS KMS 便会创建此密钥。

如果不希望使用默认密钥,在 Amazon Redshift 中启动集群之前,您必须在 AWS KMS 中单独拥有(或创建)一个客户托管式 KMS 密钥。客户托管式密钥可为您提供更大灵活度,包括创建、转动、禁用、定义访问控制,以及审计用于保护数据的加密密钥的能力。有关创建 KMS 密钥的更多信息,请参阅《AWS Key Management Service 开发人员指南》中的创建密钥

如果您希望使用其他 AWS 账户中的 AWS KMS 密钥,则您必须有权使用该密钥并在 Amazon Redshift 中指定其 Amazon Resource Name (ARN)。有关在 AWS KMS 中访问密钥的更多信息,请参阅 AWS Key Management Service 开发人员指南中的控制对您的密钥的访问

当您选择根密钥之后,Amazon Redshift 会请求 AWS KMS 生成数据密钥,并使用所选的根密钥对其进行加密。此数据密钥在 Amazon Redshift 中用作 CEK。AWS KMS 将已加密的 CEK 导出到 Amazon Redshift 中,该 CEK 以及对 KMS 密钥的授权和 CEK 的加密上下文在独立于该集群的网络中的磁盘内部存储。只有加密的 CEK 才会导出到 Amazon Redshift;KMS 密钥仍保留在 AWS KMS 中。Amazon Redshift 还会通过安全通道将已加密的 CEK 传递到集群中,并将其加载到内存中。然后,Amazon Redshift 会调用 AWS KMS 以解密 CEK,并将已解密的 CEK 加载到内存中。有关授予、加密上下文和其他 AWS KMS 相关概念,请参阅 AWS Key Management Service 开发人员指南中的概念

接着,Amazon Redshift 会随机生成一个密钥以用作 DEK,并将其加载到集群的内存中。已解密的 CEK 用于加密 DEK,然后,Amazon Redshift 便会通过安全通道从该集群传递 DEK,以使其在独立于该集群的网络中的磁盘内部存储。与 CEK 一样,DEK 的加密版本和解密版本都会加载到集群中的内存中。然后,DEK 的解密版本将用于加密为数据库中的每个数据块随机生成的各个加密密钥。

当该集群重启时,Amazon Redshift 先使用内部存储的加密版 CEK 和 DEK,将其重新加载到内存中,然后调用 AWS KMS 以再次使用 KMS 密钥解密 CEK,以便其加载到内存中。然后使用解密的 CEK 再次解密 DEK,并将解密的 DEK 加载到内存中,并根据需要用于加密和解密数据块密钥。

有关创建使用 AWS KMS 密钥加密的 Amazon Redshift 集群的更多信息,请参阅创建集群

将 AWS KMS 加密的快照复制到另一个 AWS 区域

AWS KMS 密钥特定于 AWS 区域。如果您启用将 Amazon Redshift 快照复制到另一个 AWS 区域的功能,并且源集群及其快照使用 AWS KMS 中的根密钥进行加密,则您需要为 Amazon Redshift 配置授权,以便在目标 AWS 区域中使用根密钥。此授权使 Amazon Redshift 可以在目标 AWS 区域中加密快照。有关跨区域快照复制的更多信息,请参阅将快照复制到其它 AWS 区域

注意

如果您启用已加密集群中的快照复制功能,并针对根密钥使用 AWS KMS,则无法重命名集群,因为集群名称是加密上下文的一部分。如果您必须重命名集群,则可以禁用在源 AWS 区域中复制快照,重命名集群,然后再次配置并启用快照复制。

配置复制快照的授权的过程如下所示。

  1. 在目标 AWS 区域中,通过执行以下操作创建快照复制授权:

    • 如果您没有 AWS KMS 密钥可用,请创建一个。有关创建 AWS KMS 密钥的更多信息,请参阅 AWS Key Management Service 开发人员指南中的创建密钥

    • 指定快照复制授权的名称。此名称必须在您的 AWS 账户的 AWS 区域中唯一。

    • 为您创建的授权指定 AWS KMS 密钥 ID。如果您未指定密钥 ID,则该授予会应用于您的默认密钥。

  2. 在源 AWS 区域中,启用快照复制并指定您在目标 AWS 区域中创建的快照复制授权的名称。

前述流程仅适用于您使用 AWS CLI、Amazon Redshift API 或开发工具包启用快照复制功能的情况。如果您使用控制台,在您启用跨区域快照复制时,Amazon Redshift 将提供相应的工作流程以配置授权。有关使用控制台为 AWS KMS 加密的集群配置跨区域快照复制的更多信息,请参阅为 AWS KMS 加密的集群配置跨区域快照副本

快照复制到目标 AWS 区域之前,Amazon Redshift 使用源 AWS 区域中的根密钥解密快照并使用 Amazon Redshift 内部管理的随机生成的 RSA 密钥临时对其进行重新加密。然后,Amazon Redshift 将快照通过安全通道复制到目标 AWS 区域,使用内部托管式 RSA 密钥解密快照,然后使用目标 AWS 区域中的根密钥重新加密快照。

使用硬件安全模块的 Amazon Redshift 加密

如果您不使用 AWS KMS 管理密钥,则可以使用硬件安全模块 (HSM) 在 Amazon Redshift 中管理密钥。

重要

DC2 和 RA3 节点类型不支持 HSM 加密。

HSM 是直接控制密钥生成和管理的设备。HSM 使密钥管理独立于应用程序和数据库层,以提供更强的安全性。Amazon Redshift 支持 AWS CloudHSM Classic 进行密钥管理。使用 HSM 管理加密密钥的加密流程与 AWS KMS 不同。

重要

Amazon Redshift 仅支持 AWS CloudHSM Classic。我们不支持较新的 AWS CloudHSM 服务。

AWS CloudHSM Classic 不对新客户开放。有关更多信息,请参阅 CloudHSM Classic 定价。AWS CloudHSMClassic 并非在所有 AWS 区域可用。有关可用 AWS 区域的更多信息,请参阅 AWS 区域列表

当您配置集群以使用 HSM 时,Amazon Redshift 会向 HSM 发出请求,以生成并存储要用作 CEK 的密钥。不过,与 AWS KMS 不同,HSM 不会将 CEK 导出到 Amazon Redshift 中。Amazon Redshift 会在集群中随机生成 DEK,并将其传递到 HSM 中,由 CEK 进行加密。HSM 会将已加密的 DEK 返回到 Amazon Redshift 中,由随机生成的内部根密钥进行加密并在独立于该集群的网络中的磁盘内部存储。Amazon Redshift 还会将解密版 DEK 加载到集群的内存中,以便 DEK 可用于加密和解密数据块的各个密钥。

如果该集群重启,则 Amazon Redshift 会使用内部根密钥解密内部存储的双重加密 DEK,以将内部存储的 DEK 还原为 CEK 加密状态。然后,CEK 加密的 DEK 会传递到 HSM 进行加密并传递回 Amazon Redshift,以便再次加载到内存中用于各个数据块密钥。

在 Amazon Redshift 和 HSM 之间配置受信任的连接

如果您选择使用 HSM 管理集群密钥,则需要在 Amazon Redshift 和 HSM 之间配置受信任的网络连接。执行此操作需要配置客户端和服务器证书。在加密和解密操作过程中,受信任的连接用于在 HSM 和 Amazon Redshift 之间传递加密密钥。

Amazon Redshift 会通过随机生成的私有和公有键前缀创建公有客户端证书。这些都进行了加密,并在内部存储。您可以在 HSM 中下载并注册公有客户端证书,并将其分配给适用的 HSM 分区。

您需要为 Amazon Redshift 提供 HSM IP 地址、HSM 分区名称、HSM 分区密码以及公有 HSM 服务器证书,该证书使用内部根密钥进行了加密。Amazon Redshift 会完成配置流程并验证其能否连接到 HSM。如果无法使用,则集群将进入 INCOMPATIBLE_HSM 状态,并且不会创建集群。在这种情况下,您必须删除不完整的集群,然后重试。

重要

当您将集群修改为使用其他 HSM 分区时,Amazon Redshift 将验证它是否能连接到新分区,但不会验证是否存在有效的加密密钥。在使用新分区之前,您必须将密钥复制到新分区。如果集群已重新启动,而 Amazon Redshift 无法找到有效密钥,重新启动将失败。有关更多信息,请参阅在 HSM 中复制密钥

初始配置之后,如果 Amazon Redshift 无法连接到 HSM,则系统会记录一个事件。有关这些事件的更多信息,请参阅 Amazon Redshift 事件通知

Amazon Redshift 中的加密密钥轮换

在 Amazon Redshift 中,您可以轮换已加密集群的加密密钥。当您启动密钥轮换流程时,Amazon Redshift 会轮换指定集群以及该集群的任何自动或手动快照的 CEK。Amazon Redshift 还会轮换指定集群的 DEK,但不会轮换快照的 DEK,而这些快照在 Amazon Simple Storage Service(Amazon S3)内部存储并使用现有 DEK 进行了加密。

在轮换进行过程中,该集群将处于 ROTATING_KEYS 状态一直到轮换完成为止,届时,该集群将还原为 AVAILABLE 状态。Amazon Redshift 会在密钥轮换过程中处理解密和重新加密。

注意

如果没有源集群,则无法轮换快照的密钥。在删除集群之前,请考虑其快照是否依赖密钥轮换。

由于集群在密钥轮换过程中暂时不可用,因此您应该只在数据需求需要时或在怀疑密钥可能已被破坏时轮换密钥。作为最佳实践,您应该查看存储的数据的类型,并计划对该数据进行加密的密钥的轮换频率。轮换密钥的频率取决于贵公司的数据安全策略以及关于敏感数据和监管合规的任何行业标准。确保您的计划平衡安全需求和集群的可用性考虑因素。

有关轮换密钥的更多信息,请参阅轮换加密密钥