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. 使用主密鑰解密數據加密密鑰,使用數據加密密鑰解密對象;
相關文章
相關標籤/搜索