

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# DynamoDB 暗号化クライアントアプリケーションの問題のトラブルシューティング
<a name="troubleshooting"></a>

**注記**  
クライアント側の暗号化ライブラリの名前が [AWS Database Encryption SDK](DDBEC-rename.md) に変更されました。次のトピックには、DynamoDB Encryption Client for Java のバージョン 1.x～2.x および DynamoDB Encryption Client for Python のバージョン 1.x～3.x に関する情報が記載されています。詳細については、「[AWS Database Encryption 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](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_create-admin-group.html)
+ DynamoDB 暗号化クライアントには Amazon DynamoDB は必要ありません。ただし、クライアントを使用するアプリケーションで DynamoDB テーブルを作成する、テーブルに項目を入力する、またはテーブルから項目を取得する場合、呼び出し元には、 AWS アカウントで必要な DynamoDB オペレーションを使用するためのアクセス許可が必要です。詳細については、*Amazon DynamoDB デベロッパーガイド*の[アクセスコントロールのトピック](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/access-control-overview.html)を参照してください。
+ アプリケーションが、Python 用 DynamoDB 暗号化クライアントで[クライアントヘルパークラス](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。ただし、アプリケーションが [Direct 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 グローバルテーブル](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GlobalTables.html)を使用して DynamoDB Encryption Client を使用できます。[マルチリージョン KMS キー](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html)を持つグローバルテーブルを使用し、グローバルテーブルがレプリケートされるすべての AWS リージョン に KMS キーをレプリケートすることをお勧めします。

グローバルテーブルの[バージョン 2019.11.21](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/globaltables.V2.html) 以降、特別な設定を行うことなく、DynamoDB Encryption Client でグローバルテーブルを使用できるようになりました。ただし、グローバルテーブルの[バージョン 2017.11.29](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/globaltables.V1.html) を使用する場合は、予約されたレプリケーションフィールドが暗号化または署名されていないことを確認する必要があります。

グローバルテーブルのバージョン 2017.11.29 を使用している場合は、次の属性の属性アクションを [Java](java-using.md#attribute-actions-java) で `DO_NOTHING` または [Python](python-using.md#python-attribute-actions) で `@DoNotTouch` に設定する必要があります。
+ `aws:rep:deleting`
+ `aws:rep:updatetime`
+ `aws:rep:updateregion`

他のバージョンのグローバルテーブルを使用している場合は、アクションは必要ありません。

## 最新プロバイダーのパフォーマンスが悪い
<a name="mrp-ttl-delay"></a>

**問題**: 特に DynamoDB 暗号化クライアントの新しいバージョンに更新すると、アプリケーションの応答性が低下します。

**提案**: 有効期限 (TTL) 値とキャッシュサイズを調整します。

**詳細**

最新のプロバイダーは、暗号化マテリアルの再利用を制限できるようにすることで、DynamoDB 暗号化クライアントを使用するアプリケーションのパフォーマンスを向上させるように設計されています。アプリケーションの最新プロバイダーを設定するときは、パフォーマンスの向上と、キャッシュと再利用によって生じるセキュリティ上の問題とのバランスを取る必要があります。

DynamoDB 暗号化クライアントの新しいバージョンでは、有効期限 (TTL) の値によって、キャッシュされた暗号化マテリアルプロバイダー (CMP) の使用期間が決定されます。TTL により、最新プロバイダーが新しいバージョンの CMP をチェックする頻度も決定されます。

TTL が長すぎると、アプリケーションがビジネスルールやセキュリティ基準に違反する可能性があります。TTL が短すぎると、プロバイダーストアへの頻繁な呼び出しによって、プロバイダーストアがアプリケーションや、サービスアカウントを共有する他のアプリケーションからのリクエストを抑制する可能性があります。この問題を解決するには、レイテンシーと可用性の目標を満たし、セキュリティ基準に準拠する値に TTL とキャッシュサイズを調整します。詳細については、[有効期限 (TTL) の値を設定する](most-recent-provider.md#most-recent-provider-ttl) を参照してください