3. 创建你的第一个CMK:控制台创建、密钥类型选择
好了,我们直接进入正题。
前面聊了那么多KMS的概念和架构,现在终于到了动手的环节。说实话,我第一次在控制台创建CMK的时候,看着那些选项也有点懵。特别是密钥类型那里,对称和非对称,到底怎么选?
这节我们就把这个事彻底讲清楚。我带你走一遍完整的创建流程,同时把「什么时候选对称,什么时候选非对称」这个核心问题掰开揉碎。
3.1 控制台创建CMK:一步步来
登录AWS控制台,进入KMS服务。这个路径不难找,直接在服务搜索框里输入「KMS」就行。我个人习惯把它固定到常用服务里,省得每次找。
点击「创建密钥」,我们就开始了。
3.1.1 第一步:配置密钥类型
这一步最关键,直接决定了后续的使用场景。我待会详细讲,你先跟着操作。这里会看到三个选项:
- 对称加密密钥
- 非对称加密密钥
- 非对称签名密钥
嗯,这里要注意,非对称密钥下其实又分了两个子类。一个是做加密/解密的,一个是做签名/验签的。
3.1.2 第二步:配置别名校验
给CMK取个名字,也就是「别名」。这玩意儿其实就是一个友好的标签,方便你后续在代码或控制台里快速找到它。
我建议你养成一个好习惯:别名要包含环境信息。比如 prod-payment-key 或 dev-db-encrypt-key。为什么?我在项目中遇到过,半年后回来看一堆密钥,完全分不清哪个是哪个,太痛苦了。
描述字段也填一下,写清楚这个密钥是干什么用的,给谁用的。
3.1.3 第三步:定义关键策略
这里是权限控制的重点。KMS的权限模型是两层的:
- 密钥管理员:谁能管理这个密钥(修改、删除、启用/禁用)
- 密钥使用者:谁能用这个密钥(加密、解密、签名、验签)
默认情况下,创建者自动具备两种角色。但实际生产环境里,这两类人通常是分开的。运维团队管密钥,应用团队只能用密钥。
3.1.4 第四步:完成创建
最后一步是预览所有配置,确认无误后点击「完成」。创建成功后,你会得到一个ARN,还有这个CMK的唯一ID。这两个东西很重要,后续所有的API调用都用得到。
3.2 密钥类型选择:对称 vs 非对称
这是整个章节的重头戏。我直接说结论:绝大多数场景下,选对称密钥就够了。
为什么?你想想看,对称密钥的加解密速度快得多,而且AWS的KMS服务已经帮你把密钥的安全存储和轮换都管好了。你用起来就是调一个API的事,省心。
3.2.1 什么时候选对称密钥?
- 数据加密(S3、EBS、RDS等):这些托管服务后端用的全是对称密钥。你直接把CMK的ARN丢过去就行。
- 本地环境加密/解密:你用GenerateDataKey API从KMS拿一个数据密钥,然后在本地用这个密钥去加密你的业务数据。流程简单,性能好。
- 你只需要加密和解密:没有签名验签的需求。
3.2.2 什么时候选非对称密钥?
说白了,对称密钥没法解决一个核心问题:密钥分发。如果加密方和解密方不是同一个系统,而且你没办法事先安全地共享一个密钥,那就必须用非对称。
具体场景:
- 跨账号加密:A账号加密数据,B账号解密。非对称密钥可以公开公钥,只有私钥的持有者才能解密。
- 数字签名:比如软件更新包签名、JWT签名。这种场景只能用非对称的签名密钥。
3.3 我总结了一个选择矩阵
这个表帮你快速做决定,直接抄作业就行:
| 使用场景 | 推荐密钥类型 | 原因 |
|---|---|---|
| S3 SSE-KMS 加密 | 对称密钥 | S3自动帮你调用加密/解密,不需要自己管理密钥对 |
| 应用层加密大数据 | 对称密钥 + 数据密钥 | GenerateDataKey本地加密,性能最优 |
| 跨账号数据共享 | 非对称加密密钥 | 公开公钥,私钥不出账号,安全 |
| 代码签名 / JWT 签名 | 非对称签名密钥 | 签名和验签分离,抗抵赖 |
| 多人协同加密 / 外部分享 | 非对称加密密钥 | 不需要预先交换密钥,降低了泄露风险 |
3.4 一张图看懂CMK密钥类型选择
下面这个SVG流程图,是我自己整理的决策逻辑。每次创建新CMK之前,我都习惯性过一遍,帮你快速定位该选哪个类型:
3.5 其他配置项,别踩坑
创建CMK的时候,还有几个配置项容易被忽略,我提一嘴:
- 区域选择:CMK是区域性的。你在us-east-1创建的密钥,在us-west-2里是看不到的。跨区域需要用KMS的复制功能,但那个是另外的话题了。
- 密钥轮换:对称密钥可以开启自动轮换,每年一次,免费。非对称密钥不支持自动轮换,你得自己生成新密钥对来替换。
- 删除计划:删除CMK不是秒删的。AWS会强制进入7-30天的等待期,期间可以取消删除。这个设计我觉得挺人性化的,防止手抖。
好了,现在你应该能独立创建第一个CMK了。去吧,打开控制台,选一个场景,按我给你的流程图去选类型。对称还是非对称,你心里应该有数了。