密钥生命周期管理对比:创建、启用、禁用、计划删除

密钥的生命周期管理,说白了就是一把密钥从出生到销毁的全过程。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 vs Azure Key Vault AWS KMS Azure Key Vault 创建:对称/非对称/BYOK 创建:软删除默认开启 启用/禁用:暴力阻断 启用/禁用:可配置过期 轮转:自动(每年一次) 轮转:手动创建新版本 删除:计划删除 7-30天 删除:软删除 30-90天 密钥生命周期:创建 → 启用 → 版本轮转 → 禁用 → 计划删除 → 还原/清除

五、实操中的关键差异

我把最常遇到的几个区别整理成了一张快速参考表:

场景 AWS KMS Azure Key Vault
创建后立即生效? 是 是,但可设激活日期
禁用后影响现有解密? 立即全部失效 只有新操作失败,缓存仍有效
版本管理 自动轮转,无版本概念 手动版本,需应用引用
删除保护期 7-30天(计划删除) 30-90天(软删除)
删除后是否计费 等待期内仍计费 软删除期间不计费
强制清除 不支持(需联系客服) 支持 purge(需高权限)

特别提醒:我曾经在Azure里误执行了purge,把刚软删除的密钥彻底清掉了,数据再也没法找回。所以purge操作建议只在测试环境使用,生产环境一定要启用清除保护。

总结一下:如果你希望自动化程度高、运维简单,AWS KMS的生命周期管理更省心;如果你需要精细控制每个版本的激活时间、过期策略,并且能接受手动管理版本,Azure Key Vault的模型更适合。