KMS的两种工作模式

KMS加密有两种场景:

  • 对密码进行加密。这种情况下密码大小一般小于4K
  • 对大文本进行加密,例如上G的数据。此时需要使用data key来加密。

CMK(Customer Master Key)用户接触不到,用户只需要传递要加密的数据和要解密的数据。

对密码进行加密

加密流程(图上半部分)

  1. 请求发起:客户端(通过 CLI 或 SDK)将小于 4KB 的明文机密数据(如密码)通过 Encrypt API 发送到 KMS
  2. 权限检查:KMS 服务会与 IAM 进行通信,检查请求方是否有使用指定 CMK(Customer Master Key)进行加密的权限
  3. 执行加密:验证通过后,KMS 使用指定的 CMK 对数据直接进行加密操作
  4. 返回结果:KMS 将加密后的数据(Encrypted Secret)返回给客户端

img

解密流程(图下半部分)

  1. 请求发起:客户端通过 Decrypt API 将加密后的数据发送到 KMS
  2. 权限检查:KMS 再次与 IAM 通信,验证请求方是否有使用相关 CMK 进行解密的权限
  3. 执行解密:验证通过后,KMS 使用相应的 CMK 对加密数据执行解密操作
  4. 返回结果:KMS 将解密后的明文数据返回给客户端

这种模式与上一节讨论的信封加密(Envelope Encryption)不同,在处理更大数据时,KMS 会使用信封加密模式,生成数据密钥来加密实际数据。当数据量小时(如密码),KMS 可以直接使用 CMK 进行加密。

对大文件加密 - Encryption SDK

对大于4K的数据,需要使用Envelope encryption加密。当提到Encryption SDK,则等同于Envelope encryption ,等同于调用GenerateDataKey API

GenerateDataAPI工作流程

首先,要对大文件进行加密,我们一定要有加密的key,这个key而且不能在本地明文存储,而是存储的密文形式

image-20191021094027707

所以,调用GenerateDataKey API时,第一步就是KMS返回plaintext data keyencryted data key

我们对文件加密完后,要删除明文的data key,保留密文形式的data key

img

对文件进行解密时,首先将encrypted data key发送给KMS,KMS对其进行解密,返回明文的data key。再对文件进行解密:

img

在第6节和第7节,会对这两种模式进行具体操作介绍

KMS价格

三种Customer Master Key(CMK):

  • AWS Managed Service Default CMK: 免费
  • User key created in KMS: 1$/month
  • User key imported: $1/month

KMS的API调用:$0.03 / 10000 calls