Key管理

CloudHSM 核心就两件事,管理用户和管理Key,本节我们介绍管理Key。

CloudHSM 操作
├── 管理 Users(用户管理)
│   ├── 创建/删除用户
│   ├── 修改密码
│   └── 设置权限(Admin/CU)
│
└── 管理 Keys(密钥管理)
    ├── 创建/删除密钥
    ├── 导入/导出密钥
    ├── 共享密钥
    └── 使用密钥(加密/解密/签名)

key的同步机制

问题:

你在 HSM 1 上创建了一个密钥
        │
        ▼
下一次操作可能被路由到 HSM 2
        │
        ▼
HSM 2 还没有这个密钥 → ❌ 失败!

解决方案是密钥同步,CloudHSM 提供两种同步方式:

类型 说明 时机
Server-side Sync 服务端后台同步 异步,有延迟
Client-side Sync 客户端主动同步 创建时立即同步

流程如下:

                创建密钥
                   │
                   ▼
               ┌───────┐
               │ HSM 1 │ ← 密钥先在这里创建
               └───┬───┘
                   │
      ┌────────────┼────────────┐
      │            │            │
      ▼            ▼            ▼
 Client-side   Server-side   
    Sync          Sync       
 (立即同步)    (后台异步)     
      │            │            
      └────────────┼────────────┘
                   │
                   ▼
               ┌───────┐
               │ HSM 2 │ ← 密钥同步到这里
               └───────┘

两种同步方式对比:

特性 Server-side Sync Client-side Sync
触发时机 后台自动 创建密钥时立即
同步速度 较慢(有延迟) 较快(实时)
密钥持久性 有风险窗口 更安全
配置 默认启用 需要配置

举例来说:

最坏情况(只有 Server-side Sync):

1. 在 HSM 1 创建密钥
2. 还没同步到 HSM 2
3. HSM 1 突然故障
4. 密钥丢失!所有加密数据无法解密!

Client-side Sync 解决:

1. 在 HSM 1 创建密钥
2. 立即同步到 HSM 2
3. 即使 HSM 1 故障
4. 密钥在 HSM 2 还有 

什么时候关心Client-side Sync

场景 是否需要关注
普通使用 默认就好
创建密钥后立即使用 可能需要
高可用/关键业务 确保 Client-side 开启

新版 SDK 默认开启,一般不用管

创建key

在创建key之前,先创建一个CU,然后用这个CU登录:

image-20260226165308829

aws-cloudhsm >  login --username keyuser1 --role crypto-user
Enter password: 
{
  "error_code": 0,
  "data": {
    "username": "keyuser1",
    "role": "crypto-user"
  }
}

创建key参考: https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm-cli-generate-symmetric-keys.html

创建symmetric keys

AES Key 专门用于 AES 加密解密;Generic Secret 是通用密钥材料,用于 HMAC、密钥派生等非加密场景。

aws-cloudhsm > key generate-symmetric generic-secret \
    --label generic-secret-example \
    --key-length-bytes 32


aws-cloudhsm > key generate-symmetric aes \
    --label aes-example \
    --key-length-bytes 32

image-20260226172053746

创建asymmetric keys

key generate-asymmetric-pair rsa \
    --public-exponent 65537 \
    --modulus-size-bits 2048 \
    --public-label rsa-public-example \
    --private-label rsa-private-example

image-20260226172155382

查看key

key list

image-20260226172401682

搜索key:

 key list --filter attr.label="my_unique_key_label" --verbose
 
 key list --filter attr.key-type=rsa attr.class=private-key --verbose

删除key

key list --filter attr.label="my_key_to_delete" --verbose  # 先搜索
 key delete --filter attr.label="my_key_to_delete" # 再删除
 key list --filter attr.label="my_key_to_delete"  # 最后确认删除