密钥生命周期管理对比:创建、启用、禁用、计划删除
密钥的生命周期管理,说白了就是一把密钥从出生到销毁的全过程。AWS KMS 和 Azure Key Vault 在这方面思路很像,但细节差异不少。我在好几个迁移项目里都踩过这些坑,今天咱们一项项掰开来看。
一、密钥的创建
两家云厂商都支持「一键创建」和「自己带钥匙」(BYOK)两种方式。
AWS KMS
创建时你得选好类型:对称密钥(默认)还是非对称密钥。我习惯叫它「顾客主密钥」(CMK)。
- 对称密钥:加密和解密用同一把钥匙,性能高,适合大多数场景。
- 非对称密钥:公钥/私钥对,用于签名验证或跨平台加密。
- BYOK:你在本地生成密钥材料,然后导入KMS。嗯,这里要注意——导入的密钥不会自动轮转,你得自己管。
个人习惯:我一般优先用AWS托管的对称密钥(aws/xxx),省心。只有合规要求特别严的项目,我才走BYOK。
创建时还可以加标签、密钥策略(谁能用、谁能管理),这个后面章节会细讲。
Azure Key Vault
Azure 分两种保险柜:Key Vault (标准/高级) 和 Managed HSM。前者便宜,后者更安全但贵。
- 软创建:默认开启软删除(30天保护期),你创建的密钥不会立刻消失。我第一次用Azure时以为没删干净,其实是软删除状态。
- 非对称密钥:Azure 也支持 RSA/EC,但创建时得指定「激活日期」和「过期日期」——AWS KMS 没有强制过期。
- BYOK:Azure 叫「HSM受保护密钥」,通过Key Vault高级层或Managed HSM导入。流程比AWS复杂,得生成密钥交换密钥(KEK)。
核心差异:AWS KMS 创建时默认立即生效,而 Azure Key Vault 创建后状态默认是「已启用」,但可以结合策略控制生效时间。
二、密钥的启用与禁用
这对兄弟操作看起来简单,但影响面很大。
| 操作 | AWS KMS | Azure Key Vault |
|---|---|---|
| 启用 | 直接敲 enable-key-rotation 或改密钥状态为 Enabled |
设置密钥属性 enabled=true |
| 禁用 | 改状态为 Disabled,所有加密/解密请求立刻失败 |
设置 enabled=false,客户端调用会返回 403 或 410 |
| 影响范围 | 影响所有绑定了该CMK的加密操作,包括已加密数据的解密 | 只影响密钥操作,已加密的数据只要客户端本地缓存了密钥材料就能解 |
| 授权要求 | 需要 kms:EnableKey / kms:DisableKey 权限 | 需要 Key Vault Contributor 及以上角色 |
我在项目中遇到过一回:运维误禁用了AWS KMS的RDS加密密钥,结果所有RDS读写都挂了。AWS的禁用是「暴力」的——只要密钥状态是 Disabled,任何加解密请求都返回 AccessDeniedException。Azure这边稍微温和些,它会在密钥元数据层面拦住操作,但如果你在客户端缓存了密钥,仍然能解旧数据。
避坑指南:我曾经在生产环境禁用Azure密钥前没检查关联服务,导致大量Session失效。建议禁用前先审计哪些资源绑定了该密钥。
三、密钥的版本管理与轮转
这俩云厂商对「版本」的理解不太一样。
- AWS KMS:没有显式的密钥版本概念。你启用了自动轮转(每年一次),它会自动新建底层密钥材料,但CMK的ARN不变。你永远用同一个CMK ID操作,新的加密请求用新材料,旧解密用旧材料——无缝的。
- Azure Key Vault:每个密钥对象有版本号(如
mykey/1,mykey/2)。你轮转时得主动创建新版本,旧版本可以保留但标记为已禁用或已过期。应用程序需要显式引用版本号,否则默认用最新版本。
我的见解:如果你不想管版本,AWS的自动轮转是真省心。Azure的版本管理更像一把双刃剑——灵活但容易忘更新客户端代码。
四、计划删除与还原
删除密钥是高风险操作,两家都设计了保护机制。
| 特性 | AWS KMS | Azure Key Vault |
|---|---|---|
| 删除方式 | 计划删除(设置等待天数,7~30天) | 软删除(默认30天,可延长到90天) |
| 还原 | 在等待期内取消计划删除即可恢复 | 软删除期内可以恢复,过期后永久删除 |
| 等待期行为 | 密钥状态变为 PendingDeletion,所有操作不可用 |
密钥状态变为 disabled,但可以配置保留期内的操作策略 |
| 强制删除 | 不支持跳过等待期(除非联系AWS客服) | 支持逐出(purge),但需要 Managed HSM 或 Key Vault 高级层权限 |
我记得有个项目因为测试用密钥忘记删了,账单上多了一笔KMS费用。AWS这边计划删除后密钥还是计费的,直到等待期结束。Azure在软删除期间不再计费(密钥已禁用),这点更厚道。
小技巧:清理旧密钥时,先在Azure里禁用并观察几天,确保没有异常告警,再执行 purge。
五、实操中的关键差异
我把最常遇到的几个区别整理成了一张快速参考表:
| 场景 | AWS KMS | Azure Key Vault |
|---|---|---|
| 创建后立即生效? | 是 | 是,但可设激活日期 |
| 禁用后影响现有解密? | 立即全部失效 | 只有新操作失败,缓存仍有效 |
| 版本管理 | 自动轮转,无版本概念 | 手动版本,需应用引用 |
| 删除保护期 | 7-30天(计划删除) | 30-90天(软删除) |
| 删除后是否计费 | 等待期内仍计费 | 软删除期间不计费 |
| 强制清除 | 不支持(需联系客服) | 支持 purge(需高权限) |
特别提醒:我曾经在Azure里误执行了purge,把刚软删除的密钥彻底清掉了,数据再也没法找回。所以purge操作建议只在测试环境使用,生产环境一定要启用清除保护。
总结一下:如果你希望自动化程度高、运维简单,AWS KMS的生命周期管理更省心;如果你需要精细控制每个版本的激活时间、过期策略,并且能接受手动管理版本,Azure Key Vault的模型更适合。