Python 用 Amazon DynamoDB 暗号化クライアントの使用方法 - AWS データベース暗号化 SDK

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

Python 用 Amazon 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 バージョンサポート」を参照してください。

このトピックでは、Python 用 Amazon DynamoDB 暗号化クライアントの機能の一部について説明します。他のプログラミング言語には実装されていない機能も含まれます。これらの機能は、最も安全な方法で DynamoDB 暗号化クライアントを簡単に使用できるように設計されています。通常とは異なるユースケースを除き、この方法を使用することをお勧めします。

DynamoDB 暗号化クライアントを使用したプログラミングの詳細については、このガイドの Python の例、 のリポジトリの例 aws-dynamodb-encryption-python GitHub、および DynamoDB 暗号化クライアントの Python ドキュメントを参照してください。

クライアントのヘルパークラス

Python 用 DynamoDB 暗号化クライアントには、DynamoDB の Boto 3 クラスをミラーリングする複数のクライアントヘルパークラスが含まれています。これらのヘルパークラスでは、次のように、暗号化の追加、既存の DynamoDB アプリケーションへの署名、一般的な問題の回避を簡単に行うことができます。

  • オブジェクトにプライマリキーのオーバーライドアクションを追加するか、AttributeActionsオブジェクトがクライアントにプライマリキーを暗号化するようにAttributeActions明示的に指示する場合は例外をスローすることで、項目内のプライマリキーを暗号化しないようにします。AttributeActions オブジェクトのデフォルトアクションが DO_NOTHING の場合、クライアントのヘルパークラスではプライマリキーのアクションが使用されます。それ以外の場合は、SIGN_ONLY を使用します。

  • TableInfo オブジェクトを作成し、DynamoDB への呼び出しに基づいて DynamoDB 暗号化コンテキストを入力します。 DynamoDB これにより、DynamoDB 暗号化コンテキストの精度が確保され、クライアントはプライマリキーを識別できるようになります。

  • DynamoDB テーブルが読み書きされるときにテーブル項目を透過的に暗号化および復号するメソッド (put_itemget_item など) をサポートしています。ただし、update_item メソッドはサポートされていません。

クライアントのヘルパークラスを使用します。低レベルの項目エンクリプタを使用して直接やり取りする必要はありません。項目エンクリプタで高度オプションを設定する必要がある場合を除き、これらのクラスを使用します。

クライアントのヘルパークラスには、以下のものが含まれます。

クライアントヘルパークラスを使用するには、発信者にターゲットテーブルで DynamoDB DescribeTableオペレーションを呼び出すアクセス許可が必要です。

TableInfo クラス

TableInfo クラスは、DynamoDB テーブルを表すヘルパークラスで、プライマリキーとセカンダリインデックスのフィールドがついています。これにより、テーブルに関する正確なリアルタイム情報を簡単に取得できます。

クライアントのヘルパークラスを使用している場合は、TableInfo オブジェクトが作成、使用されます。それ以外の場合、オブジェクトを明示的に作成できます。例については、項目エンクリプタを使用するを参照してください。

TableInfo オブジェクトで refresh_indexed_attributesメソッドを呼び出すと、DynamoDB DescribeTableオペレーションを呼び出すことで、オブジェクトのプロパティ値が入力されます。テーブルのクエリは、ハードコーディングのインデックス名よりも信頼性がはるかに高まります。TableInfo クラスには、DynamoDB 暗号化コンテキストに必要な値を提供する encryption_context_values プロパティも含まれます。

refresh_indexed_attributes メソッドを使用するには、発信者にターゲットテーブルで DynamoDB DescribeTableオペレーションを呼び出すアクセス許可が必要です。

Python の属性アクション

属性アクションは、項目の各属性に対して実行するアクションを項目エンクリプタに指示します。属性アクションを Python で指定するには、デフォルトアクションで AttributeActions オブジェクトと、特定の属性の例外を作成します。有効な値は、列挙型の CryptoAction で定義されています。

重要

属性アクションを使用してテーブル項目を暗号化した後、データモデルから属性を追加または削除すると、署名の検証エラーが発生し、データの復号ができなくなることがあります。詳細な説明については、「データモデルの変更」を参照してください。

DO_NOTHING = 0 SIGN_ONLY = 1 ENCRYPT_AND_SIGN = 2

たとえば、この AttributeActions オブジェクトは、すべての属性のデフォルトとして ENCRYPT_AND_SIGN を確立し、ISBN 属性および PublicationYear 属性の例外を指定します。

actions = AttributeActions( default_action=CryptoAction.ENCRYPT_AND_SIGN, attribute_actions={ 'ISBN': CryptoAction.DO_NOTHING, 'PublicationYear': CryptoAction.SIGN_ONLY } )

クライアントのヘルパークラスを使用している場合は、プライマリキー属性の属性アクションを指定する必要はありません。クライアントのヘルパークラスを使用して、プライマリキーを暗号化することはできません。

クライアントのヘルパークラスを使用しておらず、デフォルトアクションが ENCRYPT_AND_SIGN の場合は、プライマリキーのアクションを指定する必要があります。プライマリキーに推奨されているアクションは SIGN_ONLY です。これを容易にするには、 set_index_keysメソッドを使用します。これは、 がデフォルトのアクションである場合、プライマリキーに SIGN_ONLY を使用するかNOTHING、DO_ を使用します。

警告

プライマリキー属性を暗号化しないでください。DynamoDB でテーブル全体のスキャンを実行せずに項目を見つけられるように、プレーンテキストの状態を維持する必要があります。

actions = AttributeActions( default_action=CryptoAction.ENCRYPT_AND_SIGN, ) actions.set_index_keys(*table_info.protected_index_keys())