AWS實戰 - 對S3數據加密方式的總結

名詞解釋

  • KMS: AWS Key Management Service,AWS的密鑰託管服務;
  • 數據加密密鑰: 用於對S3對象進行加密的密鑰;
  • 主密鑰: 也叫客戶主密鑰或CMK,根據不同的加密方式,主密鑰有可能直接用於加密S3對象,也有可能用於加密數據加密密鑰;
  • 託管: 在本文中,是指對密鑰進行管理,包括對密鑰的創建、啓用、停用及輪換等各種操作;

介紹

AWS S3的數據加密分爲服務器端加密和客戶端加密兩大類:

  • 服務器端加密:請求 Amazon S3 在將對象保存到數據中心的磁盤上之前加密對象,並在下載對象時進行解密。
  • 客戶端加密:可以在客戶端加密數據並將加密的數據上傳到 Amazon S3。在這種情況下,您需要管理加密過程、加密密鑰和相關的工具。

服務器端加密不會修改現有的S3訪問方式,客戶端加密需要在訪問S3之前進行,一般需要配合各種語言的AWS 開發工具包來完成。

S3的服務器端加密分爲以下3種具體的方式:

  • SSE-KMS(使用KMS託管密鑰的服務器端加密)
  • SSE-S3(使用S3託管密鑰的服務器端加密)
  • SSE-C(使用客戶託管密鑰的服務器端加密)

S3的客戶端加密分爲以下2種具體的方式:

  • 使用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步中那樣列出相關密鑰;

SSE-C(使用客戶託管密鑰的服務器端加密)

SSE-C是用戶將密鑰和對象一起提供給S3,S3使用密鑰對對象進行加密後再存儲,檢索對象時也需要提供該密鑰,S3則是幫助用戶完成加密和解密的過程。該加密方式無法在控制檯中完成,只能通過SDK或者API的方式完成(支持控制檯操作的SSE-KMS和SSE-S3同樣也支持SDK和API)。

使用KMS託管客戶主密鑰

這種加密方式看着有點複雜,並且需要SDK來完成,其步驟簡單總結如下:

  1. 用戶請求KMS,KMS返回數據加密密鑰純文本及數據加密密鑰的密碼blob;(what is key blob?)
  2. 用數據加密密鑰加密對象,然後將對象和blob上傳到S3,blob保存在對象的元數據中;
  3. 下載S3對象時,從對象的元數據中獲取blob;
  4. 將下載對象的blob發送給KMS,KMS返回密鑰純文本,客戶端使用其解密數據;
使用客戶端主密鑰

這種加密方式同樣需要SDK,步驟如下:

  1. SDK(或者叫Amazon S3加密客戶端)在本地對每個對象生成數據加密密鑰,並對對象加密;
  2. 使用客戶自己生成的密鑰(須符合一定的加密要求)對每個數據加密密鑰進行加密;
  3. 加密後的數據加密密鑰保存在對象的元數據中;
  4. 下載S3對象時,從對象的元數據中獲取加密後的數據加密密鑰,確定主密鑰;
  5. 使用主密鑰解密數據加密密鑰,使用數據加密密鑰解密對象;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章