中的密钥同步和耐久性设置 AWS CloudHSM - AWS CloudHSM

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

中的密钥同步和耐久性设置 AWS CloudHSM

本主题介绍中的密钥同步设置 AWS CloudHSM、客户在集群上使用密钥时面临的常见问题以及使密钥更耐用的策略。

概念

令牌密钥

您在密钥生成、导入或解包操作期间创建的永久密钥。 AWS CloudHSM 跨集群同步令牌密钥。

会话密钥

仅存在于集群中一个硬件安全模块 (HSM) 上的临时密钥。 AWS CloudHSM 不会跨集群同步会话密钥。

客户端密钥同步

一个客户端进程,用于克隆您在密钥生成、导入或解包操作期间创建的令牌密钥。您可以运行有两个及以上 HSM 的集群提高令牌密钥的耐久性。

服务器端密钥同步

定期将密钥克隆到集群中的每个 HSM。无需管理。

客户端密钥持久性设置

您在客户端上配置的会影响密钥持久性的设置。这些设置在客户端软件开发工具包 5 和客户端软件开发工具包 3 中的运作方式有所不同。

  • 在客户端软件开发工具包 5 中,使用此设置运行单个 HSM 集群。

  • 在客户端软件开发工具包 3 中,使用此设置指定成功创建密钥操作所需的 HSM 数量。

了解密钥同步

AWS CloudHSM 使用密钥同步在集群中的所有 HSM 上克隆令牌密钥。在密钥生成、导入或解包操作期间,您可以将令牌密钥创建为永久密钥。为了在集群中分配这些密钥,CloudHSM 提供了客户端和服务器端密钥同步功能。

Key synchronization diagram showing client-side and server-side sync across CloudHSM 集群.

密钥同步(服务器端和客户端)的目标是在创建新密钥后尽快在集群中分发新密钥。这很重要,因为您为使用新密钥而进行的后续调用可以路由到集群中任何可用的 HSM。如果您拨打的呼叫路由到没有密钥的 HSM,则呼叫将失败。您可以通过指定应用程序在密钥创建操作后重试后续调用来缓解这些类型故障。同步所需的时间可能会有所不同,具体取决于集群的工作负载和其他无形因素。使用 CloudWatch 指标来确定您的应用程序在这种情况下应采用的时机。有关更多信息,请参阅CloudWatch 指标

云环境中密钥同步面临的挑战在于密钥的耐久性。您在单个 HSM 上创建密钥,并且通常会立即开始使用这些密钥。如果您创建密钥的 HSM 在密钥被克隆到集群中的另一个 HSM 之前出现故障,则您将丢失密钥无法访问由密钥加密的任何内容。为了降低这种风险,我们提供客户端同步功能。客户端同步为客户端进程,用于克隆您在密钥生成、导入或解包操作期间创建的密钥。在创建密钥时对其进行克隆可以使密钥更持久。当然,您无法使用单个 HSM 克隆集群中的密钥。为了使密钥更持久,我们还建议您将集群配置为使用两个及以上的 HSM。通过客户端同步和具有两个 HSM 的集群,您可以应对云环境中密钥持久性的挑战。

使用客户端密钥持久性设置

密钥同步总体是一个自动过程,但您可以管理客户端密钥的耐久性设置。客户端软件开发工具包 5 和客户端软件开发工具包 3 中的客户端密钥持久性设置的运作方式不同。

  • 在客户端软件开发工具包 5 中,我们引入了密钥可用性仲裁的概念,它要求您运行有两个及以上 HSM 的集群。您可以使用客户端密钥持久性设置,选择不要求使用两个 HSM。有关仲裁的更多信息,请参阅 客户端软件开发工具包 5 概念

  • 在客户端软件开发工具包 3 中,您可以使用客户端密钥持久性设置来指定要使整个操作视为成功必须成功创建密钥的 HSM 数量。

在客户端软件开发工具包 5 中,密钥同步是全自动的过程。对于密钥可用性仲裁,新创建的密钥必须存在于集群中的两个 HSM 上,然后您的应用程序才能使用该密钥。要使用密钥可用性仲裁,您的集群必须有两个及以上的 HSM。

如果您的集群配置不符合密钥持久性要求,则任何创建或使用令牌密钥的尝试都将失败,并在日志中显示以下错误消息:

Key <key handle> does not meet the availability requirements - The key must be available on at least 2 HSMs before being used.

您可以使用客户端配置设置选择退出密钥可用性仲裁。例如,您可能希望选择不使用单个 HSM 运行集群。

客户端软件开发工具包 5 概念

密钥可用性仲裁

AWS CloudHSM 指定集群中必须存在密钥的 HSM 数量,然后您的应用程序才能使用密钥。需要有两个及以上 HSM 的集群。

管理客户端密钥持久性设置

要管理客户端密钥持久性设置,必须使用客户端软件开发工具包 5 的配置工具。

PKCS #11 library
在 Linux 上禁用客户端软件开发工具包 5 的客户端密钥持久性
  • 使用配置工具禁用客户端密钥持久性设置。

    $ sudo /opt/cloudhsm/bin/configure-pkcs11 --disable-key-availability-check
在 Windows 上禁用客户端软件开发工具包 5 的客户端密钥持久性
  • 使用配置工具禁用客户端密钥持久性设置。

    "C:\Program Files\Amazon\CloudHSM\bin\configure-pkcs11.exe" --disable-key-availability-check
OpenSSL Dynamic Engine
在 Linux 上禁用客户端软件开发工具包 5 的客户端密钥持久性
  • 使用配置工具禁用客户端密钥持久性设置。

    $ sudo /opt/cloudhsm/bin/configure-dyn --disable-key-availability-check
JCE provider
在 Linux 上禁用客户端软件开发工具包 5 的客户端密钥持久性
  • 使用配置工具禁用客户端密钥持久性设置。

    $ sudo /opt/cloudhsm/bin/configure-jce --disable-key-availability-check
在 Windows 上禁用客户端软件开发工具包 5 的客户端密钥持久性
  • 使用配置工具禁用客户端密钥持久性设置。

    "C:\Program Files\Amazon\CloudHSM\bin\configure-jce.exe" --disable-key-availability-check
CloudHSM CLI
在 Linux 上禁用客户端软件开发工具包 5 的客户端密钥持久性
  • 使用配置工具禁用客户端密钥持久性设置。

    $ sudo /opt/cloudhsm/bin/configure-cli --disable-key-availability-check
在 Windows 上禁用客户端软件开发工具包 5 的客户端密钥持久性
  • 使用配置工具禁用客户端密钥持久性设置。

    "C:\Program Files\Amazon\CloudHSM\bin\configure-cli.exe" --disable-key-availability-check

在客户端软件开发工具包 3 中,密钥同步总体是一个自动过程,但您可以使用客户端密钥持久性设置来提高密钥的耐久性。您必须指定成功创建密钥的 HSM 数量,整个操作才算成功。无论您选择什么设置,客户端同步功能始终会尽力将密钥克隆到集群中的每个 HSM。您的设置会在您指定数量的 HSM 上强制创建密钥。如果您指定了一个数量,但系统无法将该密钥复制到该数量的 HSM 上,则系统会自动清理所有不需要的密钥材料,且您可以重试。

重要

如果您未设置客户端密钥持久性设置(或者使用默认值 1),则密钥很容易丢失。如果您当前的 HSM 在服务器端服务将该密钥克隆到另一个 HSM 前出现故障,则密钥材料会丢失。

为了最大限度地提高密钥的耐久性,请考虑指定两个及以上 HSM 进行客户端同步。请记住,无论您指定多少个 HSM,集群上的工作负载都将保持不变。客户端同步总是尽最大努力将密钥克隆到集群中的每个 HSM。

建议

  • 最小值:每个集群两台 HSM

  • 最大值:比您集群中的 HSM 总数少一个

如果客户端同步失败,则客户端服务会清理可能已创建且现在不需要的所有不需要的密钥。这种清理是尽力而为的应对措施,可能并不总是奏效。如果清理失败,则可能需要您删除不需要的密钥材料。有关更多信息,请参阅密钥同步故障

为客户端密钥持久性设置配置文件

要指定客户端密钥持久性设置,必须编辑 cloudhsm_client.cfg

编辑客户端配置文件
  1. 打开 cloudhsm_client.cfg

    Linux:

    /opt/cloudhsm/etc/cloudhsm_client.cfg

    Windows:

    C:\ProgramData\Amazon\CloudHSM\data\cloudhsm_client.cfg
  2. 在文件client节点中,添加create_object_minimum_nodes并指定一个值,表示 AWS CloudHSM 必须成功创建密钥才能成功创建密钥的 HSM 的最小数量。

    "create_object_minimum_nodes" : 2
    注意

    key_mgmt_util (KMU) 命令行工具还有额外的客户端密钥持久性设置。有关更多信息,请参阅 KMU 和客户端同步

配置参考

以下是客户端同步属性,如以下 cloudhsm_client.cfg 的摘录所示:

{ "client": { "create_object_minimum_nodes" : 2, ... }, ... }
create_object_minimum_nodes

指定密钥生成、密钥导入或密钥解包操作视为成功所需的最少 HSM 数量。如果已设置,默认为“1”。这意味着,对于每个密钥创建操作,客户端服务都会尝试在集群中的每个 HSM 上创建密钥,但要返回“成功”,只需在集群中的一个 HSM 上创建单个密钥即可。

KMU 和客户端同步

如果使用 key_mgmt_util (KMU) 命令行工具创建密钥,则要使用可选的命令行参数 (-min_srv) 来限制要克隆密钥的 HSM 数量。如果您在配置文件中指定命令行参数值,则使用两个值 AWS CloudHSM 中较大的一个。

有关更多信息,请参阅以下主题:

跨克隆集群同步密钥

客户端和服务器端同步仅用于同步同一集群内的密钥。如果将集群的备份复制到另一区域,则可以使用 cloudhsm_mgmt_util (CMU) 的 syncKey 命令在集群之间同步密钥。您可以使用克隆的集群来实现跨区域冗余或简化灾难恢复过程。有关更多信息,请参阅 syncKey