以下方面的最佳实践 AWS CloudHSM - AWS CloudHSM

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

以下方面的最佳实践 AWS CloudHSM

执行本主题中的最佳做法以有效使用 AWS CloudHSM。

集群管理

创建、访问和管理 AWS CloudHSM 集群时,请遵循本节中的最佳实践。

扩展集群以应对峰值流量

有几个因素影响您的集群可以处理的最大吞吐量,包括客户端实例大小、集群大小、网络拓扑以及您的用例所需的加密操作。

首先,有关常见集群大小和配置的性能估计,请参阅主题 AWS CloudHSM 性能。我们建议您根据峰值负载预期,对集群进行负载测试,以确定当前架构是否有弹性和规模得当。

构建集群以实现高可用性

增加冗余以进行维护: AWS 可能会替换您的 HSM 进行定期维护或检测到问题。一般而言,您的集群大小至少应有 +1 冗余。例如,如果您需要两个 HSM 才能让服务在峰值时段运行,那么理想的集群大小将为三。如果您遵循与可用性相关的最佳做法,则这些 HSM 替代品不应影响您的服务。但是,在更换后的 HSM 上运行的操作可能会失败,因此必须重试。

您的 HSM 分散到多个可用区:考虑在可用区中断期间,您的服务将如何运行。 AWS 建议您将您的 HSM 分布在尽可能多的可用区内。对于具有三个 HSM 的集群,您应该将 HSM 分布至三个可用区。根据您的系统,您可能需要额外冗余。

至少有三个 HSM,以确保新生成密钥的持久性

对于需要新生成密钥持久性的应用程序,我们建议跨一个区域中的所有可用区分布至少三个 HSM 实例。

安全访问您的集群

使用私有子网限制实例访问:在 VPC 的私有子网中启动 HSM 和客户端实例。这会限制从外部访问您的 HSM。

使用 VPC 终端节点访问 API: AWS CloudHSM 数据平面旨在无需访问互联网或 AWS API 即可运行。如果您的客户端实例需要访问 AWS CloudHSM API,则可以使用 VPC 终端节点访问 API,而无需在客户端实例上访问互联网。请参阅AWS CloudHSM 和 VPC 终端节点了解更多信息。

重新配置 SSL 以保护客户端-服务器通信: AWS CloudHSM 使用 TLS 与您的 HSM 建立连接。初始化集群后,您可替换用于建立外部 TLS 连接的默认 TLS 证书和密钥。有关更多信息,请参阅 使用 SSL/TLS 卸载来提高 Web 服务器的安全性 AWS CloudHSM

根据您的需求扩展,从而降低成本

无需预付费用即可使用 AWS CloudHSM。终止 HSM 之前,您需要为启动的每个 HSM 支付每小时费用。如果您的服务不需要持续使用 AWS CloudHSM,则可以在不需要时将 HSM 缩小(删除)至零,从而降低成本。再次需要 HSM 时,您可从备份中恢复 HSM。例如,如果您的工作负载要求您每月签名一次代码(尤其是在该月的最后一天)则可以在此前纵向扩展集群,在工作完成后通过删除 HSM 来缩减集群,然后恢复集群以在下个月底再次执行签名操作。

AWS CloudHSM 自动对集群中的 HSM 进行定期备份。稍后添加新 HSM 时, AWS CloudHSM 会将最新的备份还原到新 HSM 上,这样您就可以从离开它的地方恢复使用。要计算您的 AWS CloudHSM 架构成本,请参阅AWS CloudHSM 定价

相关的资源:

HSM 用户管理

请遵循本节中的最佳实践,以有效管理 AWS CloudHSM 集群中的用户。HSM 用户与 IAM 用户不同。如果 IAM 用户和实用程序拥有带适当许可的身份识别策略,则其可通过 AWS API 与资源交互,进而创建 HSM。创建 HSM 后,您必须使用 HSM 用户凭证对 HSM 上的操作进行身份验证。有关 HSM 用户的详细指南,请参阅 在中管理 HSM 用户 AWS CloudHSM

保护您的 HSM 用户凭证

必须妥善保护您的 HSM 用户凭证,因为 HSM 用户是可以访问您的 HSM 并对其执行加密和管理操作的实体。 AWS CloudHSM 无法访问您的 HSM 用户凭证,如果您无法访问这些凭证,则无法为您提供帮助。

至少有两名管理员防止锁定

为避免被锁定在集群外,我们建议您至少配备两名管理员,以防一个管理员密码丢失。如果发生这种情况,您可使用其他管理员重置密码。

注意

客户端软件开发工具包 5 中的 管理员与客户端软件开发工具包 3 中的加密员(CO)同义。

为所有用户管理操作启用仲裁

您可通过仲裁设置最小数量的管理员,该管理员必须在操作发生前批准用户管理操作。由于管理员拥有的权限,我们建议您为所有用户管理操作启用仲裁。如果某个管理员密码被泄露,这可能会限制可能造成的影响。有关更多信息,请参阅仲裁管理

创建多个加密用户,每个用户都有有限权限

通过将加密用户的责任分开,没有用户可以完全控制整个系统。因此,我们建议您创建多个加密用户并限制每个用户权限。方法通常是赋予不同的加密用户明显不同的责任和执行操作(例如,一位加密用户负责生成密钥,并将其与稍后使用的其他加密用户分享)。

相关的资源:

HSM 密钥管理

在 AWS CloudHSM中管理密钥时,遵循本部分所述的最佳做法。

选择正确密钥类型

使用会话密钥时,您的每秒交易量 (TPS) 将仅限为此密钥所在位置的一项 HSM。集群中额外的 HSM 将不会增加该密钥请求的吞吐量。如果您对同一应用程序使用令牌密钥,则将在集群中所有可用的 HSM 之间,对您的请求进行负载平衡。有关更多信息,请参阅 中的密钥同步和耐久性设置 AWS CloudHSM

管理密钥存储限制

HSM 对每次存储在 HSM 上的令牌和会话密钥的最大数量有限制。有关存储限制的信息,请参阅 AWS CloudHSM 配额。如果应用程序需要的密钥超限,可以使用以下一个或多个策略有效管理密钥:

使用信任包装将密钥存储在外部数据存储:您可通过信任密钥包装,恢复外部数据存储中包装的所有密钥,以克服密钥存储限制。当需要使用此密钥时,您可以将该密钥作为会话密钥解包至 HSM,使用该密钥进行所需的操作,然后丢弃会话密钥。原始密钥数据仍安全地存储在您的数据存储中,以在需要时随时使用。使用信任密钥执行此操作,以最大限度地保护您的安全。

跨集群分配密钥:克服密钥存储限制的另一种策略是将密钥存储至多个集群。按此方法,您可以保留存储在每个集群中的密钥的映射。使用此映射将您的客户端请求路由到带有所需密钥的集群。有关如何从同一个客户端应用程序连接至多个集群的信息,请参阅以下主题:

管理和保护密钥包装

可以通过 EXTRACTABLE 属性将密钥标记为可提取或不可提取。默认情况下,HSM 密钥标记为可提取。

可提取密钥是允许通过密钥包装从 HSM 中导入的密钥。包装的密钥是加密的,必须使用相同的封装密钥进行解包后才能使用。在任何情况下,都不能从 HSM 中导出不可提取密钥。无法将不可提取的密钥设置为可提取。据此,务必考虑您需要密钥为可提取与否,并据此设置相应的密钥属性。

如果您需要在应用程序中进行密钥包装,则应使用信任密钥包装限制您的 HSM 用户,使其只能包装/解包已被管理员明确标记为信任的密钥。有关更多信息,请参阅 管理中的密钥 AWS CloudHSM 中的信任密钥主题。

相关资源

应用程序集成

请遵循本节中的最佳实践,以优化您的应用程序与集群的 AWS CloudHSM 集成的方式。

客户端软件开发工具包 引导程序

将您的客户端软件开发工具包连接至您的集群前,必须对其进行引导。将 IP 地址引导至您的集群时,我们建议尽可能使用 --cluster-id 参数。此方法使用集群中的所有 HSM IP 地址填充您的配置,无需追踪每个单独的地址。这样可以在 HSM 进行维护或可用区中断时,为您的应用程序初始化增加额外弹性。有关更多详细信息,请参阅引导客户端软件开发工具包

进行身份验证,以执行操作

在中 AWS CloudHSM,您必须先对集群进行身份验证,然后才能执行大多数操作,例如加密操作。

使用 CloudHSM CLI 进行身份验证:您可使用单命令模式交互模式,通过 CloudHSM CLI 进行身份验证。使用 login 命令在交互模式下进行身份验证。若要在单命令模式下进行身份验证,必须设置环境变量 CLOUDHSM_ROLECLOUDHSM_PIN。有关执行此操作的详细信息,请参阅 单命令模式。 AWS CloudHSM 建议在应用程序不使用您的 HSM 凭证时安全存储。

使用 PKCS 进行身份验证 #11: 在 PKCS #11 中,在使用 C_ 打开会话后使用 C_Login API 登录。OpenSession每个插槽(集群)只需要执行一项 C_Login。成功登录后,您可以使用 C_ 打开其他会话,OpenSession 而无需执行其他登录操作。有关向 PKCS #11 进行身份验证的示例,请参阅 PKCS #11 库的代码示例

使用 JCE 进行身份验证: AWS CloudHSM JCE 提供程序支持隐式登录和显式登录。选择哪种方法由使用案例而定。我们建议尽可能使用隐式登录,因为如果应用程序与集群断开连接并且需要重新进行身份验证,SDK 将自动处理身份验证。使用隐式登录后,当您使用不允许控制应用代码的集成项时,可为您的应用提供凭证。有关登录方法的更多信息,请参阅 向 JCE 提供程序提供凭证

使用 OpenSSL 身份验证:您可利用 OpenSSL 动态引擎,通过环境变量提供凭证。当不适应时, AWS CloudHSM 建议您安全存储 HSM 凭证。如果可能,您应将环境配置为系统地检索和设置这些环境变量,无需手动输入。有关使用 OpenSSL 进行身份验证的详细信息,请参阅安装 OpenSSL 动态引擎

有效管理应用程序中的密钥

使用密钥属性控制密钥可执行的操作:生成密钥时,使用密钥属性定义一组权限,允许或拒绝对该密钥进行特定类型的操作。我们建议在生成密钥时使用最少属性完成任务。例如,也不应使用 AES 加密密钥包装 HSM 以外的密钥。有关更多信息,请参阅以下客户端软件开发工具包属性页面:

尽可能缓存密钥对象,以最大限度减少延迟:密钥查找操作将查询集群中的每个 HSM。此操作成本高昂,并且无法随集群内的 HSM 数量扩展。

  • 您可通过 PKCS #11,使用 C_FindObjects API 查找密钥。

  • 使用 JCE,您可以使用查找密钥。 KeyStore

为了获得最佳性能, AWS 建议您在应用程序启动期间仅使用一次键查找命令(如findKeykey list),并将返回的密钥对象缓存在应用程序内存中。如果您稍后需要此密钥对象,则应从缓存中检索该对象,而非为每个操作查询此对象,这将增加显著的性能开销。

使用多线程

AWS CloudHSM 支持多线程应用程序,但是对于多线程应用程序,需要注意一些事项。

使用 PKCS #11时,您应该只初始化 PKCS #11 库(调用C_Initialize)一次。应对每个线程分配自己的会话 (C_OpenSession)。不建议在多个线程中使用同一会话。

使用 JCE 时, AWS CloudHSM 提供程序只能初始化一次。不要跨线程共享 SPI 对象实例。例如,Cipher、Signature、Digest、Mac KeyFactory 或 KeyGenerator 对象只能在自己的线程上下文中使用。

处理节流错误

以下情况下,可能会出现 HSM 节流错误:

  • 您的集群未正确扩展,因此无法管理峰值流量。

  • 维护事件期间,您的集群大小没有 +1 冗余。

  • 可用区域中断会导致集群中的可用 HSM 数量减少。

有关如何最好地处理这种情况的信息,请参阅 HSM 节流

为确保您的集群大小足够且不会受到限制, AWS 建议您在您的环境中使用预期的峰值流量进行负载测试。

集群操作的集成重试次数

AWS 可能会出于操作或维护原因更换您的 HSM。为了使您的应用程序能够应对此类情况, AWS 建议您对路由到集群的所有操作实施客户端重试逻辑。对于因替换而导致的操作失败,其后续重试有望成功。

实施灾难恢复策略

为了应对事件,可能需要将流量从整个集群或区域转移。以下各节描述了实现此任务的多种策略。

使用 VPC 对等互连从其他账户或地区访问您的集群:您可以利用 VPC 对等互连从其他账户或地区访问您的 AWS CloudHSM 集群。有关更多信息,请参阅 VPC Peering Guide 中的什么是 VPC 对等连接?。建立对等连接并正确配置安全组后,就可以像往常一样与 HSM IP 地址通信。

从同一个应用程序连接到多个集群:客户端 SDK 5 中的 JCE 提供程序、PKCS #11 库和 CloudHSM CLI 支持从同一个应用程序连接到多个集群。例如,您可有两个活动集群,每个集群位于不同的区域,并且您的应用程序可以同时连接至这两个集群,并在两者之间进行负载平衡,这是正常操作的一部分。如果您的应用程序未使用客户端软件开发工具包 5 (最新 SDK),则无法从同一个应用程序连接到多个集群。或者,您可以保持其他集群的正常运行,如果出现区域性中断,可以将流量转移之另一个集群,以最大限度地减少停机时间。详情请参见相应页面:

恢复备份集群:您可通过现有集群备份,创建新集群。有关更多信息,请参阅 管理 AWS CloudHSM 备份

监控

本节介绍可用于监控集群和应用的多种机制。有关监控的更多详细信息,请参阅 监控 AWS CloudHSM

监控客户端日志

每个客户端软件开发工具包都会写入您可监控的日志。有关日志记录的信息,请参阅 使用客户端软件开发工具包日志

在设计为临时性的平台(例如 Amazon ECS 和)上 AWS Lambda,从文件中收集客户端日志可能很困难。在这些情况下,最佳做法是配置客户端软件开发工具包日志以将日志写入控制台。大多数服务会自动收集此输出并将其发布到 Amazon CloudWatch 日志中,供您保存和查看。

如果您在 AWS CloudHSM 客户端 SDK 之上使用任何第三方集成,则应确保将该软件包配置为将其输出也记录到控制台。此软件包可能会捕获 AWS CloudHSM 客户端 SDK 的输出并将其写入自己的日志文件中。

有关如何在应用程序中配置日志记录选项的信息,请参阅 客户端软件开发工具包 5 配置工具

监控审核日志

AWS CloudHSM 将审核日志发布到您的 Amazon CloudWatch 账户。审核日志来自 HSM,用于跟踪某些需要审核的操作。

您可以使用审核日志来跟踪在 HSM 上调用的、任何管理命令。例如,当您注意到正在执行意外的管理操作时,可触发警报。

有关更多信息,请参阅HSM 审核日志记录的工作原理

监视器 AWS CloudTrail

AWS CloudHSM 与 AWS CloudTrail一项服务集成,该服务提供用户、角色或 AWS 服务在中执行的操作的记录 AWS CloudHSM。 AWS CloudTrail 将所有 API 调用捕获 AWS CloudHSM 为事件。捕获的调用包括来自 AWS CloudHSM 控制台的调用和对 AWS CloudHSM API 操作的代码调用。

您可以使用 AWS CloudTrail 来审核向 AWS CloudHSM 控制平面发出的任何 API 调用,以确保您的账户中没有发生任何不必要的活动。

有关详细信息,请参阅 使用 AWS CloudTrail 和 AWS CloudHSM

监控 Amazon CloudWatch 指标

您可以使用 Amazon CloudWatch 指标来实时监控您的 AWS CloudHSM 集群。指标可按区域、集群 ID 或 HSM ID 集群 ID 分组。

使用 Amazon CloudWatch 指标,您可以配置 Amazon CloudWatch 警报,提醒您注意可能出现的任何可能影响您服务的潜在问题。我们建议配置警报,以监控以下内容:

  • 接近 HSM 上的密钥限制

  • 接近 HSM 上的 HSM 会话计数限制

  • 接近 HSM 上的 HSM 用户计数限制

  • 用于识别同步问题的 HSM 用户数或密钥数差异

  • 不健康的 HSM 可以向上扩展您的集群,直到 AWS CloudHSM 可以解决问题

有关更多详细信息,请参阅使用 Amazon CloudWatch 日志和 AWS CloudHSM 审核日志