主流云厂商KMS对比:AWS KMS / Azure Key Vault / GCP Cloud KMS

说实话,刚开始接触多云环境时,我对各家KMS的理解就是「反正都是管密钥的,换一家能有多大差别?」直到我在一个跨云备份项目里踩了大坑——AWS的密钥导出策略和Azure完全不一样,折腾了两天才找到方案。从那以后,我就养成了习惯:动手迁移前,先把各家KMS的能力图谱摸清楚。

这一章,咱们就对比一下三巨头:AWS KMS、Azure Key Vault、GCP Cloud KMS。我会从产品形态、密钥类型、HSM支持、自动轮换、访问控制、成本等维度拆开看。你想想看,只有搞清楚这些差异,做权限隔离时才能「对症下药」。

三大云厂商KMS核心能力对比 AWS KMS • CMK / 自动轮换 • CloudHSM 专用硬件 • 对称 + 非对称密钥 • 与 CloudTrail 审计集成 • 跨区域密钥复制 • 按 API 调用计费 • 可用区级冗余 Azure Key Vault • 密钥 / Secret / 证书 • 托管 HSM 池 • 软删除 + 清除保护 • 与 Azure AD RBAC 集成 • 区域性 / 多区域 vault • 按事务 + 存储容量计费 • 密钥版本管理 GCP Cloud KMS • 对称 + 非对称密钥 • Cloud EKM / 外部密钥 • 全局 / 区域密钥环 • 与 IAM 精细化权限 • 自动轮换(按天配置) • BigQuery / 存储加密集成 • 按密钥版本 + 操作计费 三大厂商均支持:对称密钥加密、HSM 保护、自动轮换、IAM 级权限隔离

产品形态与密钥类型

先说产品形态。AWS KMS 是独立托管的密钥服务,专注对称/非对称密钥管理。Azure Key Vault 则是一个「全能保险柜」——不仅能管密钥,还能存 Secret 和证书。我自己的习惯是:用 Azure 时直接把 SSL 证书也放进去,少维护一套 CA 系统。GCP Cloud KMS 比较纯粹,跟 BigQuery 和 Cloud Storage 的集成做得很顺手。

维度AWS KMSAzure Key VaultGCP Cloud KMS
密钥类型CMK (Customer Master Key)Key / Secret / Certificate对称、非对称 (RSA/EC)
自动轮换可选(每年一次)需自行配置支持,可自定义天数
HSM 硬件CloudHSM(独立服务)托管 HSM 池(企业级)Cloud HSM(云端加密)
访问控制IAM + 密钥策略RBAC + 访问策略IAM 主帐号 + 条件绑定制
区域限制区域级密钥,可跨区域复制区域级,多区域 vault 限制全局/区域密钥环
审计日志CloudTrailAzure Monitor + 诊断日志Cloud Audit Logs
我的经验:选型时别只看功能列表。AWS KMS 的自动轮换比较死板(仅每年),而 GCP 可以按天配置——如果你需要用短生命周期密钥降低泄露风险,GCP 更灵活。

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 向 Azure 迁移密钥时,发现 AWS KMS 的对称密钥无法直接导出明文材料……被迫重加密了上千个文件。血泪教训:做混合云方案前,一定先确认目标平台是否支持「密钥导入」或「外部密钥」模式。

访问控制与权限隔离

权限隔离是本章的核心,我先做个横向对比:

  • 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 管理员角色,并启用 CloudTrail/Azure Monitor/Cloud Audit Logs 做审计。我见过太多事故是因为某个开发用的 personal key 泄露导致整个 vault 被洗劫。

计费与成本考量

你以为 KMS 不烧钱?我告诉你,云厂商就靠这些「看似便宜」的 API 调用赚钱。下面是个粗略对比:

维度AWS KMSAzure Key VaultGCP 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。关键是在迁移前,把上面这几个维度的对比做成清单,一栏一栏过,才能避免走弯路。

额外分享一个小技巧:不管选哪家,都建议启用密钥版本管理。我曾在 Azure Key Vault 里手误删了活跃密钥,幸好软删除功能和版本历史救了我——否则整个加密存储就废了。所以,软删除与版本管理,不是可选项,是必选项。