KMS支持把 CloudHSM 作为 KMS 的后端存储,密钥实际存在用户的 HSM 里,但通过 KMS API 使用。适合需要与 AWS 服务集成、但又要满足密钥独占 HSM 合规要求的场景。
┌─────────────────────────────────────────────────────────┐
│ 用户应用 │
│ │ │
│ KMS API 调用 │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ KMS │ │
│ │ ┌─────────────────┐ ┌─────────────────────┐ │ │
│ │ │ 标准 KMS 密钥 │ │ CloudHSM Key Store │ │ │
│ │ │ (AWS 托管 HSM) │ │ (用户的 CloudHSM) │ │ │
│ │ └─────────────────┘ └──────────┬──────────┘ │ │
│ └─────────────────────────────────────┼───────────┘ │
│ │ │
│ ▼ │
│ ┌────────────────────────┐ │
│ │ CloudHSM 集群 │ │
│ │ (用户独占的 HSM 硬件) │ │
│ └────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
使用大致步骤如下:
| 场景 | 为什么适合 |
|---|---|
| 合规要求密钥存在独占 HSM | 审计/监管要求,不能用多租户 HSM |
| 需要完全控制密钥 | AWS 无法访问用户的密钥 |
| 想用 KMS API 的便捷性 | 但又要 CloudHSM 的安全性 |
| 与 AWS 服务集成 | EBS、S3、RDS 等可直接用 KMS Key |
| FIPS 140-2 Level 3 要求 | CloudHSM 满足此认证 |
| 特性 | 直接用 CloudHSM | KMS + CloudHSM Key Store |
|---|---|---|
| API | PKCS#11/JCE | KMS API |
| 集成 AWS 服务 | 困难 | 简单(EBS/S3/RDS 等) |
| 开发复杂度 | 高 | 低 |
| 密钥控制 | 完全控制 | 完全控制 |
| 延迟 | 较低 | 略高(多一层) |
在创建CKS前,要先在cloudHSM里建好一个用户:
user create --username kmsuser --role crypto-user --password xxxx
这是因为KMS属于连接CloudHSM的客户端,如果不提前创建好,KMS就连接不上它:

进入KMS服务,里面有CloudHSM Key store,进入创建:

为CKS命名;选择之前创建的CloudHSM集群;另外为了允许CKS与此CloudHSM集群安全通信,它必须能够访问用于验证HSM集群所提供证书的trust anchor;注意密码部分要和上面保持一致:

最后点击创建。这一步同样可以用cli来完成:
# 1. 创建 Custom Key Store
aws kms create-custom-key-store \
--custom-key-store-name my-cloudhsm-keystore \
--cloud-hsm-cluster-id cluster-xxxxx \
--key-store-password <CU密码> \
--trust-anchor-certificate file://customerCA.crt
创建后的页面:

进行连接:

连接步骤最多可能需要20分钟,如果未能完成或状态为 FAILED,我们应参考 CKS故障排除
文档:

这一步对应的CLI:
# 2. 连接 Key Store
aws kms connect-custom-key-store \
--custom-key-store-id cks-xxxxx
连接成功后状态变成connected:
