2. 主流云平台 KMS 服务介绍

做密钥托管,你迟早要跟这三家打交道:AWS KMS、Azure Key Vault、Google Cloud KMS。它们各有各的设计哲学,没有哪一家能一招通吃。这一章我带你把三个平台的核心能力捋一遍,看看各自适合什么场景。

2.1 AWS KMS — 老牌选手,生态最完整

AWS KMS 是最早的云密钥管理服务之一,也是我接触最多的。它的核心是 CMK(Customer Master Key),存储在 FIPS 140-2 Level 2/3 的 HSM 里。说白了,你的主子密钥在硬件里待着,谁都拿不走。

关键概念其实不多,你记住这几个就行:

  • CMK 类型:对称密钥、非对称密钥、HMAC 密钥。我用得最多的是对称 CMK,做 envelope encryption 非常方便。
  • 密钥存储:CMK 本身存在 HSM 里,但你也可以导入自己的密钥材料(BYOK)。
  • 自动轮转:每年自动轮转一次,可以自己配。我个人习惯把轮转周期改成 180 天,合规要求更严的项目会用到。
  • 审计集成:所有 KMS 操作都记在 CloudTrail 里,谁用了哪个密钥一目了然。
一点经验:我在项目中遇到过 CMK 权限配置的坑——跨账号访问时,光配 IAM 策略不够,还得在 key policy 里显式授权。你想想看,两个策略都得对得上才行。建议先写好 key policy 再挂 IAM,顺序别搞反。

下面这个命令,是创建对称 CMK 的标准姿势:

aws kms create-key \
    --description "生产环境主密钥" \
    --key-spec SYMMETRIC_DEFAULT \
    --tags TagKey=Env,TagValue=Prod

创建完记得用 aws kms list-keys 确认一下。我吃过一次亏——命令执行成功但没注意 Region,结果密钥在香港区,业务跑在新加坡,白白浪费时间排查。

2.2 Azure Key Vault — 不止管密钥,连证书一起管

Azure Key Vault 跟 AWS KMS 不太一样,它更像一个统一的 secrets 保险箱。密钥、机密、证书全放一起管。为什么会这样?因为 Azure 的客户很多是 .NET 企业,需要一把搞定证书和连接字符串。

核心概念:

  • 密钥(Key):RSA、EC、对称密钥。支持 BYOK,也可以通过 HSM 保护。
  • 机密(Secret):密码、连接字符串、API 。说白了就是存敏感文本的。
  • 证书(Certificate):支持自动续期和签发。我记得有一次帮客户迁移证书,Key Vault 的自动续期帮了大忙,省掉了写 cron job 的麻烦。
  • 访问策略:有两种模式,老式的 Access Policy 和新的 RBAC。我建议用 RBAC,更灵活也更好审计。
注意:Key Vault 的防火墙默认是全开的。你在生产环境一定要打开 "允许受信任的 Microsoft 服务" 并配置 IP 白名单。我曾经见过一个客户把所有策略设成 "Allow all",结果存储账号的密钥被外部扫描工具枚举出来了。嗯,这种低级错误其实很容易犯。

创建密钥的命令长这样:

az keyvault key create \
    --vault-name my-prod-vault \
    --name data-protection-key \
    --protection hsm \
    --kty RSA-HSM \
    --size 4096

注意 --protection hsm 参数。选 "software" 便宜但安全等级低,选 "hsm" 得先创建 Premium 层 vault。预算够的话直接上 HSM,别省那个钱。

2.3 Google Cloud KMS — 全局设计,天生多云

Google Cloud KMS 的设计强调「全局性」。它的核心组织单位是 Key Ring(密钥环),密钥环可以跨 Region 绑定,实现全球统一管理。这个思路跟你想象中的多云架构天然契合。

核心概念:

  • 密钥环:密钥的逻辑分组。一个密钥环可以包含多个密钥版本。
  • 密钥版本:不可变。每次轮转就生成一个新版本,旧版本只用来解密已加密数据。
  • 自动轮转:按时间窗口配置,比如每 90 天轮一次。我个人习惯设 180 天,跟 AWS 保持一致,方便内部审计统一口径。
  • 审计集成:所有操作记入 Cloud Audit Logs,跟 Cloud Logging 原生打通。

创建密钥的命令:

gcloud kms keys create my-app-key \
    --keyring my-prod-ring \
    --location global \
    --purpose encryption \
    --rotation-period 180d \
    --next-rotation-time 2025-12-01T00:00:00Z

这里有个细节:--location global 让密钥在全球所有 Region 都可访问。如果你的业务有数据驻留要求,记得指定具体 Region,比如 asia-east1。

2.4 三平台核心对比

光说概念不过瘾,咱们直接上表格。我挑了几个你最关心的维度:

维度 AWS KMS Azure Key Vault Google Cloud KMS
密钥类型 对称 / 非对称 / HMAC 密钥 / 机密 / 证书 对称 / 非对称
HSM 等级 FIPS 140-2 Level 2/3 FIPS 140-2 Level 2 FIPS 140-2 Level 3
自动轮转 支持(可自定义周期) 支持(需单独配置) 支持(按时间窗口)
审计集成 CloudTrail Azure Monitor Cloud Audit Logs
定价模式 按月 / API 调用次数 按操作量 / 存储量 按密钥版本 / API 调用
CLI 入口 aws kms az keyvault gcloud kms

看完表格,你大概心里有数了。但光有表格还不够,我用一张图把三个平台的架构关系画出来,方便你建立整体认知。

三大云平台 KMS 服务概览 三大云平台 KMS 服务概览 AWS KMS 密钥管理与 HSM Azure Key Vault 密钥、机密与证书 Google Cloud KMS 全局密钥与自动轮转 共性能力:HSM 级别安全 · 自动密钥轮转 · 细粒度权限控制 · 审计日志 与云原生服务深度集成 · 多区域复制 · 合规认证(SOC2 / PCI DSS / ISO 27001)

2.5 选型建议:到底用哪个?

很多同学问我:三个平台到底选哪个?我的回答永远是——看你主账号在哪。

  • 主力在 AWS:别犹豫,直接上 AWS KMS。CloudTrail + Lambda + KMS 的自动化链路太成熟了,社区资料也最多。
  • 主力在 Azure:用 Key Vault,尤其如果你有证书管理需求。它的一键续期和 RBAC 策略比另外两家顺手。
  • 主力在 GCP:Cloud KMS 的全局密钥环设计很适合多云架构。我手头有个项目就是用 GCP KMS 统一管理 AWS 和 Azure 的密钥——当然,这是通过 Cloud External Key Manager 做的。
我的建议:别在多云之间来回搬密钥。选定一个主 KMS 平台,其他云平台通过 External Key Store 或 BYOK 的方式引用过来。你想想看,密钥分散在三个平台,光审计日志就得查三个地方,运维成本翻倍。

这一章我们走马观花看了三个平台的 KMS 能力。记住了:没有完美的平台,只有适合你当前架构的工具。实操的时候,每个平台都有一些小脾气——比如 Azure Key Vault 的 RBAC 传播延迟、AWS KMS 的跨账号策略写法、GCP KMS 的密钥环命名限制——这些在后面的章节里我会逐一拆解。