

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

# Python 用 DynamoDB 暗号化クライアント
<a name="python"></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)」を参照してください。

このトピックでは、Python 用 DynamoDB 暗号化クライアントをインストールして使用する方法について説明します。このコードは、GitHub の [aws-dynamodb-encryption-python](https://github.com/aws/aws-dynamodb-encryption-python/) リポジトリにあり、開始するのに役立つ完全でテスト済みの[サンプルコード](https://github.com/aws/aws-dynamodb-encryption-python/tree/master/examples)が含まれています。

**注記**  
DynamoDB Encryption Client for Python のバージョン 1.x.x および 2.x.x は、2022 年 7 月に[サポート終了フェーズ](what-is-database-encryption-sdk.md#support)に入ります。可能な限り早急に新しいバージョンにアップグレードしてください。

**Topics**
+ [前提条件](#python-prerequisites)
+ [インストール](#python-installation)
+ [Python 用 Amazon DynamoDB 暗号化クライアントの使用方法](python-using.md)
+ [Python の例](python-examples.md)

## 前提条件
<a name="python-prerequisites"></a>

Amazon DynamoDB Encryption Client for Python をインストールする前に、以下の前提条件が満たされていることを確認してください。

**Python のサポートされているバージョン**  
Amazon DynamoDB Encryption Client for Python バージョン 3.3.0 以降では、Python 3.8 以降が必要です。Python をダウンロードするには、「[Python のダウンロード](https://www.python.org/downloads/)」を参照してください。  
Amazon DynamoDB Encryption Client for Python の以前のバージョンでは Python 2.7 および Python 3.4 以降がサポートされていますが、最新バージョンの DynamoDB 暗号化クライアントを使用することをお勧めします。

**Python 用 pip インストールツール**  
Python 3.6 以降には **pip** が含まれていますが、アップグレードすることもできます。pip のアップグレードまたはインストールの詳細については、**pip** ドキュメント内の[インストール](https://pip.pypa.io/en/latest/installation/)を参照してください。

## インストール
<a name="python-installation"></a>

以下の例に示すように、**pip** を使用して Amazon DynamoDB Encryption Client for Python をインストールします。

**最新バージョンをインストールするには**  

```
pip install dynamodb-encryption-sdk
```

**pip** を使用してパッケージをインストールおよびアップグレードする方法の詳細については、「[パッケージのインストール](https://packaging.python.org/tutorials/installing-packages/)」を参照してください。

DynamoDB 暗号化クライアントでは、すべてのプラットフォームで [cryptography ライブラリ](https://cryptography.io/en/latest/)が必要です。**pip** のすべてのバージョンでは、Windows に **cryptography** ライブラリがインストールされて構築されます。**pip** 8.1 以降では、Linux に **cryptography** がインストールされて構築されます。以前のバージョンの **pip** を使用していて、Linux 環境に**暗号**ライブラリを構築するために必要なツールがない場合は、それらをインストールする必要があります。詳細については、「[Building cryptography on Linux](https://cryptography.io/en/latest/installation/#building-cryptography-on-linux)」を参照してください。

DynamoDB 暗号化クライアントの最新開発バージョンは、GitHub の [aws-dynamodb-encryption-python](https://github.com/aws/aws-dynamodb-encryption-python/) リポジトリから取得できます。

DynamoDB 暗号化クライアントをインストールしたら、このガイドの Python コードの例を見ながら開始します。

# Python 用 Amazon DynamoDB 暗号化クライアントの使用方法
<a name="python-using"></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)」を参照してください。

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

DynamoDB 暗号化クライアントを使用したプログラミングの詳細については、このガイドの [Python の例](python-examples.md)、GitHub の aws-dynamodb-encryption-python リポジトリにある[例](https://github.com/aws/aws-dynamodb-encryption-python/tree/master/examples)、および DynamoDB 暗号化クライアント用の [Python ドキュメント](https://aws-dynamodb-encryption-python.readthedocs.io/en/latest/)を参照してください。

**Topics**
+ [クライアントのヘルパークラス](#python-helpers)
+ [TableInfo クラス](#table-info)
+ [Python の属性アクション](#python-attribute-actions)

## クライアントのヘルパークラス
<a name="python-helpers"></a>

Python 用 DynamoDB 暗号化クライアントには、DynamoDB の Boto 3 クラスをミラーリングする複数のクライアントヘルパークラスが含まれています。これらのヘルパークラスでは、次のように、暗号化の追加、既存の DynamoDB アプリケーションへの署名、一般的な問題の回避を簡単に行うことができます。
+ 項目のプライマリキーを暗号化できないように、プライマリキーの上書きアクションを [AttributeActions](#python-attribute-actions) オブジェクトを追加するか、`AttributeActions` オブジェクトを使用してプライマリキーを暗号化するようにクライアントに明示的に指示している場合は例外をスローします。`AttributeActions` オブジェクトのデフォルトアクションが `DO_NOTHING` の場合、クライアントのヘルパークラスではプライマリキーのアクションが使用されます。それ以外の場合は、`SIGN_ONLY` を使用します。
+ [TableInfo オブジェクト](#python-helpers)を作成し、DynamoDB への呼び出しに基づいて [DynamoDB 暗号化コンテキスト](concepts.md#encryption-context)にデータを入力します。これにより、DynamoDB 暗号化コンテキストの精度が確保され、クライアントはプライマリキーを識別できるようになります。
+ DynamoDB テーブルが読み書きされるときにテーブル項目を透過的に暗号化および復号するメソッド (`put_item` や `get_item` など) をサポートしています。ただし、`update_item` メソッドはサポートされていません。

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

クライアントのヘルパークラスには、以下のものが含まれます。
+ [EncryptedTable](https://aws-dynamodb-encryption-python.readthedocs.io/en/latest/lib/encrypted/table.html#module-dynamodb_encryption_sdk.encrypted.table): 1 つのテーブルを同時に処理するために DynamoDB で[テーブル](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#table)リソースを使用するアプリケーション用。
+ [EncryptedResource](https://aws-dynamodb-encryption-python.readthedocs.io/en/latest/lib/encrypted/resource.html): バッチ処理用に DynamoDB で[サービスリソース](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#service-resource)クラスを使用するアプリケーション用。
+ [EncryptedClient](https://aws-dynamodb-encryption-python.readthedocs.io/en/latest/lib/encrypted/client.html): DynamoDB で[低レベルクライアント](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#client)を使用するアプリケーション用。

クライアントのヘルパークラスを使用するには、ターゲットテーブルの DynamoDB [DescribeTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeTable.html) オペレーションを呼び出すアクセス許可が発信者に必要です。

## TableInfo クラス
<a name="table-info"></a>

[TableInfo](https://aws-dynamodb-encryption-python.readthedocs.io/en/latest/lib/tools/structures.html#dynamodb_encryption_sdk.structures.TableInfo) クラスは、DynamoDB テーブルを表すヘルパークラスです。プライマリキーとセカンダリインデックスのフィールドを使用します。これにより、テーブルに関する正確なリアルタイム情報を簡単に取得できます。

[クライアントのヘルパークラス](#python-helpers)を使用している場合は、`TableInfo` オブジェクトが作成、使用されます。それ以外の場合、オブジェクトを明示的に作成できます。例については、[項目エンクリプタを使用する](python-examples.md#python-example-item-encryptor)を参照してください。

`TableInfo` オブジェクトで `refresh_indexed_attributes` メソッドを呼び出すと、DynamoDB [DescribeTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeTable.html) オペレーションを呼び出して、オブジェクトのプロパティ値が入力されます。テーブルのクエリは、ハードコーディングのインデックス名よりも信頼性がはるかに高まります。`TableInfo` クラスには、[DynamoDB 暗号化コンテキスト](concepts.md#encryption-context)に必要な値を提供する `encryption_context_values` プロパティも含まれます。

`refresh_indexed_attributes` メソッドを使用するには、ターゲットテーブルの DynamoDB [DescribeTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeTable.html) オペレーションを呼び出すアクセス許可が発信者に必要です。

## Python の属性アクション
<a name="python-attribute-actions"></a>

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

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

```
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
    }
)
```

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

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

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

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

# Python 用 DynamoDB 暗号化クライアントのサンプルコード
<a name="python-examples"></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)」を参照してください。

以下の例では、Python 用 DynamoDB 暗号化クライアントを使用して、アプリケーションの DynamoDB データを保護する方法について説明します。GitHub の [aws-dynamodb-encryption-python](https://github.com/aws/aws-dynamodb-encryption-python/) リポジトリの [examples](https://github.com/aws/aws-dynamodb-encryption-python/tree/master/examples) ディレクトリに、その他の例 (および独自の使用に役立つ例) があります。

**Topics**
+ [EncryptedTable クライアントヘルパークラスを使用する](#python-example-table)
+ [項目エンクリプタを使用する](#python-example-item-encryptor)

## EncryptedTable クライアントヘルパークラスを使用する
<a name="python-example-table"></a>

以下の例は、`EncryptedTable` [クライアントヘルパークラス](python-using.md#python-helpers)で [Direct KMS プロバイダー](direct-kms-provider.md)を使用する方法を示しています。この例では、次の [項目エンクリプタを使用する](#python-example-item-encryptor) の例と同じ[暗号化マテリアルプロバイダー](DDBEC-legacy-concepts.md#concept-material-provider)を使用しています。ただし、低レベルの[項目エンクリプタ](DDBEC-legacy-concepts.md#item-encryptor)と直接やり取りするのではなく、`EncryptedTable` クラスを使用します。

これらの例を比較することで、クライアントのヘルパークラスが行う作業を確認できます。この処理では、[DynamoDB 暗号化コンテキスト](concepts.md#encryption-context)を作成します。また、プライマリキー属性が常に署名されているが暗号化されていないことを確認します。暗号化コンテキストを作成し、プライマリキーを検出するには、クライアントのヘルパークラスで DynamoDB [DescribeTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeTable.html) オペレーションを呼び出します。このコードを実行するには、このオペレーションを呼び出すアクセス許可が必要です。

**完全なコードサンプルの参照**: [aws\$1kms\$1encrypted\$1table.py](https://github.com/aws/aws-dynamodb-encryption-python/blob/master/examples/src/dynamodb_encryption_sdk_examples/aws_kms_encrypted_table.py)

ステップ 1: テーブルを作成する  
開始するには、テーブル名を指定して、標準の DynamoDB テーブルのインスタンスを作成します。  

```
table_name='test-table'
table = boto3.resource('dynamodb').Table(table_name)
```

ステップ 2: 暗号化マテリアルプロバイダーを作成する  
選択した[暗号化マテリアルプロバイダー](crypto-materials-providers.md) (CMP) のインスタンスを作成します。  
この例では、[Direct KMS プロバイダー](direct-kms-provider.md)を使用していますが、互換性のある CMP を使用することもできます。Direct KMS プロバイダーを作成するには、[AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys) を指定します。この例では、 の Amazon リソースネーム (ARN) を使用しますが AWS KMS key、任意の有効なキー識別子を使用できます。  

```
kms_key_id='arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'
kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=kms_key_id)
```

ステップ 3: 属性アクションオブジェクトを作成する  
[属性アクション](DDBEC-legacy-concepts.md#legacy-attribute-actions)は、項目の各属性に対して実行するアクションを項目エンクリプタに指示します。この例の `AttributeActions` オブジェクトは、無視される `test` 属性を除くすべての項目を暗号化し、署名します。  
クライアントのヘルパークラスを使用する場合は、プライマリキー属性の属性アクションを指定しないでください。`EncryptedTable` クラスでは、プライマリキー属性に署名しますが、暗号化しません。  

```
actions = AttributeActions(
    default_action=CryptoAction.ENCRYPT_AND_SIGN,
    attribute_actions={'test': CryptoAction.DO_NOTHING}
)
```

ステップ 4: 暗号化されたテーブルを作成する  
標準テーブル、Direct KMS プロバイダー、属性アクションを使用して、暗号化されたテーブルを作成します。このステップで設定を完了します。  

```
encrypted_table = EncryptedTable(
    table=table,
    materials_provider=kms_cmp,
    attribute_actions=actions
)
```

ステップ 5: テーブルにプレーンテキスト項目を入力する  
`encrypted_table` で `put_item` メソッドを呼び出すと、テーブル項目は透過的に暗号化されて署名された後、DynamoDB テーブルに追加されます。  
まず、テーブル項目を定義します。  

```
plaintext_item = {
    'partition_attribute': 'value1',
    'sort_attribute': 55
    'example': 'data',
    'numbers': 99,
    'binary': Binary(b'\x00\x01\x02'),
    'test': 'test-value'
}
```
次に、テーブルにデータを入力します。  

```
encrypted_table.put_item(Item=plaintext_item)
```

DynamoDB テーブルから暗号化形式で項目を取得するには、`table` オブジェクトに対して `get_item` メソッドを呼び出します。復号された項目を取得するには、`get_item` オブジェクトの `encrypted_table` メソッドを呼び出します。

## 項目エンクリプタを使用する
<a name="python-example-item-encryptor"></a>

この例は、テーブル項目を暗号化するときに、項目エンクリプタと自動的にやり取りする[クライアントヘルパークラス](DDBEC-legacy-concepts.md#item-encryptor)を使用する代わりに、DynamoDB 暗号化クライアントで[項目エンクリプタ](python-using.md#python-helpers)と直接やり取りする方法を示しています。

この方法を使用するときは、DynamoDB 暗号化コンテキストと設定オブジェクト (`CryptoConfig`) を手動で作成します。また、1 つの呼び出しで項目を暗号化し、別の呼び出しで DynamoDB テーブルにその項目を入力します。これにより、`put_item` 呼び出しのカスタマイズや、DynamoDB 暗号化クライアントを使用した構造化データの暗号化および署名を行うことができます。このデータが DynamoDB に送信されることはありません。

この例では、[Direct KMS プロバイダー](direct-kms-provider.md)を使用していますが、互換性のある CMP を使用することもできます。

**完全なコードサンプルの参照**: [aws\$1kms\$1encrypted\$1item.py](https://github.com/aws/aws-dynamodb-encryption-python/blob/master/examples/src/dynamodb_encryption_sdk_examples/aws_kms_encrypted_item.py)

ステップ 1: テーブルを作成する  
開始するには、テーブル名を指定して、標準の DynamoDB テーブルリソースのインスタンスを作成します。  

```
table_name='test-table'
table = boto3.resource('dynamodb').Table(table_name)
```

ステップ 2: 暗号化マテリアルプロバイダーを作成する  
選択した[暗号化マテリアルプロバイダー](crypto-materials-providers.md) (CMP) のインスタンスを作成します。  
この例では、[Direct KMS プロバイダー](direct-kms-provider.md)を使用していますが、互換性のある CMP を使用することもできます。Direct KMS プロバイダーを作成するには、[AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys) を指定します。この例では、 の Amazon リソースネーム (ARN) を使用しますが AWS KMS key、任意の有効なキー識別子を使用できます。  

```
kms_key_id='arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'
kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=kms_key_id)
```

ステップ 3: TableInfo ヘルパークラスを使用する  
DynamoDB からテーブルに関する情報を取得するには、[TableInfo](python-using.md#python-helpers) ヘルパークラスのインスタンスを作成します。項目エンクリプタで直接操作する場合は、`TableInfo` インスタンスを作成してそのメソッドを呼び出す必要があります。[クライアントのヘルパークラス](python-using.md#python-helpers)を使用してこの操作を行うことができます。  
`TableInfo` の `refresh_indexed_attributes` メソッドでは、[DescribeTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeTable.html) DynamoDB オペレーションを使用して、テーブルに関するリアルタイムで正確な情報を取得します。この情報には、プライマリキーと、ローカルおよびグローバルセカンダリインデックスが含まれます。`DescribeTable` を呼び出すアクセス許可が発信者に必要です。  

```
table_info = TableInfo(name=table_name)
table_info.refresh_indexed_attributes(table.meta.client)
```

ステップ 4: DynamoDB 暗号化コンテキストを作成する  
[DynamoDB 暗号化コンテキスト](concepts.md#encryption-context)には、テーブル構造に関する情報と、暗号化および署名の方法が含まれます。この例では、項目エンクリプタとやり取りするため、DynamoDB 暗号化コンテキストを明示的に作成します。[クライアントのヘルパークラス](python-using.md#python-helpers)では、DynamoDB 暗号化コンテキストが作成されます。  
パーティションキーおよびソートキーを取得するには、[TableInfo](python-using.md#python-helpers) ヘルパークラスのプロパティを使用できます。  

```
index_key = {
    'partition_attribute': 'value1',
    'sort_attribute': 55
}

encryption_context = EncryptionContext(
    table_name=table_name,
    partition_key_name=table_info.primary_index.partition,
    sort_key_name=table_info.primary_index.sort,
    attributes=dict_to_ddb(index_key)
)
```

ステップ 5: 属性アクションオブジェクトを作成する  
[属性アクション](DDBEC-legacy-concepts.md#legacy-attribute-actions)は、項目の各属性に対して実行するアクションを項目エンクリプタに指示します。この例の `AttributeActions` オブジェクトは、署名されているが暗号されていないプライマリキー属性と、無視される `test` 属性を除き、すべての項目を暗号化し、署名します。  
項目エンクリプタを使用して直接やり取りし、デフォルトアクションが `ENCRYPT_AND_SIGN` の場合、プライマリキーの代替アクションを指定する必要があります。`set_index_keys` メソッドを使用できます。このメソッドでは、プライマリキーに `SIGN_ONLY`、デフォルトアクションの場合には `DO_NOTHING` が使用されます。  
プライマリキーを指定するために、この例では、[TableInfo](python-using.md#python-helpers) オブジェクトのインデックスキーを使用します。これは、DynamoDB への呼び出しによって指定されます。この技術は、ハードコーディングのプライマリキー名より安全です。  

```
actions = AttributeActions(
    default_action=CryptoAction.ENCRYPT_AND_SIGN,
    attribute_actions={'test': CryptoAction.DO_NOTHING}
)
actions.set_index_keys(*table_info.protected_index_keys())
```

ステップ 6: 項目の設定を作成する  
DynamoDB 暗号化クライアントを設定するには、テーブル項目の [CryptoConfig](https://aws-dynamodb-encryption-python.readthedocs.io/en/latest/lib/encrypted/config.html) 設定で先ほど作成したオブジェクトを使用します。クライアントのヘルパークラスでは、CryptoConfig が作成されます。  

```
crypto_config = CryptoConfig(
    materials_provider=kms_cmp,
    encryption_context=encryption_context,
    attribute_actions=actions
)
```

ステップ 7: 項目を暗号化する  
このステップでは、項目を暗号化および署名しますが、DynamoDB テーブルには入力されません。  
クライアントのヘルパークラスを使用するときに、項目は透過的に暗号化されて署名され、その後、ヘルパークラスの `put_item` メソッドを呼び出すときに、DynamoDB テーブルに追加されます。項目エンクリプタを直接使用する場合、暗号化および入力アクションは独立しています。  
まず、プレーンテキスト項目を作成します。  

```
plaintext_item = {
    'partition_attribute': 'value1',
    'sort_key': 55,
    'example': 'data',
    'numbers': 99,
    'binary': Binary(b'\x00\x01\x02'),
    'test': 'test-value'
}
```
次に、その項目を暗号化して署名します。`encrypt_python_item` メソッドでは、`CryptoConfig` 設定オブジェクトが必要です。  

```
encrypted_item = encrypt_python_item(plaintext_item, crypto_config)
```

ステップ 8: テーブルに項目を入力する  
このステップでは、暗号化された署名済みの項目を DynamoDB テーブルに入力します。  

```
table.put_item(Item=encrypted_item)
```

暗号化された項目を表示するには、元の `get_item` オブジェクトの `table` メソッドを呼び出します。`encrypted_table` オブジェクトではありません。これにより、検証および復号せずに、DynamoDB テーブルより項目を取得することができます。

```
encrypted_item = table.get_item(Key=partition_key)['Item']
```

次の画像は、暗号化された署名済みのテーブル項目の例の一部を示します。

暗号化された属性値は、バイナリデータです。プライマリキー属性の名前および値 (`partition_attribute` および `sort_attribute`) と、`test` 属性は、プレーンテキスト形式のままです。また、この出力は、署名を含む属性 (`*amzn-ddb-map-sig*`) と[マテリアル説明属性](DDBEC-legacy-concepts.md#legacy-material-description) (`*amzn-ddb-map-desc*`) を示します。

![\[暗号化されて署名された項目の抜粋\]](http://docs.aws.amazon.com/ja_jp/database-encryption-sdk/latest/devguide/images/encrypted-item-closeup.png)
