DynamoDB 暗号化クライアントアプリケーションの問題のトラブルシューティング - AWS データベース暗号化 SDK

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

DynamoDB 暗号化クライアントアプリケーションの問題のトラブルシューティング

注記

クライアント側の暗号化ライブラリの名前が AWS Database Encryption に変更されましたSDK。次のトピックには、DynamoDB Encryption Client for Java のバージョン 1.x~2.x および DynamoDB Encryption Client for Python のバージョン 1.x~3.x に関する情報が記載されています。詳細については、AWS 「 Database Encryption SDK for DynamoDB version support」を参照してください。

このセクションでは、DynamoDB 暗号化クライアントを使用する際に直面する可能性のある問題を示すとともに、その問題の解決方法を提案します。

DynamoDB 暗号化クライアントに関するフィードバックを提供するには、 aws-dynamodb-encryption-javaまたは aws-dynamodb-encryption-python GitHub リポジトリに問題を提出します。

このドキュメントに関するフィードバックを提供するには、任意のページのフィードバックリンクを使用します。

アクセスが拒否されました

問題: アプリケーションから必要なリソースにアクセスできない。

提案: 必要なアクセス許可について説明します。アプリケーションが実行されているセキュリティコンテキストにこのアクセス許可を追加します。

詳細

DynamoDB 暗号化クライアントライブラリを使用するアプリケーションを実行するには、そのコンポーネントを使用するためのアクセス許可が呼び出し元に必要です。それ以外の場合、必要な要素への発信者のアクセスは拒否されます。

  • DynamoDB 暗号化クライアントは、Amazon Web Services (AWS) アカウントを必要とせず、どの AWS サービスにも依存しません。ただし、アプリケーションが を使用している場合は AWS アカウント AWS、アカウントを使用するアクセス許可を持つ および ユーザーが必要です。

  • DynamoDB 暗号化クライアントには Amazon DynamoDB は必要ありません。ただし、クライアントを使用するアプリケーションで DynamoDB テーブルを作成する、テーブルに項目を入力する、またはテーブルから項目を取得する場合、呼び出し元には、 AWS アカウントで必要な DynamoDB オペレーションを使用するためのアクセス許可が必要です。詳細については、Amazon DynamoDB デベロッパーガイドアクセスコントロールのトピックを参照してください。

  • アプリケーションが Python 用 DynamoDB 暗号化クライアントでクライアントヘルパークラスを使用している場合、呼び出し元には DynamoDB DescribeTableオペレーションを呼び出すアクセス許可が必要です。

  • DynamoDB 暗号化クライアントには AWS Key Management Service () は必要ありませんAWS KMS。ただし、アプリケーションが Direct KMS Materials Provider を使用している場合、または を使用するプロバイダーストアで最新プロバイダーを使用している場合 AWS KMS、呼び出し元には および Decrypt オペレーションを使用する AWS KMS GenerateDataKeyアクセス許可が必要です。

署名の検証失敗

問題: 署名検証に失敗したため、項目を復号できない。また、項目は、意図したように暗号化および署名されていない場合があります。

提案: 指定した属性アクションが、項目内のすべての属性で構成されていることを確認してください。項目を復号する場合は、項目の暗号化に使用するアクションと一致する属性アクションを指定します。

詳細

指定する属性アクションによって、DynamoDB 暗号化クライアントに、暗号化して署名する属性、署名する (ただし、暗号化はしない) 属性、および無視する属性が伝達されます。

指定した属性アクションが、項目のすべての属性で構成されていない場合、その項目は、意図した方法で暗号化および署名されない場合があります。項目の復号時に指定する属性アクションが、項目の暗号化時に指定した属性アクションと異なる場合は、署名検証が失敗する場合があります。これは、分散アプリケーション固有の問題で、新しい属性アクションがすべてのホストに反映されていない可能性があります。

署名の検証エラーは解決が困難です。それらのエラーを防ぐために、データモデルの変更時に追加の対策を講じてください。詳細については、「データモデルの変更」を参照してください。

古いバージョンのグローバルテーブルの問題

問題: 署名の検証が失敗するため、古いバージョンの Amazon DynamoDB グローバルテーブルの項目を復号できません。

推奨: 予約されたレプリケーションフィールドが暗号化または署名されないように属性アクションを設定します。

詳細

DynamoDB グローバルテーブルを使用して DynamoDB Encryption Client を使用できます。マルチリージョンKMSキーを持つグローバルテーブルを使用し、グローバルテーブルがレプリケートされるすべての にKMSキー AWS リージョン をレプリケートすることをお勧めします。

グローバルテーブルのバージョン 2019.11.21 以降、特別な設定を行うことなく、DynamoDB Encryption Client でグローバルテーブルを使用できるようになりました。ただし、グローバルテーブルのバージョン 2017.11.29 を使用する場合は、予約されたレプリケーションフィールドが暗号化または署名されていないことを確認する必要があります。

グローバルテーブルのバージョン 2017.11.29 を使用している場合は、次の属性の属性アクションを JavaDO_NOTHING または Python@DoNotTouch に設定する必要があります。

  • aws:rep:deleting

  • aws:rep:updatetime

  • aws:rep:updateregion

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

最新プロバイダーのパフォーマンスが悪い

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

提案: time-to-live 値とキャッシュサイズを調整します。

詳細

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

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

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