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的权限模型是两层的:

  • 密钥管理员:谁能管理这个密钥(修改、删除、启用/禁用)
  • 密钥使用者:谁能用这个密钥(加密、解密、签名、验签)

默认情况下,创建者自动具备两种角色。但实际生产环境里,这两类人通常是分开的。运维团队管密钥,应用团队只能用密钥。

小心这个坑: 别把管理权限放得太宽。我曾经见过一个团队,直接把AdministratorAccess给了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 签名 非对称签名密钥 签名和验签分离,抗抵赖
多人协同加密 / 外部分享 非对称加密密钥 不需要预先交换密钥,降低了泄露风险
一个真实教训: 我前阵子碰到过一个很典型的场景。有个团队在做跨账号的数据传输,为了省事,他们直接创建了一个对称密钥,然后把密钥权限开放给另一个账号。结果呢?密钥的ARN被别人看到了,理论上可以发起解密请求。虽然IAM能挡住一部分,但风险始终存在。正确的做法是:用非对称密钥,只把公钥暴露出去,私钥牢牢锁在自己的账号里。

3.4 一张图看懂CMK密钥类型选择

下面这个SVG流程图,是我自己整理的决策逻辑。每次创建新CMK之前,我都习惯性过一遍,帮你快速定位该选哪个类型:

CMK密钥类型选择决策流程图 开始创建 CMK 仅需加密 / 解密 ? 是 需跨账号共享? 是 对称密钥 (本地加密/单账号) 否 对称密钥 (通用数据加密) 否 需签名 / 验签 ? 是 非对称签名密钥 否 非对称加密密钥 (跨账号/外部共享) 完成创建 💡 备忘提示 对称:单账号、数据量大 非对称:跨账号、签名、 公钥可公开的场景

3.5 其他配置项,别踩坑

创建CMK的时候,还有几个配置项容易被忽略,我提一嘴:

  • 区域选择:CMK是区域性的。你在us-east-1创建的密钥,在us-west-2里是看不到的。跨区域需要用KMS的复制功能,但那个是另外的话题了。
  • 密钥轮换:对称密钥可以开启自动轮换,每年一次,免费。非对称密钥不支持自动轮换,你得自己生成新密钥对来替换。
  • 删除计划:删除CMK不是秒删的。AWS会强制进入7-30天的等待期,期间可以取消删除。这个设计我觉得挺人性化的,防止手抖。
我的习惯: 创建完CMK后,第一时间把ARN和密钥ID记录到团队的密钥管理文档里。别只存在脑子里。你想想看,半年后换了个新同事来接你的项目,他上哪儿找去?

好了,现在你应该能独立创建第一个CMK了。去吧,打开控制台,选一个场景,按我给你的流程图去选类型。对称还是非对称,你心里应该有数了。