DynamoDB 有加密嗎?
有。所有 DynamoDB 資料預設都會靜態加密,使用存放在 AWS Key Management Service(KMS)裡的加密金鑰,而且加密無法關閉。你可以選擇金鑰類型 — AWS 擁有的金鑰(預設,免費)、AWS 受管金鑰,或客戶受管金鑰 — 而傳輸中的資料則以 HTTPS/TLS 保護。
靜態加密涵蓋了什麼
加密適用於一張加密資料表存放在持久性媒體上的所有東西:資料表本身(包含它的主索引鍵)、本地與全域次要索引、串流、全域資料表,以及備份。請注意,如果你的資料表有排序索引鍵,其中一些標示範圍邊界的排序索引鍵,會以純文字形式存放在資料表的中繼資料裡。
三種金鑰選項
- AWS 擁有的金鑰 — 預設值。由 DynamoDB 擁有並管理,不額外收費。
- AWS 受管金鑰 — 存放在你的帳戶中、由 AWS KMS 管理(會產生 KMS 費用)。
- 客戶受管金鑰 — 由你建立、擁有並輪替,對存取有完整控制權(會產生 KMS 費用)。
你隨時可以從主控台、CLI 或 API 在各種金鑰類型之間切換。
「會產生 KMS 費用」實際上是多少錢
AWS 只說有這筆費用,然後讓你自己去算價,於是大家就假設在一個每月數百萬次請求的資料庫上會有按請求計的費用。其實沒有。加密文件講得很明確:"DynamoDB doesn't call AWS KMS for every DynamoDB operation. The key is refreshed once every 5 minutes per caller with active traffic."
這就化約成你可以自己驗算的算術。一個持續有流量的呼叫端每小時更新 12 次,所以在一個 730 小時的月份裡:
- 請求數:12 × 730 = 8,760 次 KMS 呼叫,以每 10,000 次 $0.03 計 = $0.026。
- 金鑰本身:客戶受管金鑰是每月 $1,按小時比例計算。AWS 受管金鑰沒有每月金鑰費用,只有請求費用。
所以一張繁忙資料表上的客戶受管金鑰大約是每月 $1.03,而且隨著流量成長,請求那一半幾乎不動。五十個應用程式執行個體打同一張資料表是 438,000 次呼叫,也就是 $1.31。假如 DynamoDB 是每個操作都呼叫 KMS,一張每月服務兩億次請求的資料表就會多出 $600。
在你選定客戶受管金鑰之前,還有一件值得先算進預算的事:停用它或排定刪除它,會讓資料表進入 Inaccessible 狀態,而如果 DynamoDB 超過七天無法取用該金鑰,資料表就會被封存成一份隨需備份,而那份備份是要跟你收費的。
這對你的應用程式是透明的
你讀取資料時,DynamoDB 會透明地解密。你不需要為了使用加密資料表改動任何程式碼,查詢照跑不誤,延遲也維持在同樣的個位數毫秒範圍。若要在個別屬性值離開你的應用程式之前就做端對端保護,AWS 也提供透過 AWS Database Encryption SDK 的用戶端加密。
深入了解
備份同樣是加密的 — 到備份與 PITR 指南看它們的運作方式,用定價計算機估算資料表成本(KMS 是分開計費的),並下載 DynoTable 來瀏覽你那些加密的資料表 — 解密在資料抵達任何用戶端之前,就已經由 AWS 處理完了。
參考資料
- DynamoDB encryption at rest — Amazon DynamoDB Developer Guide
- What is Amazon DynamoDB? — Amazon DynamoDB Developer Guide
- What is the AWS Database Encryption SDK? — AWS Database Encryption SDK Developer Guide
- DynamoDB encryption at rest: How it works — Amazon DynamoDB Developer Guide
- AWS Key Management Service pricing — AWS
最後驗證於 2026-07-13,對照上方連結的 AWS 官方文件。成本一節所用的 KMS 更新間隔與價格取得於 2026-07-28。