20-KMS加密&解密实操演示

Hello大家好,欢迎来到《AWS解决方案架构师认证 Professional(SAP)中文视频培训课程》

在上节课我们在KMS管理控制台中创建了一个CMK客户主密钥,并定义了密钥管理员及密钥用户。
这节课将使用这个CMK进行加密和解密的操作演示。

我们开始今天的课程内容。

我们在上节课创建了一个IAM用户kms-test ,并将这个用户配置成为创建的CMK的密钥用户。
接下来的内容,我们要在aws cli使用kms-test用户的访问密钥,通过aws cli命令来演示加密和解密数据。

配置AWS CLI

首先我们要在aws cli中配置kms-test用户的访问密钥:

  • 切换到终端,运行 aws configure,然后将kms-test用户的访问密钥复制进来。
  • 进入IAM->用户->kms-test->安全证书,创建访问密钥,然后将访问密钥ID复制到AWS CLI,然后复制私有访问密钥.
  • 接下来是AWS区域配置,因为我们在配置KMS生成CMK是在首尔(ap-northeast-2)区域,所以我们要在CLI中配置区域为ap-northeast-2,需要和创建CMK配置同一区域。

好的,我们现在完成了将kms-test用户的访问密钥配置至aws cli。

为kms-test用户添加KMS相关IAM权限

在终端中运行 aws kms list-keys 命令,命令返回为access denied,操作被拒绝,提示kms-test用户没有相应的权限,因为我们目前没有为该用户添加kms相应权限。

访问IAM控制台,我们现在为该用户添加权限,IAM->用户->kms-test->权限,添加内联策略,服务选择KMS,操作选择listkeys,然后下一步查看策略,名称输入kmslistkeys,然后完成策略的创建。现在kms-test用户就拥有kmslistkeys权限。

我们回到终端再次运行aws kms list-keys 命令,可以看到已经成功将我的账户在这个区域的cmk全部列出来了。那我们之前创建的CMK是哪一个呢,我们到KMS控制台来看一下密钥ID,尾数后四位4960,所以AWS CLI命令返回中间的这个CMK是我们上节课创建的。

接下来,我们使用这个CMK来进行加密操作,我们需要使用相应的AWS CLI命令来达成。

看过之前课程的同学都知道,可以通过AWS CLI命令参考页面找到这些命令。
打开kms cli命令参考页面,我们看下,在后面可用命令这里,我们这节课关注的是kms encrypt和decrypt,加密、解密对应的KMS命令,分别打开相应的页面。

实操演示:KMS加密

先演示加密操作,切换到kms encrypt页面,这个页面包括命令描述,参数、命令选项,示例等等。

我们看下加密命令摘要,有两个必有选项:

  • key-id ,后面需要指定我们创建的cmk的密钥ID,使用此CMK进行加密。
  • plaintext, 后面指定需要加密的明文内容。

切换到终端,我们运行下命令。

我们输入命令:
aws kms encrypt --key-id 231973f0-4cbe-4ef5-8ac3-0ef3f8164960 --plaintext “www.iloveaws.cn”

  • 参数key-id 后面内容为我们使用的CMK的密钥ID
  • 参数plaintext 后面我们输入一个想要加密的明文内容,我们就输入 “www.iloveaws.cn”,然后执行。

我们看下命令的返回结果,包括CiphertextBlob和keyid,以及EncryptionAlgorithm加密算法。

CiphertextBlob这个密文blob的内容就是我们命令指定的plaintext内容www.iloveaws.cn加密后的base64编码的密文。

我们现在只需要CiphertextBlob的内容,不需要命令返回密钥ID以及加密算法,修改下命令,在命令后面加上 query CiphertextBlob ,执行命令:

aws kms encrypt --key-id 231973f0-4cbe-4ef5-8ac3-0ef3f8164960 --plaintext “www.iloveaws.cn” --query CiphertextBlob

看下返回结果。现在的返回结果只包括了加密后的密文blob,但是内容两边的引号也不是密文的内容,所以我们还需要在命令后添加一个选项,让命令返回的结果不包括加密密文两边的引号,需要再命令后添加–output text ,我们执行下命令:

aws kms encrypt --key-id 231973f0-4cbe-4ef5-8ac3-0ef3f8164960 --plaintext “www.iloveaws.cn” --query CiphertextBlob --output text

好的,现在命令返回的内容就只有加密后的密文blob内容。

我们现在进行加密的最后一步,现在加密命令返回的密文内容是基于base64编码的,如果后面要使用AWS CLI进行解密,就需要将base64编码进行解码为二进制文件,需要在命令后面加入 | base64 –decode 参数。

我们来操作下,在命令后面添加 | base64 –decode,然后我们将解码后加密的内容输出至一个文件,encrypttest文件,运行命令:

aws kms encrypt --key-id 231973f0-4cbe-4ef5-8ac3-0ef3f8164960 --plaintext “www.iloveaws.cn” --query CiphertextBlob --output text | base64 --decode > encrypttest

我们尝试查看下生成文件encrypttest的内容,less encrypttest ,可以看到为二进制文件,无法查看该文件的内容。

好的,目前我们已经通过aws cli 命令,使用kms-test用户将明文www.iloveaws.cn内容加密,将加密密文生成至encrypttest文件。

实操演示:KMS解密

接下来我们要对之前加密的内容进行解密,同样切换到aws cli kms decrypt命令参数页面 ,看下解密的命令参数。

同样在解密命令摘要这里,命令必选的参数为–ciphertext-blob,通过–ciphertext-blob参数指定需要解密的密文,我们切换到终端,进行解密操作。

输入命令:

aws kms decrypt --ciphertext-blob fileb://encrypttest

ciphertext-blob 后面要指定之前加密步骤生成的密文文件,通过fileb://来指定,然后执行命令。

我们看到命令返回时包括KEYID,plaintext以及加密算法。

同样,我们只需要plaintext明文的内容,在命令后加入参数 query Plaintext 和 output text ,输入命令:
aws kms decrypt --ciphertext-blob fileb://encrypttest --query Plaintext --output text

看下命令返回结果,可以看到现在已经能成功只将plaintext的内容返回,同样,返回的是base64编码的内容,我们进行下解码,在运行命令后追加| base64 —decode ,然后运行命令:

aws kms decrypt --ciphertext-blob fileb://encrypttest --query Plaintext --output text | base64 --decode

可以看到命令已经成功将我们之前加密的明文内容www.iloveaws.cn解密。

好的,以上我们通过aws cli kms命令,完成了加密和解密操作的演示,在整个演示的过程中,使用的主密钥一直存储在KMS中,由AWS进行保存,我们并没有接触到主密钥,而是通过密钥ID来进行加密操作,这也在一定程度上保障了主密钥的安全性。

演示中使用的加密、解密的cli命令和参数都可以通过aws cli命令参考页面查询到,也希望有条件的同学可以自己动手操作一下,这样有利于知识的掌握。

以上,就是本节课的所有内容。

希望此系列教程能为您通过 AWS解决方案架构师认证 Professional 认证考试带来帮助,如您有任何疑问,请联系我们:

  • AWS爱好者的网址是www.iloveaws.cn。
  • 可以通过扫码加入【AWS爱好者】微信公众号,查看原创的AWS知识点相关文章
  • 加入【AWS爱好者】微信群,和其他同学一起备考,以及探讨交流AWS相关知识
  • 加入【AWS知识星球】持续学习。

我们今天的视频课程就到这里,感谢大家的观看,我们下一课程再见。

2021年10月29日

0 responses on "20-KMS加密&解密实操演示"

Leave a Message

Setup Menus in Admin Panel

error: Content is protected !!