AWS KMS 科普: What Why and How?

What: 密鑰管理 —— 加密並不難,難的是密鑰管理

AWS KMS 全稱爲 Key Management Service,中文直譯過來爲密鑰管理服務 —— 這一點很重要,它提供的核心服務是密鑰管理,幫助企業、開發者方便安全地管理密鑰。不少剛接觸 KMS 的同窗常常搞不清 KMS 到底作是作什麼的,很大緣由也是沒仔細注意到 Key Management 這兩個詞。安全

因此咱們的第一個問題「What」就已經回答了,KMS 就是一個管理密鑰的服務,它並非某種 super super magic 的高超加密方法。服務器

我但願本文的讀者經過閱讀能意識到一個觀念:加密是簡單的,難的是管理密鑰自己。

Why: KMS 能確保你密鑰的安全性

接着來看第二個問題:Why ?爲何我須要把個人密鑰給你管理,我本身保存不行了嗎?事實上你徹底能夠本身管理,就像你徹底能夠自建機房同樣,only if 你清楚各類最佳實踐並願意花時間本身去維護。服務之因此叫服務,是服務提供商爲你作了各類各樣麻煩的事情(They deal with those heavy lifting),從而讓你把更多的時間精力花在更有價值的事情上。app

那麼 AWS KMS 爲用戶作了哪些麻煩的工做呢?ui

  1. 徹底託管:你不須要額外的服務器,不須要額外的維護人員。
  2. 簡化加密過程:你不須要去在乎繁瑣的加密細節過程,只須要調用相關接口就好了。
  3. 安全審計功能:關可以確保安全是不夠的,你還須要知道誰具有這個密鑰的使用權限,誰在何時用了這個密鑰,誰又在何時刪了這個密鑰。這一點對大型企業以及提供平臺服務的公司很是重要。而這些可以精確到很是細顆粒度的審計功能,已經被 AWS 經過 AWS Cloud Trail Service 徹底內置在整個 AWS 生態內了。(It's not enough to be secure, you have to demonstrate to somebody, whether that's internal audit, your boss, or maybe your customers . )
  4. 確保你的密鑰是安全的:你不須要費勁腦汁想辦法把你的密鑰保存在某個機密的、不對外網暴露的地方。事實上 AWS KMS 的密鑰(確切來講是 Matser Key)是徹底保存在內存中的,沒有任何人(包括 AWS 本身)可以獲取到密鑰的原始內容,下文會介紹爲何。
  5. 密鑰 rotate 流程:AWS 會定時或手動刷新密鑰內容,這也是密鑰管理的一個最佳實踐。

How: It's complicated but they do it for you

知道了爲何使用 AWS KMS,接下來也是本文重點內容,瞭解一下 How: KMS 內部實現原理。加密

首先了解一下對稱加密與非對稱加密:簡要來講,對稱加密指的是加密、解密用的是同一個密鑰;非對稱加密指的是加密、解密使用一對密鑰:公鑰和私鑰,你可使用公鑰加密私鑰解密,也能夠反過來。如 HTTPS 用的就是非對稱加密。spa

接下來看看 KMS 內部是如何保存你的密鑰的:假設咱們有一個用於加密數據的密鑰,叫作 Data Key,將 Data 加密事後獲得 Encrypted Data,這個過程很簡單。設計

可是問題來了,該怎麼處理 Data Key 呢,要是攻擊者獲取到了 Data Key,那不至關於數據也就被破解了?正確的選擇是把 Data Key 也用某種密鑰(這裏把它叫作 Matser Key)加密一下(術語叫作 Wrapping),獲得 Encrypted Data Key 。接着咱們把 Encrypted Data 和 Encrypted Data Key 保存在一塊兒,以下圖所示:blog

但是問題又來了:Master Key 怎麼加密?相信你已經察覺出來了,這很像一個俄羅斯套娃(劃掉)接口

你沒有看錯,AWS KMS 還真就是這麼作的,他們這樣一層一層加密密鑰(專業名詞叫作 KMS Key Hierarchy),到最終的那個 Key 的時候,它的確是一個明文,可是:內存

  1. 它完徹底全保存在內存裏面,永遠不會在物理介質裏面保存下來。
  2. 它永遠不會在公網傳輸。

以致於連 AWS 員工都沒有辦法獲取到原始內容。

那麼其餘的 Data Key 呢?我真正加密的數據的數據用的是 Data Key,要是 Data Key 泄漏了怎麼辦?這個問題很重要。那麼 KMS 是如何解決的呢?

KMS 的 Data Key 是在內存中動態生成的,用於加密數據事後,它就在內存中被刪掉了,只有加密事後的 Encrypted Data Key 保留了下來。

借用 AWS re:Invent 2019 上 AWS Solution Architect Peter M.O'Donnell 的話:

KMS is a very serious service, built by very serious people for very serious customers .

總結一下:

  1. Data 是用 Data Key 加密的,獲得 Encrypted Data。
  2. Encrypted Data 和 Encrypted Data Key 保存在了一塊兒。
  3. 你就算獲得了 Encrypted Data 和 Encrypted Data Key 也沒用,你還得獲得上一層加密此 Encrypted Data Key 的 Matser Key,一層一層往上,你得知道最終那個在 Top Level 的 Master Key。
  4. KMS 在根本上經過設計,確保了沒有任何人可以獲取到 Top Level Master Key。
  5. 因此你的數據是安全的。

這篇文章介紹了 AWS KMS 是什麼、爲何要用 KMS 以及 KMS 是如何保護你的密鑰從而保護你的數據的,下一篇咱們從實際應用的角度,來看看該怎麼將 KMS 具體應用到你的系統中。

相關閱讀:

  1. https://amazonaws-china.com/kms/
  2. AWS re:Invent 2019: Using AWS KMS for data protection, access control, and audit
  3. AWS Security Basics - AWS KMS
相關文章
相關標籤/搜索