Amazon Web Services

AWS S3数据加密方式的总结

 名词解释

  • KMS: AWS Key Management Service,AWS的密钥托管服务
  • 主密钥: 也叫客户主密钥或CMK,根据不同的加密方式,主密钥有可能直接用于加密S3对象,也有可能用于加密数据加密密钥
  • 托管: 在本文中,是指对密钥进行管理,包括对密钥的创建、启用、停用及轮换等各种操作

AWS S3的数据加密分为服务器端加密和客户端加密两大类:

  • 服务器端加密:请求Amazon S3在将对象保存到数据中心的磁盘上之前加密对象,并在下载对象时进行解密。
  • 客户端加密:可以在客户端加密数据并将加密的数据上传到Amazon S3。在这种情况下,您需要管理加密过程、加密密钥和相关的工具。

服务器端加密不会修改现有的S3访问方式,客户端加密则需要配合各种语言的AWS开发工具包来完成访问。

S3的服务器端加密分为以下3种具体的方式:

  • SSE-KMS(使用KMS托管密钥的服务器端加密)
  • SSE-S3(使用S3托管密钥的服务器端加密)
  • SSE-C(使用客户托管密钥的服务器端加密)

S3的客户端加密分为以下2种具体的方式:

  • 使用KMS托管客户主密钥
  • 使用客户端主密钥

总结:

SSE-S3(使用S3托管密钥的服务器端加密):

SSE-S3使用唯一的数据加密密钥来加密数据,再使用定期轮换的主密钥来加密数据加密密钥,但整个过程都是由S3托管的,用户无法感知,无法接触到密钥,有点像黑箱。使用这种加密的方式基本与SSE-KMS一样,只是在选择加密方式的时候选择AES-256即可

SSE-C(使用客户托管密钥的服务器端加密):

SSE-C是用户将密钥和对象一起提供给S3,S3使用密钥对对象进行加密后再存储,检索对象时也需要提供该密钥,S3则是帮助用户完成加密和解密的过程。该加密方式无法在控制台中完成,只能通过SDK或者API的方式完成(支持控制台操作的SSE-KMS和SSE-S3同样也支持SDK和API)。