主流云KMS对比:AWS KMS、Azure Key Vault、GCP KMS、阿里云KMS特性对比
做密钥管理最头疼的就是选平台。你想想看,AWS、Azure、GCP、阿里云,每家都有一套KMS,长得还都不太一样。我在项目里做了好几轮适配,踩过坑也总结过经验。今天就把它们拉出来,正面比一比。
先上一张整体框架图,帮你快速建立认知:
下面我们逐个对比,我会直接把每个云KMS的核心特性、我的使用感受以及踩过的坑都摊开来说。
一、密钥类型与HSM支持
先说最基础的——你用它做什么样的密钥。对称密钥加解密,非对称密钥签名验签,HSM做硬件隔离。各家支持程度不一。
| 云KMS | 对称密钥 | 非对称密钥 | 第三方HSM支持 |
|---|---|---|---|
| AWS KMS | ✓ | ✓(RSA/ECC) | CloudHSM |
| Azure Key Vault | ✓ | ✓(RSA/ECC) | Managed HSM |
| GCP KMS | ✓ | ✓(仅RSA/EC) | Cloud HSM |
| 阿里云KMS | ✓ | ✓(RSA/ECC/SM2) | 专属KMS + 国密HSM |
我的经验:阿里云的SM2国密支持很突出,国内合规场景必须用。但记得——默认创建的是对称密钥,如果你要用非对称做签名,创建时就要指定,后面不能改。
我在项目中遇到一个坑:AWS KMS 的非对称密钥在做签名时,Payload 大小有限制(4096 字节),大文件得先哈希。Azure Key Vault 没有这个限制,但API调用频率更低。嗯,这里要注意。
二、密钥轮换机制
密钥轮换是KMS的核心能力。好的轮换能让你在密钥泄露后快速止血。各家实现方式不一样:
- AWS KMS:自动轮换(每年一次)或手动创建新密钥版本。自动轮换不改变密钥 ARN,非常方便。
- Azure Key Vault:没有自动轮换,需要自己写脚本或配合 Event Grid 触发。但 Key Vault 支持密钥版本,轮换逻辑简单。
- GCP KMS:自动轮换,但周期可配置(30 天到无限)。GCP 的轮换是创建一个新的密钥版本,旧版本保留,解密时自动用最新加。
- 阿里云 KMS:支持自动轮换和手动轮换。自动轮换周期可设为 365 天,但在 2023 年之前必须手动创建新版本。
我曾经踩过一个大坑:在Azure Key Vault里用自动轮换脚本,结果轮换时旧的访问策略没迁移,导致应用立即解密失败。你想想看,深夜两点被报警叫醒……后来我每次轮换前都会用"软轮换"测试:先创建一个新版本,等流量转移后再禁掉旧版本。
三、访问控制策略模型
访问控制是安全的第一道门。每家都有自己的一套策略语言,但本质上都是"谁对什么密钥能做什么操作"。
| 云KMS | 授权模型 | 支持密钥级别策略 | 继承组织策略 |
|---|---|---|---|
| AWS KMS | IAM + 密钥策略 | ✓ | SCP |
| Azure Key Vault | RBAC + 访问策略 | ✓(Azure Policy) | 管理组 |
| GCP KMS | IAM + 角色 | ✓(自定义角色) | 组织策略 |
| 阿里云KMS | RAM + 资源策略 | ✓ | 资源目录 |
我个人的习惯是:能用密钥策略优先用密钥策略,因为它直接绑在密钥上,不管IAM怎么变都不会误伤。但Azure Key Vault的访问策略是每个密钥独立的,当你有几十个Key Vault时,管理起来特别痛苦。
一点小技巧:GCP KMS 的 IAM 角色可以细化到"加密者"和"解密者"两种角色。尽量把加密和解密权限分开,避免开发人员能解密生产数据。阿里云也支持类似的分级授权。
四、合规认证与安全等级
选型时,合规要求往往是硬性指标。我整理了一张对照表:
| 认证 | AWS KMS | Azure Key Vault | GCP KMS | 阿里云 KMS |
|---|---|---|---|---|
| FIPS 140-2 Level 2/3 | ✓ | ✓ | ✓ | ✓(国密) |
| PCI DSS | ✓ | ✓ | ✓ | ✓ |
| SOC 2/3 | ✓ | ✓ | ✓ | ✓ |
| FedRAMP | ✓ | ✓ | ✓ | ✗ |
| 等保三级 | ✗ | ✗ | ✗ | ✓ |
| 国密 SM2/SM4 | ✗ | ✗ | ✗ | ✓ |
阿里云在国密和等保合规上完胜。但如果你要做全球化部署,AWS 和 Azure 的 FedRAMP 认证是刚需。我的一个项目就因为这个被卡了三个月,最后从阿里云迁移到了 AWS。
五、API 与 SDK 集成体验
接下去聊点实际的——开发好不好用。
- AWS KMS:SDK 最成熟,文档最全。我还记得第一次用Boto3调用 AWS KMS,一行代码就完成加解密,真的很爽。但有一个坑:AWS KMS 的 API 默认有每秒 5000 次调用限制,需要提前提工单扩容。
- Azure Key Vault:RESTful API,Python/Java/.NET SDK 都很完善。不过访问速度是短板——尤其是在东南亚区域,延迟经常超过 200ms。我在做支付场景时吃过这个亏。
- GCP KMS:gcloud 命令行和客户端库很顺手,支持 gRPC 协议。GCP 的 KMS 是全局服务,但 latency 反而比区域性强。我建议关键业务一定绑定区域密钥。
- 阿里云 KMS:SDK 支持四种语言(Java/Python/Go/.NET),国内使用延迟最低。但国际区域资源较少,曾经有一次我在新加坡区域创建密钥用了 10 秒才返回。
一句话总结我的选型建议:
- 你如果全部在 AWS 上 -> 无脑 AWS KMS,集成最顺。
- 你主要用 Azure + 大量 .NET 应用 -> Azure Key Vault,配合托管标识用起来最方便。
- 你玩的是 GCP 原生服务,比如 BigQuery -> GCP KMS,CTR 模式无感。
- 你在中国区,有国密合规需求 -> 阿里云 KMS 是唯一选择。
六、成本对比(千万别忽视)
做架构选型,钱也是重点。我把各家的核心计费项拉出来比了一下:
| 计费维度 | AWS KMS | Azure Key Vault | GCP KMS | 阿里云 KMS |
|---|---|---|---|---|
| 密钥存储费(每月) | $1/密钥 | $0.06/密钥(标准) | $0.06/密钥 | ¥3/密钥 |
| API 调用(每万次) | $0.03 | $0.03(+额外配额费) | $0.03 | ¥0.1 |
| HSM 密钥 | $1.475/密钥 | $0.19/密钥(Managed HSM) | $1/密钥(Cloud HSM) | ¥35/月(专属实例) |
你别看密钥单价差一点点,当你有几百个密钥、每天几百万次调用时,费用差距就明显了。我做过一个项目,用了 500 个 AWS KMS 密钥,一个月光存储费就 $500。后来把闲置密钥删掉,改用别名轮换,成本降了 70%。
省钱小妙招:如果你的密钥只用来加密数据密钥(DEK),直接用 CMK 做一个 KDF 就够,不用每个用户都单独创建密钥。我习惯用一个 CMK + 派生派生出的每个 DEK,既安全又便宜。
七、最后的避坑清单
- 密钥别名问题:AWS 和 GCP 支持别名,但别名的变更不会自动同步到所有引用。I 曾在 GCP 上改别名,结果 Terraform 资源重建,导致旧别名指向失效。教训:别名只做标记,不要用于业务逻辑绑定。
- 跨区域复制:Azure Key Vault 可以跨区域复制,但只预复制密钥元数据,实际加解密还是走源区域。如果你要真正的异地容灾,得手动配置多区域 Key Vault。
- 云厂商锁定:一旦使用了某家 KMS 的特定功能(比如 AWS KMS 的 Grants),迁移起来非常痛苦。我建议在上层封装一层抽象接口。具体怎么做?后续章节会讲。
- 监控与审计:所有云 KMS 都支持 CloudTrail / Audit Log,但默认不记录密钥内容。你最好单独开启密钥使用日志,否则出了安全事件没法溯源。