

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

# AWS CloudHSM 密钥管理最佳实践
<a name="bp-hsm-key-management"></a>

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

## 选择正确密钥类型
<a name="bp-choose-the-right-key"></a>

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

## 管理密钥存储限制
<a name="bp-key-storage-limits"></a>

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

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

**跨集群分配密钥**：克服密钥存储限制的另一种策略是将密钥存储至多个集群。按此方法，您可以保留存储在每个集群中的密钥的映射。使用此映射将您的客户端请求路由到具有所需密钥的集群。有关如何从同一个客户端应用程序连接至多个集群的信息，请参阅以下主题：
+ [使用 JCE 提供程序连接到多个 AWS CloudHSM 集群](java-lib-configs-multi.md)
+ [使用 PKCS \#11 库进行多插槽配置 AWS CloudHSM](pkcs11-library-configs-multi-slot.md)

## 管理和保护密钥包装
<a name="best-practices-key-protection"></a>

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

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

如果您需要在应用程序中进行密钥封装，则应使用可信密钥封装来限制您的 HSM 用户只能使用已被管理员明确标记为可信的 wrap/unwrap 密钥。有关更多信息，请参阅 [键入 AWS CloudHSM](manage-keys.md) 中的信任密钥主题。

相关资源
+ [包装和解包功能](pkcs11-mechanisms.md#pkcs11-mech-function-wrap-unwrap)
+ [JCE 密码函数](java-lib-supported_5.md#java-ciphers_5)
+ [AWS CloudHSM 客户端 SDK 5 支持的 Java 密钥属性](java-lib-attributes_5.md)
+ [CloudHSM CLI 的密钥属性](cloudhsm_cli-key-attributes.md)