Amazon Redshift
管理指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

Amazon Redshift 数据库加密

在 Amazon Redshift 中,您可以为群集启用数据库加密,以保护静态数据。当您为群集启用加密时,该群集及其快照的数据块和系统元数据都会得到加密处理。

加密是群集的一项可选且不可变的设置。如果您希望加密,则必须在群集启动过程中将其启用。如果您希望从已加密的群集改为使用未加密的群集(或反之),则必须从现有群集卸载数据,然后在使用所选加密设置的新群集中重新加载这些数据。

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

Amazon Redshift 使用加密密钥层次结构来加密数据库。您可以使用 AWS Key Management Service (AWS KMS) 或硬件安全模块 (HSM) 来管理该层次结构中的顶级加密密钥。Amazon Redshift 用于加密的流程因您管理密钥的方式而异。

此外,Amazon Redshift 自动与 AWS KMS 集成,而不与 HSM 集成。当您使用 HSM 时,必须使用客户端和服务器证书在 Amazon Redshift 和 HSM 之间配置受信任的连接。

关于使用 AWS KMS 为 Amazon Redshift 加密数据库

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

当您启动群集时,Amazon Redshift 会返回您的 AWS 账户所创建的或有权在 AWS KMS 中使用的客户主密钥 (CMK) 列表。您需要选择一个 CMK 作为加密层次结构中的主密钥。

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

如果您不想使用默认密钥,则必须在 AWS KMS 中单独拥有(或创建)一个由客户管理的 CMK,然后在 Amazon Redshift 中启动群集。由客户管理的 CMK 可为您提供更大的灵活性,包括创建、轮换、禁用有助于保护数据的加密密钥,以及对这些加密密钥定义访问控制和进行审计的能力。有关创建 CMK 的更多信息,请转到 AWS Key Management Service Developer Guide 中的创建密钥

如果您希望使用其他 AWS 账户中的 AWS KMS 密钥,则您必须有权使用该密钥并在 Amazon Redshift 中指定其 ARN。有关访问 AWS KMS 中密钥的更多信息,请转到 AWS Key Management Service Developer Guide 中的控制对密钥的访问

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

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

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

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

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

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

注意

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

为快照复制配置授予的流程如下所示。

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

    • 如果您没有 AWS KMS 密钥可用,请创建一个。有关创建 AWS KMS 密钥的更多信息,请转到 AWS Key Management Service Developer Guide 中的创建密钥

    • 为该快照复制授予指定名称。该名称在您的 AWS 账户的相应区域中必须是独一无二的。

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

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

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

在相应快照复制到目标区域之前,Amazon Redshift 会使用源区域中的主密钥解密快照,然后使用随机生成的 RSA 密钥(由 Amazon Redshift 在内部管理)暂时再次对其加密。然后,Amazon Redshift 会通过安全通道将快照复制到目标区域,使用内部管理的 RSA 密钥解密快照,接着使用目标区域中的主密钥再次对快照加密。

有关为 AWS KMS 加密的群集配置快照复制授予的更多信息,请参阅使用 Amazon Redshift API 和 AWS CLI 配置 Amazon Redshift 以使用 AWS KMS 加密密钥

关于使用硬件安全模为 Amazon Redshift 加密

如果您没有使用 AWS KMS 管理密钥,则可以使用硬件安全模块 (HSM) 对 Amazon Redshift 进行密钥管理。HSM 是直接控制密钥生成和管理的设备。HSM 使密钥管理独立于应用程序和数据库层,以提供更强的安全性。Amazon Redshift 同时支持使用 AWS CloudHSM 和本地 HSM 进行密钥管理。使用 HSM 管理加密密钥的加密流程与 AWS KMS 不同。

当您配置群集以使用 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 console配置 Amazon Redshift 以使用 HSM使用 Amazon Redshift API 和 AWS CLI 配置 Amazon Redshift 以使用 HSM

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

关于在 Amazon Redshift 中轮换加密密钥

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

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

注意

您无法轮换没有源群集的快照的密钥。删除群集之前,不妨先考虑一下其快照是否依赖密钥轮换。

由于群集在密钥轮换过程中暂时不可用,因此您应仅按照数据需求所需的频率来轮换密钥,或者仅在您怀疑密钥可能已泄露的情况下轮换密钥。作为最佳实践,您应查看自己存储的数据类型,并计划多久轮换一次加密这些数据的密钥。轮换密钥的频率因您企业的数据安全策略以及与敏感数据有关的任何行业标准和监管合规性而异。确保您的计划在安全需求和群集的可用性考虑因素之间建立平衡。

有关轮换密钥的更多信息,请参阅使用 Amazon Redshift console 轮换加密密钥使用 Amazon Redshift API 和 AWS CLI 来轮换加密密钥