主流云KMS选型:AWS、Azure、GCP到底怎么选?

说实话,每次帮团队选云KMS,我都觉得像在挑工具。没有的好坏,只有适不适合。今天我就把三家主流云服务商的KMS掰开揉碎讲清楚。

我自己在项目里踩过的坑,不算少。最惨的一次,是选错了密钥托管方式,结果合规审查差点没过。嗯,从那以后,我养成了一个习惯:先看管控粒度,再看集成深度。

AWS KMS:生态最成熟,但“权责分离”你得懂

AWS KMS是业界最早推出的云密钥管理服务之一。它最大的特点,我觉得是与AWS生态的深度绑定。S3、RDS、Lambda…几乎你能想到的AWS服务,KMS都原生支持。

核心概念就两个:CMK(客户主密钥)和Data Key(数据密钥)。CMK永远留在KMS里,不出去。你的应用只能拿到加密后的Data Key。

我记得有一次帮客户做加密改造。对方说:“我要用自己的HSM。”我说:“行,那就用CloudHSM + KMS的Custom Key Store。”结果他纠结了三天——因为CloudHSM的管理权限和KMS是分开的。

避坑指南:我曾经见过一个团队把CMK的key administrator和user混在一起。结果工程师离职时,密钥直接被删了……数据全废。记住:AWS KMS的密钥管理员和密钥使用者,一定!一定!要分开!

AWS KMS的自动轮转功能很方便,但注意:它只支持每年一次。如果你的合规策略要求每季度轮转一次……嗯,那就得自己写Lambda了。

特性 AWS KMS Azure Key Vault GCP KMS
管理模型 基于CMK+数据密钥 基于密钥+密钥版本 基于CryptoKey+KeyRing
HSM选项 Custom Key Store(需额外CloudHSM) 内置HSM池 Cloud HSM(需单独创建)
自动轮转 支持(1年/次) 手动或通过证书生命周期 支持(可配置周期)
集成服务范围 极广(200+服务原生集成) Azure原生服务+微软生态 GCP服务+开源工具
定价模型 按月+API调用次 按密钥数量+操作类型 按月+版本数量+API调用

Azure Key Vault:对微软生态用户最友好

Azure Key Vault其实不只是管密钥。它还管证书和机密。你想想看,一个服务搞定三件事,省多少事?

我个人习惯在Azure Key Vault里,把机密和密钥放在不同的vault里。为什么?因为vault的防火墙策略是全局的。一旦搞混,你老婆可能连你数据库密码都能读到……

Azure Key Vault有个特点:软删除默认开启。这玩意在初期可能会让你觉得麻烦——删个东西还要等90天?但我在生产环境遇到过三次事故,每次都是靠软删除救回来的。嗯,真香。

它支持RBAC和vault访问策略两套权限体系。我建议你用RBAC,因为和Azure AD一致,好审计。别问为什么,问就是我被审计过——旧vault用的是vault策略,结果审计工具读不出来,得手工对表。

个人小建议:如果你在用Azure Key Vault做密钥轮转,不要手动更新应用配置。用Key Vault的REST API + Azure SDK。在项目里我见过有人把密钥版本号硬编码在配置文件里,然后轮转一次,重启一遍……太累了。

GCP KMS:简单、干净、适合开源玩家

GCP KMS有一个好处:概念少。它这儿的逻辑是:一个KeyRing → 多个CryptoKey → 每个CryptoKey有多个版本。

说白了,KeyRing就是个逻辑分组。你可以按环境、按业务域、按地区分。我个人习惯按地区分——因为GCP的密钥是区域稀缺资源。万一你亚太区的KeyRing挂了,美西的密钥又用不了……嗯,所以最好跨区域多建几个。

GCP KMS在自动轮转上比AWS灵活。你可以配置按天轮转,没错,按天。但说实话,我从来没用过低于90天的周期——轮转太频繁,你对版本的管理成本就高了。

它在开源社区的集成度很高。你想想看,Terraform、Vault、Kubernetes的Secrets Store CSI Driver……GCP KMS都原生对接。如果你的团队用这些工具,GCP会是首选。

我曾经在GCP上做过一次密钥自动轮转实验,结果忘了给轮转的版本设置“primary”。所有应用一下子都找不到加密密钥了……生产环境停了5分钟。教训是:轮转后一定要手动指定primary版本,或者用代码控制。

选型对比:三个维度帮你下决定

你可能会问:“这么多差异,我到底该选哪个?”

我自己的经验,看三个维度就够了:

  1. 技术栈锁定度:如果你们全团队都在AWS,或者全是Azure,那就别折腾了。能省的事别自己扛。
  2. 合规要求:如果你的合规审计要求FIPS 140-2 Level 3……那AWS的Custom Key Store + CloudHSM几乎是唯一选择。Azure和GCP的HSM默认是Level 2。
  3. 团队运维能力:如果你们是小团队,没专人管密钥,GCP KMS或Azure Key Vault会更省心。因为这两家帮你管了底层的HSM集群。
我个人习惯:快速做个“POC实验”——先用最小可消耗资源(比如每月1000次API调用)在三个平台上各跑一周。看哪个平台的文档你读起来最顺、API响应最快、日志最好查。选那个。真的,实际体验差异远超纸面参数。

核心知识结构图

下面这张图,是我基于多年实践总结出来的选型逻辑。你可以把它当作一个快速决策树:

云KMS选型决策框架 选型起点:技术栈 AWS KMS Azure Key Vault GCP KMS CMK+Data Key Custom Key Store 密钥+证书+机密 RBAC+软删除 KeyRing+CryptoKey 灵活轮转周期 共享考虑因素:合规要求 | 团队运维能力 | 预算 FIPS 140-2 Level 3 / auto rotation / HSM native support 选择最匹配的云KMS 实际建议:不纠结于理论对比 做一次60分钟的小范围POC 哪个运行顺手 + 文档清晰,就选哪个

选型实战总结

说到底,这三家没有谁是“最强”的。你想想看,都是大厂,基础能力都过硬。

我个人的实战体验是:

  • 要做最复杂、多区域、高合规的加密系统? AWS KMS + CloudHSM 组合拳最稳。
  • 团队在微软生态里,或者你需要统一管理密钥+证书+机密? Azure Key Vault 别犹豫。
  • 开源工具狂魔,或者预算敏感? GCP KMS 简单、便宜、好集成就够了。
最后一次提醒:无论你选哪个云KMS,最好先把“密钥删除保护”打开。软删除、多版本、跨区域备份——这三样缺一样,某天凌晨3点你可能会收到一份“密钥被删”的警报,然后你老婆会看着你爬起来去公司……嗯,我经历过。