簡體   English   中英

如何在列級別使用 AWS KMS 加密 AWS RDS 中的數據?

[英]How to encrypt data in AWS RDS with AWS KMS on the column level?

我發現AWS RDS 允許使用 AWS KMS 加密數據庫資源 因為它是在 AWS 基礎設施內完成的,所以可以輕松地自動輪換加密密鑰。 這很酷,但它只是靜態加密。

我還想加密數據庫中的一些特定列。 例如 SSN。 我想將它們加密存儲並解密它們以顯示在我的應用程序中。 此外,我希望每個用戶都有一個單獨的密鑰。

我觀察到的主要問題是鑰匙的旋轉。 當我想為一個用戶旋轉密鑰時,我想在我的應用程序中執行此操作:

  • 從 KMS 獲取當前的加密密鑰
  • 解密使用當前密鑰加密的 RDS 中的所有數據
  • 生成新的加密密鑰
  • 再次加密一切並將數據存儲在 RDS 中
  • 將新密鑰存儲在 KMS 中

這里的主要問題是將所有內容保留在“事務”中 - 如果一切正常,則“提交”,如果出現任何問題,則“回滾”所有內容。

我想知道這種列級別加密的密鑰輪換是否可以在 AWS 基礎設施內部自動完成。 你對此有什么想法嗎? 也許您知道針對這種情況的任何其他更好的方法?

您通過每個用戶擁有單獨的密鑰來解決什么問題? KMS 范例是使用策略來授予對客戶主密鑰 (CMK) 的訪問權限。 正如上面 Mark 所指出的,鍵的數量是有限制的。

看看這個演練

底部有一個關於密鑰輪換策略的部分可能會有所幫助:

“推薦的手動密鑰輪換方法是在 AWS KMS 中使用密鑰別名。這允許用戶在配置數據庫時始終使用相同的密鑰別名 select,而密鑰管理員輪換底層 CMK。通過保留舊 CMK,您可以允許任何應用程序當前使用此密鑰仍可解密由其加密的任何數據,只要 CMK 密鑰策略仍授予 AWSServiceRoleForRDS 角色作為密鑰用戶的權限。它還允許使用新 CMK 加密任何新數據。

您是否使用 AWS Cognito 之類的工具在每個用戶登錄時為他們提供臨時 IAM 權限? 否則,我看不到為每個用戶提供單獨的 KMS 密鑰的意義,因為您將授予單個實體(您的服務器)訪問所有密鑰的權限。 另請注意,AWS 賬戶中有 10,000 個 KMS 密鑰的限制。 這是相當多的,但如果你有一個任何人都可以注冊的網站,如果你為每個用戶分配一個密鑰,你可能會遇到這個限制。

至於自動處理密鑰輪換,由於您必須編寫自定義代碼來加密數據庫中的各個列值,因此您還必須編寫代碼來執行密鑰輪換過程的所有步驟。 您可以將其創建為 AWS Lambda function 並將其配置為“自動”運行,但這不是亞馬遜在沒有任何自定義代碼的情況下為您提供的開箱即用的東西。

我還想加密數據庫中的一些特定列。

然后我假設您將使用某種形式的密鑰包裝( 數據密鑰

我觀察到的主要問題是鑰匙的旋轉
..
再次加密一切並將數據存儲在 RDS 中
將新密鑰存儲在 KMS 中

密鑰輪換的目的是限制由單個密鑰加密的數據量,而不是重新加密整個加密內容。

建議:

  • 正如已經鏈接的那樣 - 使用隨機(每行?)數據密鑰加密您的數據。
  • 使用用戶特定的密鑰加密數據密鑰。
  • 使用 KMS 密鑰加密用戶密鑰

密鑰輪換 (KMS) 對您來說應該是透明的,無需執行任何操作。

如果您希望手動輪換用戶密鑰,您可以,恕我直言,它不是那么重要 - 用戶密鑰用於加密數據密鑰 - 相對較短的高熵數據。

恕我直言,采取的輪換操作應該是創建一個新密鑰並保留舊密鑰以用於解密目的,而不是重新加密所有數據庫記錄

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM