KMS加密&解密實操演示

關注公衆號:AWS愛好者(iloveaws)
文 | 沉默惡魔(禁止轉載,轉載請先經過作者同意)
網站:www.iloveaws.cn

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愛好者(iloveaws)
文 | 沉默惡魔(禁止轉載,轉載請先經過作者同意)
網站:www.iloveaws.cn
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章