Amazon Web Services

浅析AWS KMS密钥管理服务

首先必须了解什么是信封加密

信封加密是类似数字信封技术的一种加密手段。这种技术将加密数据的数据密钥封入信封中存储、传递、和使用,不再使用主密钥直接加解密数据。

信封加密场景:加密本地文件

加密流程:

  • 1.首先用户需要创建一个主密钥。
  • 2. 调用KMS服务的接口,通过主密钥产生数据密钥。这里用户能够得到一个明文的数据密钥和一个密文的数据密钥。
  • 3.用户使用明文的数据密钥,加密文件,产生密文文件。
  • 4.用户将密文数据密钥和密文文件一同存储到持久化存储设备或服务中。

解密流程:

  • 1.用户从持久化存储设备或服务中读取密文数据密钥和密文文件。
  • 2.调用KMS服务接口,通过主密钥解密数据密钥,取得明文数据密钥。
  • 3.使用明文数据密钥解密文件。

AWS Key Management Service (AWS KMS)

AWS Key Management Service (AWS KMS) 是一个密钥管理服务,可以用来创建和管理您的主密钥。AWS KMS已经和大多数的AWS服务集成,这就意味着您可以使用自己的密钥来加密这些服务中的数据,同时,您可以使用AWS CloudTrail服务来满足您的审核、监督和合规性要求,您可以随时通过AWS CloudTrail来监控和查询您的密钥使用记录。

AWS KMS使用信封加密的方式实现数据的保护。简单来说,信封加密就是用数据密钥对明文数据进行加密,然后再使用主密钥对这个数据密钥进行加密。AWS KMS可以帮我们安全地存储和管理这个主密钥,在AWS KMS服务中,这个主密钥称为客户主密钥(CMK)

CMK类型

客户主密钥(CMK)是AWS KMS 中的主要资源,AWS KMS使用CMK来生成、加密和解密数据密钥。AWS 中的CMK有以下3种类型:

1.客户托管CMK

客户托管CMK是指您自己创建的主密钥,您对这类CMK有完全的权限,如启用、禁用、删除、轮换等。在您AWS 账户的每个区域(Region)中,您最多可以创建1000个客户托管CMK,但是您可以通过向AWS申请提高这个限制,以便创建更多的CMK。

2. AWS 托管 CMK

AWS托管CMK是由与AWS KMS集成的服务创建,这类CMK的别名格式为 aws/service-name,如 aws/ebs。您可以查看AWS账户中的AWS托管CMK,如果您使用了AWS托管CMK,也可以在AWS CloudTrail中对使用情况进行审核。您无法管理AWS托管CMK,如进行删除、密钥轮换等操作。AWS 托管 CMK 不计入有关账户中 CMK 数的限制。

3. AWS拥有的CMK

AWS拥有的CMK是AWS拥有和管理的在多个AWS账户中使用的CMK集合的一部分,您无法查看、管理以及使用AWS拥有的CMK,所以您也无法在AWS CloudTrail中审核使用情况。


通过KMS加密S3中的文件:

在AWS S3中使用AWS KMS来加密数据时,AWS S3会自动完成数据密钥的申请、数据的加密等操作,用户无需进行任何的额外操作。详细的加密流程如下:

preview
  • 1. 用户上传文件到配置KMS加密的S3存储桶。
  • 2. S3会向AWS KMS服务发起请求,请求一个明文数据密钥 和 一个密文密钥
  • 3. AWS KMS服务收到请求后,会使用S3请求中指定的CMK主密钥来创建一个数据密钥,并使用主密钥来加密这个数据密钥(密文密钥)。
  • 4.AWS KMS会将明文数据密钥和密文密钥一同发送给AWS S3。
  • 5.AWS S3收到密钥后,会使用明文数据密钥来加密指定的文件。
  • 6.加密完成后,会尽快从内存中删除明文密钥,只保存加密后的文件和密文密钥。
  • AWS S3会将加密后的数据保存到S3,同时将将加密的数据密钥(密文密钥)作为元数据存储

  • 1. 用户发起加密文件的解密请求。
  • 2. AWS S3会将用户的请求发送到AWS KMS服务,该请求中包含了加密的数据密钥(密文密钥)以及加密所使用的CMK主密钥等信息。
  •  3. AWS KMS使用对应的CMK主密钥来对加密的数据密钥(密文密钥)进行解密。
  •  4. AWS KMS会将解密后的明文数据密钥发送到S3。
  • 5. S3收到后,会使用明文密钥来对加密数据进行解密。
  • 6. 用户得到解密后的数据文件。
  • 7. 解密完成后,S3会尽快从内存中删除明文数据密钥。