AWS
的密鑰託管服務;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
來對數據機密,使用這種加密方式的控制檯操做步驟以下:工具
AWS-KMS
,在下拉框中選擇須要使用的KMS
密鑰;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
是用戶將密鑰和對象一塊兒提供給S3
,S3
使用密鑰對對象進行加密後再存儲,檢索對象時也須要提供該密鑰,S3
則是幫助用戶完成加密和解密的過程。該加密方式沒法在控制檯中完成,只能經過SDK
或者API
的方式完成(支持控制檯操做的SSE-KMS
和SSE-S3
一樣也支持SDK
和API
)。加密
KMS
託管客戶主密鑰這種加密方式看着有點複雜,而且須要SDK
來完成,其步驟簡單總結以下:code
KMS
,KMS
返回數據加密密鑰純文本及數據加密密鑰的密碼blob
;(what is key blob?)blob
上傳到S3
,blob
保存在對象的元數據中;S3
對象時,從對象的元數據中獲取blob
;blob
發送給KMS
,KMS
返回密鑰純文本,客戶端使用其解密數據;這種加密方式一樣須要SDK
,步驟以下:htm
SDK
(或者叫Amazon S3
加密客戶端)在本地對每一個對象生成數據加密密鑰,並對對象加密;S3
對象時,從對象的元數據中獲取加密後的數據加密密鑰,肯定主密鑰;