

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

# 故障診斷 DynamoDB Encryption Client 應用程式的問題
<a name="troubleshooting"></a>

**注意**  
我們的用戶端加密程式庫已[重新命名為 AWS 資料庫加密 SDK](DDBEC-rename.md)。下列主題提供有關適用於 Java 的 DynamoDB 加密用戶端 1.*x*-2.*x* 版和適用於 Python 的 DynamoDB 加密用戶端 1.*x*-3.*x* 版的資訊。如需詳細資訊，請參閱[AWS 資料庫加密 SDK for DynamoDB 版本支援](legacy-dynamodb-encryption-client.md#legacy-support)。

本節說明使用 DynamoDB 加密用戶端時可能遇到的問題，並提供解決這些問題的建議。

若要提供 DynamoDB 加密用戶端的意見回饋，請在 [aws-dynamodb-encryption-java](https://github.com/aws/aws-dynamodb-encryption-java/) 或 [aws-dynamodb-encryption-python](https://github.com/aws/aws-dynamodb-encryption-python/) GitHub 儲存庫中提出問題。

若要提供有關此文件的意見回饋，請使用任何頁面上的意見回饋連結。

**Topics**
+ [存取遭拒](#kms-permissions)
+ [簽章驗證失敗](#change-data-model)
+ [舊版全域資料表的問題](#fix-global-tables)
+ [最近提供者的效能不佳](#mrp-ttl-delay)

## 存取遭拒
<a name="kms-permissions"></a>

**問題**：您的應用程式遭拒，無法存取其所需的資源。

**建議**：了解必要的許可，並將這些許可新增至您的應用程式執行所在的安全性細節。

**詳細資訊**

若要執行使用 DynamoDB 加密用戶端程式庫的應用程式，發起人必須具有使用其元件的許可。否則他們會遭拒，無法存取所需的元素。
+ DynamoDB 加密用戶端不需要 Amazon Web Services (AWS) 帳戶或依賴任何 AWS 服務。不過，如果您的應用程式使用 AWS，您需要 [AWS 帳戶](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/)和[具有帳戶使用許可的使用者](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_create-admin-group.html)。
+ DynamoDB 加密用戶端不需要 Amazon DynamoDB。不過，如果使用 用戶端的應用程式建立 DynamoDB 資料表、將項目放入資料表或從資料表取得項目，呼叫者必須具有在您的 中使用所需 DynamoDB 操作的許可 AWS 帳戶。如需詳細資訊，請參閱《*Amazon DynamoDB 開發人員指南*》中的[存取控制主題](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/access-control-overview.html)。
+ 如果您的應用程式在 DynamoDB Encryption Client for Python 中使用[用戶端協助程式類別](python-using.md#python-helpers)，呼叫者必須具有呼叫 DynamoDB [DescribeTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeTable.html) 操作的許可。
+ DynamoDB 加密用戶端不需要 AWS Key Management Service (AWS KMS)。不過，如果您的應用程式使用[直接 KMS 資料提供者](direct-kms-provider.md)，或它使用[最近提供者](most-recent-provider.md)搭配使用 的提供者存放區 AWS KMS，呼叫者必須具有使用 AWS KMS [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) 和 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 操作的許可。

## 簽章驗證失敗
<a name="change-data-model"></a>

**問題**：項目因為簽章驗證失敗而無法解密。此項目也無法如您所願進行加密和簽署。

**建議**：確保您提供的屬性動作會考量項目中的所有屬性。將項目解密時，請務必提供與用來解密項目之動作相符的屬性動作。

**詳細資訊**

您提供的[屬性動作](DDBEC-legacy-concepts.md#legacy-attribute-actions)會告知 DynamoDB 加密用戶端要加密和簽署的屬性、要簽署的屬性 （但不加密），以及要忽略的屬性。

如果您指定的屬性動作並未考量項目中的所有屬性，此項目便無法如您預期的方式進行加密和簽署。如果您在加密項目時提供的屬性動作與您在解密項目時提供的屬性動作不同，則簽章驗證可能會失敗。這是一個特殊問題，出現於新屬性動作尚未傳播到所有主機的分散式應用程式中。

簽章驗證錯誤很難解決。如需協助防範其發生，請在變更資料模型時採取額外的預防措施。如需詳細資訊，請參閱[變更您的資料模型](data-model.md)。

## 舊版全域資料表的問題
<a name="fix-global-tables"></a>

**問題**：舊版 Amazon DynamoDB 全域資料表中的項目無法解密，因為簽章驗證失敗。

**建議**：設定屬性動作，讓保留的複寫欄位不會加密或簽署。

**詳細資訊**

您可以使用 DynamoDB 加密用戶端搭配 [DynamoDB 全域資料表](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GlobalTables.html)。我們建議您使用具有[多區域 KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html)的全域資料表，並將 KMS 金鑰複寫到複寫全域資料表的所有 AWS 區域 。

從全域資料表 [2019.11.21 版](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/globaltables.V2.html)開始，您可以將全域資料表與 DynamoDB 加密用戶端搭配使用，而不需要任何特殊組態。不過，如果您使用全域資料表 [2017.11.29 版](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/globaltables.V1.html)，您必須確保保留的複寫欄位未加密或簽署。

如果您使用的是全域資料表 2017.11.29 版，則必須在 `DO_NOTHING` [Java](java-using.md#attribute-actions-java) 或 [Python](python-using.md#python-attribute-actions) `@DoNotTouch`中將下列屬性的屬性動作設定為 。
+ `aws:rep:deleting`
+ `aws:rep:updatetime`
+ `aws:rep:updateregion`

如果您使用任何其他版本的全域資料表，則不需要任何動作。

## 最近提供者的效能不佳
<a name="mrp-ttl-delay"></a>

**問題**：您的應用程式回應較差，特別是在更新至較新版本的 DynamoDB 加密用戶端之後。

**建議**：調整time-to-live值和快取大小。

**詳細資訊**

最新提供者旨在透過允許有限的密碼編譯資料重複使用，改善使用 DynamoDB 加密用戶端的應用程式效能。當您為應用程式設定最新提供者時，您必須平衡改善的效能與快取和重複使用引起的安全問題。

在較新版本的 DynamoDB 加密用戶端中，time-to-live(TTL) 值會決定可使用快取密碼編譯材料提供者 CMPs) 的時間長度。TTL 也會判斷最近提供者檢查 CMP 新版本的頻率。

如果您的 TTL 太長，您的應用程式可能會違反您的業務規則或安全標準。如果您的 TTL 太短，經常呼叫提供者存放區可能會導致提供者存放區調節來自您應用程式和其他共用您服務帳戶的應用程式的請求。若要解決此問題，請將 TTL 和快取大小調整為符合您延遲和可用性目標，並符合安全標準的值。如需詳細資訊，請參閱[設定time-to-live值](most-recent-provider.md#most-recent-provider-ttl)。