

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

# Amazon DynamoDB Encryption Client の概念
<a name="DDBEC-legacy-concepts"></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)」を参照してください。

このトピックでは、Amazon DynamoDB Encryption Client で使用されている概念と用語について説明します。

DynamoDB 暗号化クライアントのコンポーネントがやり取りする方法については、[DynamoDB 暗号化クライアントの仕組み](DDBEC-legacy-how-it-works.md) を参照してください。

**Topics**
+ [暗号化マテリアルプロバイダー (CMP)](#concept-material-provider)
+ [項目エンクリプタ](#item-encryptor)
+ [属性アクション](#legacy-attribute-actions)
+ [マテリアル記述](#legacy-material-description)
+ [DynamoDB 暗号化コンテキスト](#legacy-encryption-context)
+ [プロバイダーストア](#provider-store)

## 暗号化マテリアルプロバイダー (CMP)
<a name="concept-material-provider"></a>

DynamoDB 暗号化クライアントの実装時に、最初のタスクの 1 つとして、[暗号化マテリアルプロバイダー (CMP)](crypto-materials-providers.md) (*暗号化マテリアルプロバイダー*とも呼ばれる) の選択があります。残りの実装の多くは、この選択によって決まります。

*暗号化マテリアルプロバイダー* (CMP) は[項目エンクリプタ](#item-encryptor)が、テーブル項目を暗号化し署名するのに使用する暗号化マテリアルを収集、アセンブルし、返します。CMP は、使用する暗号化アルゴリズムと、暗号化キーと署名キーを生成して保護する方法を決定します。

CMP は項目エンクリプタとやり取りします。項目エンクリプタは、暗号化または復号マテリアルを CMP に要求し、CMP はそれを項目エンクリプタに返します。次に、項目エンクリプタは、暗号化マテリアルを使用して、項目の暗号化、署名、検証、および復号を行います。

CMP は、クライアントの設定時に指定します。互換性のあるカスタム CMP を作成するか、ライブラリ内の多くの CMP のいずれかを使用できます。ほとんどの CMP は、複数のプログラミング言語で使用できます。

## 項目エンクリプタ
<a name="item-encryptor"></a>

*項目エンクリプタ*は、DynamoDB 暗号化クライアントの暗号化オペレーションを実行する低レベルのコンポーネントです。項目エンクリプタは、[暗号化マテリアルプロバイダー](#concept-material-provider) (CMP) に暗号化マテリアルをリクエストし、CMP より返るマテリアルを使用して、テーブル項目を暗号化して署名するか、検証して復号します。

項目エンクリプタと直接やり取りするか、ライブラリにあるヘルパーを使用することができます。例えば、Java 用 DynamoDB 暗号化クライアントには、`DynamoDBMapper` で使用できる `AttributeEncryptor` ヘルパークラスが含まれています。`DynamoDBEncryptor` 項目エンクリプタとは直接やり取りしません。Python ライブラリには、項目エンクリプタとやり取りする、`EncryptedTable`、`EncryptedClient`、および `EncryptedResource` ヘルパークラスが含まれています。

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

*属性アクション*は、項目の各属性に対して実行するアクションを項目エンクリプタに指示します。

属性アクションの値は、次のいずれかの値になります。
+ **暗号化と署名** –属性値を暗号化します。項目の署名に属性 (名前と値) を含めます。
+ **署名のみ** - 項目署名に属性を含めます。
+ **何もしない** - 属性に対して暗号化と署名のいずれも行いません。

機密データを保存できるすべての属性は、**暗号化と署名**を使用します。プライマリキー属性 (パーティションキーとソートキー) は、**署名のみ**を使用します。[マテリアル説明属性](#legacy-material-description)および署名属性は、署名も暗号化もされていません。これらの属性の属性アクションを指定する必要はありません。

属性アクションを慎重に選択します。不確かな場合は、**暗号化と署名**を使用します。DynamoDB 暗号化クライアントを使用してテーブル項目を保護した後は、署名検証エラーのリスクを冒すことなく、属性のアクションを変更することはできません。詳細については、「[データモデルの変更](data-model.md)」を参照してください。

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

[DynamoDB 暗号化コンテキスト](concepts.md#encryption-context)がプライマリキー属性を識別する場合、それらを暗号化しようとするとクライアントはエラーをスローします。

属性アクションの指定に使用する手法は、プログラミング言語ごとに異なります。また、使用するヘルパークラスに固有の場合もあります。

詳細については、使用しているプログラミング言語のドキュメントを参照してください。
+ [Python](python-using.md#python-attribute-actions)
+ [Java](java-using.md#attribute-actions-java)

## マテリアル記述
<a name="legacy-material-description"></a>

暗号化されたテーブル項目の*マテリアル説明*は、暗号化アルゴリズムなどの情報で構成されます。この情報は、テーブル項目が暗号化および署名される仕組みに関するものです。[暗号化マテリアルプロバイダー](#concept-material-provider) (CMP) は、暗号化し、署名するための暗号化マテリアルをアセンブルするときに、マテリアル説明を記録します。後で、項目を検証および復号するために暗号化されたマテリアルをアセンブルする必要がある場合は、そのマテリアル記述をガイドとして使用します。

DynamoDB 暗号化クライアントでは、マテリアル記述は 3 つの関連する要素について参照します。

**リクエストされたマテリアル説明**  
[暗号化マテリアルプロバイダー](#concept-material-provider) (CMP) によっては、暗号化アルゴリズムなどの高度なオプションを指定できます。選択肢を示すために、テーブル項目を暗号化するリクエストの [DynamoDB 暗号化コンテキスト](concepts.md#encryption-context)のマテリアル説明プロパティに名前と値のペアを追加します。この要素は、*リクエストされたマテリアル説明*と呼ばれます。リクエストされたマテリアル記述の有効値は、選択した CMP によって定義されます。  
マテリアル記述は安全なデフォルト値を上書きできるため、やむを得ない理由がない限り、リクエストされたマテリアル記述を省略することをお奨めします。

**実際のマテリアル記述**  
[暗号化マテリアルプロバイダー](#concept-material-provider) (CMP) が返すマテリアル説明は、*実際のマテリアル説明*と呼ばれます。CMP が暗号化マテリアルを構築したときに使用した実際の値について説明します。また、通常、リクエストされたマテリアル記述で構成され、ある場合は追加と変更を含みます。

**マテリアル記述属性**  
クライアントは、実際のマテリアル説明を暗号化項目の*マテリアル説明属性*に保存します。このマテリアル記述属性名は、`amzn-ddb-map-desc` で、その値は実際のマテリアル記述です。クライアントは、マテリアル記述属性の値を使用して、項目の検証および復号を行います。

## DynamoDB 暗号化コンテキスト
<a name="legacy-encryption-context"></a>

*DynamoDB 暗号化コンテキスト*は、テーブルと項目に関する情報を[暗号化マテリアルプロバイダー](#concept-material-provider) (CMP) に提供します。高度な実装では、DynamoDB 暗号化コンテキストに、[リクエストされたマテリアルの説明](#legacy-material-description)を含めることができます。

テーブル項目を暗号化すると、DynamoDB 暗号化コンテキストが暗号化された属性値に暗号でバインドされます。復号時に、DynamoDB 暗号化コンテキストが暗号化に使用された DynamoDB 暗号化コンテキストに対して大文字と小文字を区別して完全に一致しない場合、復号オペレーションは失敗します。[項目エンクリプタ](#item-encryptor)と直接やり取りする場合は、暗号化メソッドまたは復号メソッドを呼び出すときに DynamoDB 暗号化コンテキストを提供する必要があります。ほとんどのヘルパーは、DynamoDB 暗号化コンテキストを作成します。

**注記**  
*DynamoDB 暗号化クライアントの DynamoDB 暗号化コンテキスト*は、 AWS Key Management Service (AWS KMS) および の*暗号化コンテキスト*とは関係ありません AWS Encryption SDK。 DynamoDB 

DynamoDB 暗号化のコンテキストによって次のフィールドを含めることができます。すべてのフィールドと値はオプションです。
+ テーブル名
+ パーティションキー名
+ ソートキー名
+ 属性名と値のペア
+ [リクエストされたマテリアル説明](#legacy-material-description)

## プロバイダーストア
<a name="provider-store"></a>

*プロバイダーストア*は、[暗号化マテリアルプロバイダー](#concept-material-provider) (CMP) を返すコンポーネントです。プロバイダーストアは、CMP を作成するか、別のプロバイダーストアなどの別のソースから CMP を取得できます。プロバイダーストアは、作成した CMP のバージョンを、保存されたそれぞれの CMP がリクエスタのマテリアル名とバージョン番号によって識別される永続的ストレージに保存します。

DynamoDB 暗号化クライアントの[最新プロバイダー](most-recent-provider.md)はプロバイダーストアから CMP を取得しますが、プロバイダーストアを使用して任意のコンポーネントに CMP を提供できます。各最新のプロバイダーは 1 つのプロバイダーストアに関連付けられていますが、プロバイダーストアは複数のホスト間で多くのリクエスタに CMP を提供できます。

プロバイダーストアは、オンデマンドで新しいバージョンの CMP を作成し、新しいバージョンと既存のバージョンを返します。また、指定されたマテリアル名の最新バージョン番号も返されます。これにより、リクエスタは、プロバイダーストアからリクエストできる新しいバージョンの CMP がリリースされるタイミングを把握することができます。

DynamoDB 暗号化クライアントには [MetaStore](most-recent-provider.md#about-metastore) が含まれています。これは、DynamoDB に保管され、内部 DynamoDB 暗号化クライアントを使用して暗号化されたキーを使用してラップされた CMP を作成するプロバイダーストアです。

**詳細はこちら:**
+ プロバイダーストア: [Java](https://aws.github.io/aws-dynamodb-encryption-java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/providers/store/ProviderStore.html)、[Python](https://github.com/aws/aws-dynamodb-encryption-python/blob/master/src/dynamodb_encryption_sdk/material_providers/store/__init__.py)
+ MetaStore: [Java](https://aws.github.io/aws-dynamodb-encryption-java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/providers/store/MetaStore.html)、[Python](https://aws-dynamodb-encryption-python.readthedocs.io/en/latest/lib/materials_providers/metastore.html#module-dynamodb_encryption_sdk.material_providers.store.meta)