和KMS Customer Key Store集成

KMS支持把 CloudHSM 作为 KMS 的后端存储,密钥实际存在用户的 HSM 里,但通过 KMS API 使用。适合需要与 AWS 服务集成、但又要满足密钥独占 HSM 合规要求的场景。

原理

┌─────────────────────────────────────────────────────────┐
│                     用户应用                             │
│                        │                                │
│                   KMS API 调用                           │
│                        │                                │
│                        ▼                                │
│  ┌─────────────────────────────────────────────────┐    │
│  │                    KMS                           │   │
│  │  ┌─────────────────┐    ┌─────────────────────┐  │   │
│  │  │  标准 KMS 密钥   │    │ CloudHSM Key Store   │ │   │
│  │  │  (AWS 托管 HSM)  │    │ (用户的 CloudHSM)      │ │   │
│  │  └─────────────────┘    └──────────┬──────────┘ │   │
│  └─────────────────────────────────────┼───────────┘   │
│                                        │               │
│                                        ▼               │
│                           ┌────────────────────────┐   │
│                           │     CloudHSM 集群       │   │
│                           │   (用户独占的 HSM 硬件)    │   │
│                           └────────────────────────┘   │
└─────────────────────────────────────────────────────────┘

使用大致步骤如下:

  1. 创建 CloudHSM 集群并激活
  2. 在 KMS 创建 Custom Key Store,关联到 CloudHSM
  3. 在 Custom Key Store 中创建 KMS Key,密钥材料实际生成并存储在 CloudHSM
  4. 应用通过 KMS API 使用密钥,KMS 内部调用 CloudHSM

适合场景

场景 为什么适合
合规要求密钥存在独占 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 等)
开发复杂度
密钥控制 完全控制 完全控制
延迟 较低 略高(多一层)

创建Custom Key store

在创建CKS前,要先在cloudHSM里建好一个用户:

user create --username kmsuser --role crypto-user --password xxxx

这是因为KMS属于连接CloudHSM的客户端,如果不提前创建好,KMS就连接不上它:

image-20260226200241127

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

image-20260226193628200

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

image-20260226194740850

最后点击创建。这一步同样可以用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

创建后的页面:

image-20260226194943328

进行连接:

image-20260226195032933

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

image-20260226195048849

这一步对应的CLI:

# 2. 连接 Key Store
aws kms connect-custom-key-store \
    --custom-key-store-id cks-xxxxx

连接成功后状态变成connected:

image-20260226210648826