主流云厂商KMS对比:AWS KMS / Azure Key Vault / GCP Cloud KMS
说实话,刚开始接触多云环境时,我对各家KMS的理解就是「反正都是管密钥的,换一家能有多大差别?」直到我在一个跨云备份项目里踩了大坑——AWS的密钥导出策略和Azure完全不一样,折腾了两天才找到方案。从那以后,我就养成了习惯:动手迁移前,先把各家KMS的能力图谱摸清楚。
这一章,咱们就对比一下三巨头:AWS KMS、Azure Key Vault、GCP Cloud KMS。我会从产品形态、密钥类型、HSM支持、自动轮换、访问控制、成本等维度拆开看。你想想看,只有搞清楚这些差异,做权限隔离时才能「对症下药」。
产品形态与密钥类型
先说产品形态。AWS KMS 是独立托管的密钥服务,专注对称/非对称密钥管理。Azure Key Vault 则是一个「全能保险柜」——不仅能管密钥,还能存 Secret 和证书。我自己的习惯是:用 Azure 时直接把 SSL 证书也放进去,少维护一套 CA 系统。GCP Cloud KMS 比较纯粹,跟 BigQuery 和 Cloud Storage 的集成做得很顺手。
| 维度 | AWS KMS | Azure Key Vault | GCP Cloud KMS |
|---|---|---|---|
| 密钥类型 | CMK (Customer Master Key) | Key / Secret / Certificate | 对称、非对称 (RSA/EC) |
| 自动轮换 | 可选(每年一次) | 需自行配置 | 支持,可自定义天数 |
| HSM 硬件 | CloudHSM(独立服务) | 托管 HSM 池(企业级) | Cloud HSM(云端加密) |
| 访问控制 | IAM + 密钥策略 | RBAC + 访问策略 | IAM 主帐号 + 条件绑定制 |
| 区域限制 | 区域级密钥,可跨区域复制 | 区域级,多区域 vault 限制 | 全局/区域密钥环 |
| 审计日志 | CloudTrail | Azure Monitor + 诊断日志 | Cloud Audit Logs |
HSM 支持与密钥导出
HSM 是 KMS 的「硬底线」。三家都提供 FIPS 140-2 Level 3 认证的 HSM,但使用方式差很多。
AWS CloudHSM 是一个独立服务,你需要自己管理 HSM 集群,密钥不出硬件。但注意:AWS KMS 自带的密钥并不能直接导出,加密材料锁死在 AWS 内部。我曾经做异地灾备时就因为这点恼火过,后来只能改用 CloudHSM 自己控制密钥生命周期。
Azure Key Vault 提供「托管 HSM 池」,密钥可以导出到本地,但需要提前开启策略。说实话这个设计挺贴心的——既给你硬件级保护,又给你保留一把「备用钥匙」。
GCP Cloud KMS 则可以通过 Cloud EKM 引入外部密钥,也可以直接使用 Google 管理的 HSM。它家有个独特优势:你可以在密钥环级别指定不同的加密算法,适应合规需求。
访问控制与权限隔离
权限隔离是本章的核心,我先做个横向对比:
- AWS:IAM user/role + 密钥策略(resource-based policy)。你可以对一个 CMK 单独配置谁可以加密、谁可以解密。我习惯用条件键限制来源 IP 或 VPC 端点。
- Azure:RBAC 角色(Key Vault Reader / Contributor / Crypto Officer)加上访问策略(每个用户/组单独授权)。Azure 的优点是能跟 AAD 条件访问联动,比如要求 MFA 后才能访问 vault。
- GCP:IAM 将权限粒度控制在「加密者」「解密者」「签名者」「验签者」等角色。最有意思的是,它支持在 bindings 里加
iam.gke.io/service-account这样的条件——我在 GKE 里直接绑 KSA,权限隔离一步到位。
计费与成本考量
你以为 KMS 不烧钱?我告诉你,云厂商就靠这些「看似便宜」的 API 调用赚钱。下面是个粗略对比:
| 维度 | AWS KMS | Azure Key Vault | GCP Cloud KMS |
|---|---|---|---|
| 免费额度 | 每月 20,000 次请求 | 每月 10,000 次事务 | 每月 20,000 次操作 |
| 密钥存储费 | CMK $1/月/个 | Key Vault $0.03/10K 事务 | 密钥环 $0.06/月/版本 |
| HSM 费用 | $1.5/小时(CloudHSM) | $5/月/vault(Premium) | $0.03/小时(Cloud HSM) |
| API 调用(关键) | $0.03 / 10K 请求 | $0.03 / 10K 事务 | $0.06 / 10K 操作 |
嗯,这里有个很容易被忽略的点:AWS KMS 的自动轮换会产生额外的 API 调用,如果密钥数量大,月底账单会吓你一跳。我建议在项目早期就估算好密钥数量和操作频率,必要时用密钥缓存降低调用次数。
说实话,没有哪家 KMS 是「最好」的。选型取决于你的多云策略:你主要用 AWS 做计算?就用 AWS KMS。你依赖 Azure AD 做统一身份?Azure Key Vault 更顺手。你跟 Google 的 BigQuery 绑得死?那逃不开 GCP Cloud KMS。关键是在迁移前,把上面这几个维度的对比做成清单,一栏一栏过,才能避免走弯路。