AWS实战 - 对S3数据加密方式的总结

名词解释

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

介绍

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

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

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

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

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

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

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

SS3-KMS(使用KMS托管密钥的服务器端加密)

SS3-KMS是利用AWS-KMS服务托管的CMK来对数据机密,使用这种加密方式的控制台操做步骤以下:工具

  1. 建立一个文件夹,或者对一个文件夹单击右键,选择更改加密;
  2. 选择AWS-KMS,在下拉框中选择须要使用的KMS密钥;
  3. 此时文件夹中全部对象都已经启用了数据加密,进入IAM面板,选择左侧最下方的加密密钥标签能够对KMS密钥进行管理;

第2步中,若是你以前建立过KMS密钥,能够在这里看到全部的密钥列表,若是以前历来没建立,也能够看到一个aws/s3的选项,它是S3建立的默认KMS密钥,使用它能够免去手动建立的过程,但该密钥的灵活性较差。
须要说明的是,这样操做只是对目前文件夹中的全部对象进行了加密,以后再写入的对象并不会自动进行数据加密,针对这种状况,可使用存储桶策略进行控制,若是写入的对象未使用指定的数据加密,则拒绝其行为,详情参考使用具备AWS KMS托管密钥的服务器端加密(SSE-KMS)保护数据开发工具


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

SSE-S3使用惟一的数据加密密钥来加密数据,再使用按期轮换的主密钥来加密数据加密密钥,但整个过程都是由S3托管的,用户没法感知,没法接触到密钥,有点像黑箱。使用这种加密的方式基本与SSE-KMS同样,只是在选择加密方式的时候选择AES-256便可,而且加密后也没法像第3步中那样列出相关密钥;ui


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

SSE-C是用户将密钥和对象一块儿提供给S3S3使用密钥对对象进行加密后再存储,检索对象时也须要提供该密钥,S3则是帮助用户完成加密和解密的过程。该加密方式没法在控制台中完成,只能经过SDK或者API的方式完成(支持控制台操做的SSE-KMSSSE-S3一样也支持SDKAPI)。加密


使用KMS托管客户主密钥

这种加密方式看着有点复杂,而且须要SDK来完成,其步骤简单总结以下:code

  1. 用户请求KMSKMS返回数据加密密钥纯文本及数据加密密钥的密码blob;(what is key blob?)
  2. 用数据加密密钥加密对象,而后将对象和blob上传到S3blob保存在对象的元数据中;
  3. 下载S3对象时,从对象的元数据中获取blob
  4. 将下载对象的blob发送给KMSKMS返回密钥纯文本,客户端使用其解密数据;

使用客户端主密钥

这种加密方式一样须要SDK,步骤以下:htm

  1. SDK(或者叫Amazon S3加密客户端)在本地对每一个对象生成数据加密密钥,并对对象加密;
  2. 使用客户本身生成的密钥(须符合必定的加密要求)对每一个数据加密密钥进行加密;
  3. 加密后的数据加密密钥保存在对象的元数据中;
  4. 下载S3对象时,从对象的元数据中获取加密后的数据加密密钥,肯定主密钥;
  5. 使用主密钥解密数据加密密钥,使用数据加密密钥解密对象;
相关文章
相关标签/搜索