1、KMS概述
说KMS,你可能会觉得不就是个加密嘛?其实不然。密钥管理服务,它更像一个保险柜管理员。你不需要管钥匙怎么炼的,也不需要担心钥匙被偷走。你只管把东西锁进去,用的时候拿钥匙开就行。
我记得有一次客户跟我抱怨,说业务系统密钥全堆在配置中心,结果一个实习生误删了生产库,差点出事。从那以后我才真正意识到,密钥管理这件事,必须有个专门的平台来扛。所以,KMS的核心价值就是:你只管拿着密钥去用,怎么生成、怎么存、怎么换、怎么防泄露——这些脏活累活都交给云平台。
KMS的核心功能
KMS看起来像黑盒子,但它里面做了四件大事。我习惯把这四件大事记成「生、用、换、审」。
- 生:自动生成密钥,支持对称密钥、非对称密钥、密钥对。你不需要自己跑openssl生成RSA,也不用管随机数够不够随机。
- 用:直接调用KMS的API做加密、解密、签名、验签。数据不需要离开安全域,密钥更不会出KMS。
- 换:密钥轮转。默认一年自动换一次,你可以改成180天。我曾经见过一个项目,密钥用了三年没轮换,后来被安全审计打了大红叉。
- 审:所有密钥操作都有操作日志。谁在什么时候用了哪把密钥、做了什么操作,全部记入日志。这个对合规特别重要。
| 功能 | 描述 | 典型场景 |
|---|---|---|
| 密钥生命周期管理 | 创建、启用、禁用、轮转、删除 | 数据库加密、文件加密 |
| 加密/解密 | 支持对称和非对称算法 | HTTPS证书保护、数据脱敏 |
| 签名/验签 | 数字签名验证 | 合同签署、API请求签名 |
| 审计日志 | 记录所有密钥操作 | 等保合规、安全取证 |
我个人比较看重审计功能。你想想看,一旦密钥泄露,如果没有审计日志,你连什么时候、谁干的都查不出来。那安全就变成了摆设。
为什么需要密钥边界策略
好,核心功能你听明白了。但会有一个灵魂拷问:我把密钥放KMS,那谁有权限用这把密钥?
如果你说“有RAM权限的人都能用”,那就太危险了。比如,一个运维人员凭RAM访问到了KMS,就能直接调用Decrypt解密数据库里所有客户的身份证号。你不希望这样对吧。
所以阿里云设计了密钥边界策略。说白了,它是对密钥权限的再收窄。即使你有RAM的KMS访问权限,密钥边界策略也能限制你只能用它加密,不能解密;或者只能解某个前缀的密文。它是一种「权限的权限」,是最后一道防线。
我在项目中遇到过这么一个坑:同事把一张生产密钥的权限授权给了一个测试环境的应用,结果测试应用误操作把生产数据解密后写到了公共Bucket里。幸亏密钥边界策略限制了只能解密指定标签的数据,不然就出大事故了。
KMS的密钥层级结构
KMS里的密钥不是一朵云,而是有层级的。我习惯画成三层:
- 用户主密钥(CMK):你手动创建的根密钥,也叫密钥元数据。它永远不会离开KMS硬件安全模块。
- 数据密钥(DEK):由CMK生成,用于加密大量业务数据。你可以把DEK拿出去用,但加密后的DEK(密文DEK)可以安全存到本地。
- 信封加密数据:先用DEK加密数据,再用CMK加密DEK。两层套起来,像信封一样。
| 层级 | 生命周期 | 权限粒度 |
|---|---|---|
| 用户主密钥(CMK) | 由管理员维护,可轮转不可导出 | 最细粒度(可绑定边界策略) |
| 数据密钥(DEK) | 短期使用,用完即可销毁 | 中间粒度(由CMK控制生成) |
| 信封加密数据 | 持久存储,随业务数据保留 | 粗粒度(脱敏保护) |
一个小故事:密钥边界策略的诞生
我之前在阿里云帮助客户做数据安全架构咨询。客户是一家金融科技公司,内部有一个数据中台团队,使用KMS做全库加密。一开始很简单:创建CMK,分配RAM权限,所有人都能用KeyId去调Encrypt和Decrypt。
后来业务越来越多,中台团队扩到30人。问题来了:运维人员A不小心把Decrypt权限泄露给了一个第三方组件。那个组件开始疯狂解密数据库里的客户手机号。如果不是安全团队及时发现,后果不堪设想。
所以阿里云推出了密钥边界策略。它允许你在密钥这一层写上:
{
"Effect": "Allow",
"Action": [
"kms:Encrypt",
"kms:Decrypt"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"kms:EncryptionContextKey": "environment"
}
}
}
你看,只要加上一个环境标签条件,别人即使有权限调用Decrypt,也只能解密环境标签匹配的数据。这就是边界策略的威力。
总结:密钥边界策略的定位
说白了,密钥边界策略是在KMS权限模型之上的安。它不是替代RAM,而是专为密钥定制的第二条防线。你想想看:
- 第一道防线:RAM权限(谁可以访问KMS)
- 第二道防线:密钥边界策略(拿到密钥以后能做什么、不能做什么)
- 第三道防线:审计日志(干了什么全被记录)
我在多个项目里给客户画过这个三层模型。大多数安全问题不是第一道防线出问题,而是第二道防线缺失。所以我把密钥边界策略称为「密钥安全的核心锁」。