

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 用戶端加密和伺服器端加密
<a name="client-server-side"></a>


****  

|  | 
| --- |
| 我們的用戶端加密程式庫已重新命名為 AWS 資料庫加密 SDK。此開發人員指南仍提供有關 [DynamoDB 加密用戶端](legacy-dynamodb-encryption-client.md)的資訊。 | 

適用於 DynamoDB 的 AWS Database Encryption SDK *支援用戶端加密*，您可以在其中加密資料表資料，然後再將其傳送至資料庫。不過，DynamoDB 提供伺服器端*靜態加密*功能，可在資料表保留到磁碟時將其透明加密，並在您存取資料表時解密。

您所應選擇的工具，取決於資料的敏感度以及應用程式的安全性需求。您可以同時使用 DynamoDB AWS 資料庫加密 SDK 和靜態加密。當您將加密和簽章的項目傳送至 DynamoDB 時，DynamoDB 不會將項目識別為受保護。它只會偵測具有二進位屬性值的一般資料表項目。

**伺服器端靜態加密**

DynamoDB 支援[靜態加密](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/EncryptionAtRest.html)，這是一種*伺服器端加密*功能，DynamoDB 會在資料表保留到磁碟時為您透明加密資料表，並在您存取資料表資料時解密資料表。

當您使用 AWS SDK 與 DynamoDB 互動時，您的資料預設會透過 HTTPS 連線在傳輸中加密、在 DynamoDB 端點解密，然後在存放在 DynamoDB 之前重新加密。
+ **預設加密。**DynamoDB 會在寫入所有資料表時，以透明方式加密和解密資料表。沒有啟用或停用靜態加密的選項。
+ **DynamoDB 會建立和管理密碼編譯金鑰。 **每個資料表的唯一金鑰受到 的保護[AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)，這些 永遠不會讓 [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/)(AWS KMS) 處於未加密狀態。根據預設，DynamoDB [AWS 擁有的金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk) 在 DynamoDB 服務帳戶中使用 ，但您可以選擇帳戶中的 [AWS 受管金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk)或[客戶受管金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)來保護部分或全部資料表。
+ **所有資料表資料都會在磁碟上加密。 **將加密的資料表儲存至磁碟時，DynamoDB 會加密所有資料表資料，包括[主索引](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey)鍵和本機和全域[次要索引](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.SecondaryIndexes)。如果您的資料表有排序索引鍵，則某些標示範圍界限的排序索引鍵將會以純文字的格式存放在資料表中繼資料中。
+ **與資料表相關的物件也會加密。**靜態加密可在 [DynamoDB 串流](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html)、[全域資料表](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GlobalTables.html)和[備份](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/BackupRestore.html)寫入耐用媒體時加以保護。
+ **您的項目會在您存取時解密。 **當您存取資料表時，DynamoDB 會解密包含目標項目的資料表部分，並將純文字項目傳回給您。

**AWS 適用於 DynamoDB 的資料庫加密 SDK**

無論是在傳輸中、靜態時，還是從來源儲存至 DynamoDB 時，用戶端加密都可為資料提供端對端的保護。您的純文字資料絕不會公開給任何第三方，包括 AWS。您可以使用適用於 DynamoDB 的 AWS 資料庫加密 SDK 搭配新的 DynamoDB 資料表，也可以將現有的 Amazon DynamoDB 資料表遷移至適用於 DynamoDB 的 AWS 資料庫加密 SDK 的最新版本。
+ **傳輸中和靜態的資料都受到保護。**它永遠不會向任何第三方公開，包括 AWS。
+ **您可以簽署您的資料表項目。**您可以指示 DynamoDB 的 AWS Database Encryption SDK 計算資料表項目的全部或部分簽章，包括主索引鍵屬性。此簽章可讓您偵測對整體項目的未授權變更，包括新增或刪除屬性，或是交換屬性值。
+ 您可以透過[選取 keyring ](keyrings.md)來**判斷如何保護資料**。您的 keyring 會決定保護資料金鑰的包裝金鑰，最終決定您的資料。使用對您的任務而言最安全的包裝金鑰。
+ **適用於 DynamoDB 的 AWS Database Encryption SDK 不會加密整個資料表。**您可以選擇在項目中加密的屬性。適用於 DynamoDB 的 AWS Database Encryption SDK 不會加密整個項目。它不會加密屬性名稱，或是主索引鍵 (分割區索引鍵和排序索引鍵) 屬性的名稱或值。

**AWS Encryption SDK**

如果您要加密存放在 DynamoDB 中的資料，建議您使用適用於 DynamoDB 的 AWS 資料庫加密 SDK。

[AWS Encryption SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/) 是用戶端加密程式庫，可協助您進行一般資料的加密和解密。雖然它可保護任何類型的資料，但在設計上並不是用來處理結構化資料 (例如資料庫記錄)。與適用於 DynamoDB 的 AWS 資料庫加密 SDK 不同， AWS Encryption SDK 無法提供項目層級完整性檢查，而且沒有辨識屬性或防止主要金鑰加密的邏輯。

如果您使用 AWS Encryption SDK 來加密資料表的任何元素，請記住，它與適用於 DynamoDB 的 AWS Database Encryption SDK 不相容。您無法用一個程式庫加密，但用另一個程式庫解密。