誰來管鑰匙

AWS Security 開發者實務

Rahul Singh

Technical Product Manager

兩種 KMS 金鑰

AWS 代管

  • 由服務建立,別名 aws/s3
  • 策略可讀,不可編輯
  • 無月費

兩張堆疊卡片,分別比較 AWS 代管鑰與客戶代管鑰在三個列:金鑰策略、輪替與成本。客戶代管卡片的金鑰策略列被強調。每張卡片都有其別名:aws 斜線 s3,以及 alias 斜線 reports。

AWS Security 開發者實務

兩種 KMS 金鑰

AWS 代管

  • 由服務建立,別名 aws/s3
  • 策略可讀,不可編輯
  • 無月費

客戶代管

  • 由你建立,別名 alias/reports,策略由你撰寫
  • 輪替週期由你設定
  • 每把每月 1 美元

兩張堆疊卡片,分別比較 AWS 代管鑰與客戶代管鑰在三個列:金鑰策略、輪替與成本。客戶代管卡片的金鑰策略列被強調。每張卡片都有其別名:aws 斜線 s3,以及 alias 斜線 reports。

AWS Security 開發者實務

兩道閘門,都要打開

一個解密請求接近兩道閘門的第一道。IAM 策略閘門為實線並標示為 1,後方金鑰策略閘門為虛線與灰色,兩者皆尚未回應。

  1. IAM 策略:呼叫端可要求的動作
AWS Security 開發者實務

兩道閘門,都要打開

一個解密請求自左至右通過兩道標號閘門,標號 1 為 IAM 策略,標號 2 為金鑰策略,之後才抵達 KMS 金鑰。下方括號標示兩者為獨立回應。

  1. IAM 策略:呼叫端可要求的動作
  2. 金鑰策略:金鑰會回應給誰

預設金鑰策略:委派給 IAM

授權(Grant):針對單一主體的特定金鑰操作,可獨立撤銷

AWS Security 開發者實務

金鑰不會直接碰到你的資料

Amazon S3 代表你在標記 1 呼叫 AWS KMS,KMS 回傳一把資料金鑰的明文與加密副本。加密副本與物件密文一同儲存,並在標記 2 以虛線路徑經由解密呼叫帶回。

信封式加密(Envelope encryption)

直接加密:上限 4 KB

AWS Security 開發者實務

金鑰不會直接碰到你的資料

Amazon S3 代表你在標記 1 呼叫 AWS KMS,KMS 回傳一把資料金鑰的明文與加密副本。加密副本與物件密文一同儲存,並在標記 2 以虛線路徑經由解密呼叫帶回。

信封式加密(Envelope encryption)

直接加密:上限 4 KB

  1. GenerateDataKey,回傳兩個副本
  2. 對已儲存的副本執行 kms:Decrypt
AWS Security 開發者實務

跨帳號時,沒有人看得到兩半

呼叫端帳號

  • IAM 允許該動作
  • 資源:該金鑰的 ARN

兩個以虛線框出的帳號面板,中間為帳號邊界。上方面板有呼叫端的角色與 IAM 策略;下方面板有金鑰策略與 KMS 金鑰,請求跨越兩者邊界。

AWS Security 開發者實務

跨帳號時,沒有人看得到兩半

呼叫端帳號

  • IAM 允許該動作
  • 資源:該金鑰的 ARN

金鑰擁有者帳號

  • 金鑰策略需指名呼叫者
  • 可是整個帳號,或其中一個角色

兩個以虛線框出的帳號面板,中間為帳號邊界。上方面板有呼叫端的角色與 IAM 策略;下方面板有金鑰策略與 KMS 金鑰,請求跨越兩者邊界。

AWS Security 開發者實務

讀拒絕訊息,不要猜

身分為主(Identity based)

  • AccessDeniedException,接著是指出是哪一道閘的子句

  • no identity-based policy allows

  • 修正呼叫端的 IAM 策略

 

解密請求在第一道閘被擋下,IAM 策略處打上紅叉,後方金鑰策略呈灰色且未被觸及。圖下說明文字:no identity-based policy allows。

 

AWS Security 開發者實務

讀拒絕訊息,不要猜

身分為主(Identity based)

  • AccessDeniedException,接著是指出是哪一道閘的子句

  • no identity-based policy allows

  • 修正呼叫端的 IAM 策略

資源為主(Resource based)

  • no resource-based policy allows
  • 修正金鑰策略

解密請求在第一道閘被擋下,IAM 策略處打上紅叉,後方金鑰策略呈灰色且未被觸及。圖下說明文字:no identity-based policy allows。

解密請求通過打勾的 IAM 策略後,在第二道閘被擋下,金鑰策略處打上紅叉。圖下說明文字:no resource-based policy allows。

AWS Security 開發者實務

輪替實際改了什麼

自動輪替

  • 預設 365 天
  • 範圍 90 到 2,560 天

三張卡片給出自動輪替的最小、預設與最大天數;下方三列顯示哪些金鑰會輪替,以及由誰決定時程。

AWS Security 開發者實務

輪替實際改了什麼

自動輪替

  • 預設 365 天
  • 範圍 90 到 2,560 天

隨選輪替

  • RotateKeyOnDemand,每把金鑰最多 25 次

兩項限制

  • AWS 代管鑰,固定每年一次
  • 自動輪替:僅限對稱、由 KMS 產生的材料

三張卡片給出自動輪替的最小、預設與最大天數;下方三列顯示哪些金鑰會輪替,以及由誰決定時程。

AWS Security 開發者實務

輪替無法修好的事

四列內容比較輪替線兩側。金鑰材料從版本一變為版本二;而金鑰識別碼、別名與金鑰策略,以及較早寫入的物件,在兩側皆相同。

會改變:底層金鑰材料

不變:金鑰 ID、ARN、別名、金鑰策略

AWS Security 開發者實務

輪替無法修好的事

四列內容比較輪替線兩側。金鑰材料從版本一變為版本二;而金鑰識別碼、別名與金鑰策略,以及較早寫入的物件,在兩側皆相同。

會改變:底層金鑰材料

不變:金鑰 ID、ARN、別名、金鑰策略

  • 你的程式碼無須更動
  • 舊物件,以及過寬的策略:都不變
AWS Security 開發者實務

為什麼要開啟輪替

能帶來什麼

  • 單一版本不會涵蓋你所有資料
  • 符合規範與合約對輪替的要求

綠色卡片標題為「能帶來什麼」,上方標示「開啟輪替」。給出稽核規則「每 365 天輪替」並打勾;另畫一把金鑰含 v1、v2、v3 三個相連版本,註解每個版本只涵蓋自己寫入的資料。

AWS Security 開發者實務

為什麼要開啟輪替

能帶來什麼

  • 單一版本不會涵蓋你所有資料
  • 符合規範與合約對輪替的要求

 

代價是什麼

  • 不用改程式碼,無須重新加密舊物件

同樣的綠色「能帶來什麼」卡片,下方新增一張標題為「代價是什麼」的卡片。該卡片列出兩行:你的程式碼:不變;舊物件:不需重新加密。

AWS Security 開發者實務

一起來練習吧!

AWS Security 開發者實務

Preparing Video For Download...