加密模式與強制傳輸

AWS Security 開發者實務

Rahul Singh

Technical Product Manager

兩項保證,一個預設

一個應用程式將物件傳到 Amazon S3 bucket。綠色括號標示「傳輸中」涵蓋網路跳點,另一個綠色括號標示「靜態中」涵蓋已儲存的物件,上方註記除非請求另有指定,會套用 SSE-S3。

  • 靜態中(at rest): 磁碟上的位元組
  • 傳輸中(in transit): 網路上的位元組
AWS Security 開發者實務

兩項保證,一個預設

一個應用程式將物件傳到 Amazon S3 bucket。綠色括號標示「傳輸中」涵蓋網路跳點,另一個綠色括號標示「靜態中」涵蓋已儲存的物件,上方註記除非請求另有指定,會套用 SSE-S3。

  • 靜態中: 磁碟上的位元組
  • 傳輸中: 網路上的位元組
  • 已完成: 新物件一律使用 SSE-S3
  • 仍由你決定: 使用哪種模式、誰持有金鑰,由你來
AWS Security 開發者實務

明文在哪裡結束

伺服器端

  • AWS 收到可讀位元組
  • S3 寫入時加密

 

伺服器端流程。你的程序持有明文,透過 TLS 傳輸,Amazon S3 在寫入時加密。下方長條追蹤位元組,於 S3 處以虛線分隔:前段標示「你的位元組:此處可讀」為紅色,後段標示「密文」為綠色。

 

AWS Security 開發者實務

明文在哪裡結束

伺服器端

  • AWS 收到可讀位元組
  • S3 寫入時加密

用戶端

  • 你在離開前就先加密
  • AWS 僅儲存密文

伺服器端流程。你的程序持有明文,透過 TLS 傳輸,Amazon S3 在寫入時加密。下方長條追蹤位元組,於 S3 處以虛線分隔:前段標示「你的位元組:此處可讀」為紅色,後段標示「密文」為綠色。

用戶端流程。你的程序先加密,透過 TLS 傳送密文,Amazon S3 儲存所收到的內容。下方長條追蹤位元組,於你的程序內以虛線分隔:前段短區標示「你的位元組:此處可讀」為紅色,其後全部標示「密文」為綠色。

AWS Security 開發者實務

四種模式,差在一點

同一演算法,四種金鑰持有者

  • 模式以 PUT 的標頭傳遞
  • SSE-S3:AWS 的金鑰,你無須管理
  • SSE-KMS:你的金鑰、CloudTrail,以及附在金鑰上的 key policy 指定可回應對象

四張堆疊卡片,標示 SSE-S3、SSE-KMS、DSSE-KMS 與 SSE-C。左側軌道自上而下從 AWS 控制到你控制,每張卡只顯示選擇該模式的請求標頭值。

AWS Security 開發者實務

四種模式,差在一點

同一演算法,四種金鑰持有者

  • 模式以 PUT 的標頭傳遞
  • SSE-S3:AWS 的金鑰,你無須管理
  • SSE-KMS:你的金鑰、CloudTrail,以及附在金鑰上的 key policy 指定可回應對象
  • DSSE-KMS:兩層獨立保護
  • SSE-C:每次請求都用你的金鑰,遺失自負

四張堆疊卡片,標示 SSE-S3、SSE-KMS、DSSE-KMS 與 SSE-C。左側軌道自上而下從 AWS 控制到你控制,每張卡只顯示選擇該模式的請求標頭值。

AWS Security 開發者實務

SSE-KMS 的成本疑慮

兩列圖。未使用 Bucket Keys 時,從 Amazon S3 到 AWS KMS 有六個箭頭,各對應一個物件請求。使用 Bucket Keys 時,只從 S3 內的 bucket 層級金鑰發出一個箭頭。下方註記:Bucket Keys 不支援 DSSE-KMS。

  • 未使用: 每個物件各一次 KMS 呼叫
  • 啟用 Bucket Keys: 一把短期金鑰可重複使用
  • DSSE-KMS 不支援
  • 最多可減少 99% 的 KMS 請求
AWS Security 開發者實務

加密欄位,不是整表

靜態加密已啟用

  • 任何具讀取權限者,查詢都會回傳明文

一筆含五個屬性的 DynamoDB 項目。兩個屬性為密文並帶藍色導軌,而分割鍵、排序鍵與時間戳保持明文。下方綠框說明整張資料表已進行靜態加密。

AWS Security 開發者實務

加密欄位,不是整表

靜態加密已啟用

  • 任何具讀取權限者,查詢都會回傳明文

AWS Database Encryption SDK

  • 在你的程式碼中加密選定屬性
  • 分割鍵與排序鍵(DynamoDB 用以尋找項目的欄位)維持明文,因為要供索引使用

一筆含五個屬性的 DynamoDB 項目。兩個屬性為密文並帶藍色導軌,而分割鍵、排序鍵與時間戳保持明文。下方綠框說明整張資料表已進行靜態加密。

AWS Security 開發者實務

TLS 是提供的,不是必須的

提供,但未強制

  • S3 同時回應 HTTP 與 HTTPS

兩種情境。未在 bucket 設條件時,HTTPS 與 HTTP 用戶端都能取物件。有拒絕條件時,HTTP 路徑在紅色叉處中斷且無法連線。

AWS Security 開發者實務

TLS 是提供的,不是必須的

提供,但未強制

  • S3 同時回應 HTTP 與 HTTPS

將其設為強制

  • Bucket 原則:當 aws:SecureTransport 為 false 時拒絕
  • 正常用戶端不會有感

兩種情境。未在 bucket 設條件時,HTTPS 與 HTTP 用戶端都能取物件。有拒絕條件時,HTTP 路徑在紅色叉處中斷且無法連線。

AWS Security 開發者實務

哪個機構為名稱背書

公開名稱

  • ACM:公開信任、免費、可自動續期

僅內網可解析的名稱

  • AWS Private CA:你自有的憑證機構
  • 在公網上不被信任

兩張堆疊卡片,主題為誰能簽發憑證。上方卡片(公開名稱)顯示 reports dot example dot com 為可解析名稱,簽發者為 ACM,於各處受信任。下方卡片(內部名稱)顯示 admin dot example dot internal 僅在你的 VPC 內可解析,簽發者為 AWS Private CA。

AWS Security 開發者實務

私鑰那一半,遺失自負

由誰保管

  • ACM:AWS 代管
  • EC2 金鑰配對或任一 SSH 金鑰:你僅持有私鑰一份

兩張堆疊卡片,主題為誰持有哪一半。上方卡片(公開一半)說明它位於 AWS 或執行個體。下方橘色卡片(私有一半)三列說明:你僅有一份且無備份,應存放於 Secrets Manager(綠勾),切勿放在版本庫、筆電或聊天軟體(橘叉)。

AWS Security 開發者實務

私鑰那一半,遺失自負

由誰保管

  • ACM:AWS 代管
  • EC2 金鑰配對或任一 SSH 金鑰:你僅持有私鑰一份

若由你保管

  • 用 Secrets Manager,不要放版本庫
  • 依排程汰換

兩張堆疊卡片,主題為誰持有哪一半。上方卡片(公開一半)說明它位於 AWS 或執行個體。下方橘色卡片(私有一半)三列說明:你僅有一份且無備份,應存放於 Secrets Manager(綠勾),切勿放在版本庫、筆電或聊天軟體(橘叉)。

AWS Security 開發者實務

三個答案,不是一個

三張編號卡片分別對應模式、金鑰控制與傳輸,各自顯示對應的標頭或條件鍵。下方一行註記:只有第三項檢查不在加密設定內。

  1. 模式:寫入物件時用了什麼
  2. 金鑰控制:誰可解密,可在此帳號或他帳號
  3. 傳輸:強制要求,或僅提供
AWS Security 開發者實務

一起來練習吧!

AWS Security 開發者實務

Preparing Video For Download...