

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

# データモデルの更新
<a name="ddb-update-data-model"></a>


****  

|  | 
| --- |
| クライアント側の暗号化ライブラリの名前が AWS Database Encryption SDK に変更されました。このデベロッパーガイドでは、引き続き [DynamoDB Encryption Client](legacy-dynamodb-encryption-client.md) に関する情報を提供します。 | 

Database AWS Encryption SDK for DynamoDB を設定するときは、[属性アクション](concepts.md#crypt-actions)を指定します。暗号化では、 AWS データベース暗号化 SDK は 属性アクションを使用して、暗号化して署名する属性、署名する (暗号化しない) 属性、無視する属性を識別します。また、[許可された署名なし属性](ddb-java-using.md#allowed-unauth)を定義して、どの属性が署名から除外されるかをクライアントに明示的に伝えます。復号時に、 AWS Database Encryption SDK は、定義した許可された署名なし属性を使用して、署名に含まれていない属性を識別します。属性アクションは暗号化された項目に保存されず、 AWS Database Encryption SDK は属性アクションを自動的に更新しません。

属性アクションを慎重に選択します。不確かな場合は、**暗号化と署名**を使用します。 AWS Database Encryption SDK を使用して項目を保護すると、既存の `ENCRYPT_AND_SIGN`、`SIGN_ONLY`、または `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` 属性を に変更することはできません`DO_NOTHING`。ただし、次の変更は安全に行うことができます。
+ [新しい `ENCRYPT_AND_SIGN`、`SIGN_ONLY`、および `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` 属性を追加する](#ddb-add-auth-attribute)
+ [既存の属性を削除する](#ddb-remove-attribute)
+ [既存の`ENCRYPT_AND_SIGN`属性を `SIGN_ONLY`または に変更する `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`](#ddb-encrypt-to-sign)
+ [既存の `SIGN_ONLY`または `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` 属性を に変更する `ENCRYPT_AND_SIGN`](#ddb-sign-to-encrypt)
+ [新しい `DO_NOTHING` 属性を追加する](#ddb-add-unauth-attribute)
+ [既存の `SIGN_ONLY` 属性を `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` に変更する](#ddb-signOnly-to-signInclude)
+ [既存の `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` 属性を `SIGN_ONLY` に変更する](#ddb-signInclude-to-signOnly)

**検索可能な暗号化に関する考慮事項**  
データモデルを更新する前に、属性から構築した[ビーコン](beacons.md)に対して、その更新がどのような影響を及ぼす可能性があるかを慎重に検討してください。ビーコンを持つ新しいレコードを書き込んだ後に、そのビーコンの設定を更新することはできません。ビーコンを構築するために使用した属性に関連付けられた属性アクションを更新することはできません。既存の属性とそれに関連付けられたビーコンを削除すると、そのビーコンを使用して既存のレコードをクエリできなくなります。レコードに追加する新しいフィールドについての新しいビーコンを作成することはできますが、既存のビーコンを更新して新しいフィールドを含めることはできません。

**`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` 属性に関する考慮事項**  
デフォルトでは、パーティションキーとソートキーは、暗号化コンテキストに含まれる唯一の属性です。[AWS KMS 階層キーリング](use-hierarchical-keyring.md)のブランチキー ID サプライヤーが暗号化コンテキストからの復号に必要なブランチキーを特定`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`できるように、追加のフィールドを として定義することを検討してください。詳細については、[「ブランチキー ID サプライヤー](use-hierarchical-keyring.md#branch-key-id-supplier)」を参照してください。`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` 属性を指定する場合、パーティション属性とソート属性も である必要があります`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`。

**注記**  
`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` 暗号化アクションを使用するには、バージョン 3.3 以降の AWS Database Encryption SDK を使用する必要があります。[データモデルを更新して を含める前に、すべてのリーダー](#ddb-update-data-model)に新しいバージョンをデプロイします`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`。

## 新しい `ENCRYPT_AND_SIGN`、`SIGN_ONLY`、および `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` 属性を追加する
<a name="ddb-add-auth-attribute"></a>

新しい `ENCRYPT_AND_SIGN`、`SIGN_ONLY`、または `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` 属性を追加するには、属性アクションで新しい属性を定義します。

既存の`DO_NOTHING`属性を削除して、`ENCRYPT_AND_SIGN`、`SIGN_ONLY`、または `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` 属性として再度追加することはできません。

**アノテーション付きデータクラスの使用**  
`TableSchema` を使用して属性アクションを定義した場合は、新しい属性をアノテーション付きデータクラスに追加します。新しい属性の属性アクションのアノテーションを指定しない場合、クライアントは、デフォルトで新しい属性を暗号化して署名します (属性がプライマリキーの一部である場合を除きます)。新しい属性のみに署名する場合は、 `@DynamoDBEncryptionSignOnly`または `@DynamoDBEncryptionSignAndIncludeInEncryptionContext`注釈で新しい属性を追加する必要があります。

**オブジェクトモデルの使用**  
属性アクションを手動で定義した場合は、オブジェクトモデルの属性アクションに新しい属性を追加し、属性アクション`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`として `ENCRYPT_AND_SIGN`、`SIGN_ONLY`、または を指定します。

## 既存の属性を削除する
<a name="ddb-remove-attribute"></a>

属性が必要なくなったと判断した場合は、その属性に対するデータの書き込みを停止することも、属性アクションから正式に削除することもできます。属性に対する新しいデータの書き込みを停止しても、その属性は引き続き属性アクションに表示されます。これは、将来再び属性の使用を開始する必要がある場合に役立ちます。属性アクションから属性を正式に削除しても、データセットからは削除されません。データセットには、その属性を含む項目が引き続き含まれます。

既存の `ENCRYPT_AND_SIGN`、`SIGN_ONLY`、`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`、または `DO_NOTHING` 属性を正式に削除するには、属性アクションを更新します。

`DO_NOTHING` 属性を削除する場合でも、[許可された署名なし属性](ddb-java-using.md#allowed-unauth)からその属性を削除しないでください。その属性に対して新しい値を書き込まなくなった場合でも、クライアントは、その属性を含む既存の項目を読み取るために、その属性が署名されていないことを認識する必要があります。

**アノテーション付きデータクラスの使用**  
`TableSchema` を使用して属性アクションを定義した場合は、アノテーション付きデータクラスからその属性を削除します。

**オブジェクトモデルの使用**  
属性アクションを手動で定義した場合は、オブジェクトモデルの属性アクションから属性を削除します。

## 既存の`ENCRYPT_AND_SIGN`属性を `SIGN_ONLY`または に変更する `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`
<a name="ddb-encrypt-to-sign"></a>

既存の`ENCRYPT_AND_SIGN`属性を `SIGN_ONLY`または に変更するには`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`、属性アクションを更新する必要があります。更新をデプロイした後、クライアントは属性に書き込まれた既存の値を検証して復号できるようになりますが、実行するアクションは属性に対して書き込まれた新しい値に署名することだけです。

**注記**  
既存の`ENCRYPT_AND_SIGN`属性を `SIGN_ONLY`または に変更する前に、セキュリティ要件を慎重に検討してください`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`。機密データを保存できる属性はすべて暗号化する必要があります。

**アノテーション付きデータクラスの使用**  
で属性アクションを定義した場合は`TableSchema`、既存の属性を更新して、注釈付きデータクラスに `@DynamoDBEncryptionSignOnly`または `@DynamoDBEncryptionSignAndIncludeInEncryptionContext`注釈を含めます。

**オブジェクトモデルの使用**  
属性アクションを手動で定義した場合は、既存の属性に関連付けられた属性アクションを オブジェクトモデル`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`で から `SIGN_ONLY`または `ENCRYPT_AND_SIGN` に更新します。

## 既存の `SIGN_ONLY`または `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` 属性を に変更する `ENCRYPT_AND_SIGN`
<a name="ddb-sign-to-encrypt"></a>

既存の `SIGN_ONLY`または `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` 属性を に変更するには`ENCRYPT_AND_SIGN`、属性アクションを更新する必要があります。更新をデプロイした後、クライアントは属性に書き込まれた既存の値を検証できるようになり、属性に対して書き込まれた新しい値を暗号化して署名します。

**アノテーション付きデータクラスの使用**  
で属性アクションを定義した場合は`TableSchema`、既存の属性から `@DynamoDBEncryptionSignOnly`または `@DynamoDBEncryptionSignAndIncludeInEncryptionContext`注釈を削除します。

**オブジェクトモデルの使用**  
属性アクションを手動で定義した場合は、オブジェクトモデルの 属性に関連付けられた属性アクションを `SIGN_ONLY`または から `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` `ENCRYPT_AND_SIGN`に更新します。

## 新しい `DO_NOTHING` 属性を追加する
<a name="ddb-add-unauth-attribute"></a>

新しい `DO_NOTHING` 属性を追加する際のエラーのリスクを軽減するには、`DO_NOTHING` 属性に名前を付ける際に個別のプレフィックスを指定し、そのプレフィックスを使用して[許可された署名なし属性](ddb-java-using.md#allowed-unauth)を定義することをお勧めします。

注釈付きデータクラスから既存の `ENCRYPT_AND_SIGN`、`SIGN_ONLY`、または `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` 属性を削除し、属性を`DO_NOTHING`属性として再度追加することはできません。まったく新しい `DO_NOTHING` 属性のみを追加できます。

新しい `DO_NOTHING` 属性を追加するために実行するステップは、許可された署名なし属性をリスト内で明示的に定義したか、またはプレフィックスを使用して定義したかによって異なります。

**許可された署名なし属性プレフィックスの使用**  
`TableSchema` を使用して属性アクションを定義した場合は、`@DynamoDBEncryptionDoNothing` アノテーションを使用して新しい `DO_NOTHING` 属性をアノテーション付きデータクラスに追加します。属性アクションを手動で定義した場合は、新しい属性を含むように属性アクションを更新します。必ず `DO_NOTHING` 属性アクションを使用して新しい属性を明示的に設定してください。新しい属性の名前には、同じ個別のプレフィックスを含める必要があります。

**許可された署名なし属性リストの使用**

1. 許可された署名なし属性リストに新しい `DO_NOTHING` 属性を追加し、更新されたリストをデプロイします。

1. **ステップ 1** の変更をデプロイします。

   このデータを読み取る必要があるすべてのホストに変更が反映されるまで、**ステップ 3** に進むことはできません。

1. 新しい `DO_NOTHING` 属性を属性アクションに追加します。

   1. `TableSchema` を使用して属性アクションを定義した場合は、`@DynamoDBEncryptionDoNothing` アノテーションを使用して新しい `DO_NOTHING` 属性をアノテーション付きデータクラスに追加します。

   1. 属性アクションを手動で定義した場合は、新しい属性を含むように属性アクションを更新します。必ず `DO_NOTHING` 属性アクションを使用して新しい属性を明示的に設定してください。

1. **ステップ 3** の変更をデプロイします。

## 既存の `SIGN_ONLY` 属性を `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` に変更する
<a name="ddb-signOnly-to-signInclude"></a>

既存の `SIGN_ONLY` 属性を `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` に変更するには、属性アクションを更新する必要があります。更新をデプロイすると、クライアントは 属性に書き込まれた既存の値を検証でき、 属性に書き込まれた新しい値に署名し続けます。属性に書き込まれた新しい値は、[暗号化コンテキスト](concepts.md#encryption-context)に含まれます。

`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` 属性を指定する場合、パーティション属性とソート属性も である必要があります`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`。

**アノテーション付きデータクラスの使用**  
で属性アクションを定義した場合は`TableSchema`、属性に関連付けられた属性アクションを から `@DynamoDBEncryptionSignOnly`に更新します`@DynamoDBEncryptionSignAndIncludeInEncryptionContext`。

**オブジェクトモデルの使用**  
属性アクションを手動で定義した場合は、オブジェクトモデル内で属性に関連付けられた属性アクションを `SIGN_ONLY` から `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` に更新します。

## 既存の `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` 属性を `SIGN_ONLY` に変更する
<a name="ddb-signInclude-to-signOnly"></a>

既存の `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` 属性を `SIGN_ONLY` に変更するには、属性アクションを更新する必要があります。更新をデプロイすると、クライアントは 属性に書き込まれた既存の値を検証でき、 属性に書き込まれた新しい値に署名し続けます。属性に書き込まれた新しい値は、[暗号化コンテキスト](concepts.md#encryption-context)に含まれません。

既存の`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`属性を に変更する前に`SIGN_ONLY`、更新が[ブランチキー ID サプライヤ](use-hierarchical-keyring.md#branch-key-id-supplier)の機能にどのように影響するかを慎重に検討してください。

**アノテーション付きデータクラスの使用**  
で属性アクションを定義した場合は`TableSchema`、属性に関連付けられた属性アクションを から `@DynamoDBEncryptionSignAndIncludeInEncryptionContext`に更新します`@DynamoDBEncryptionSignOnly`。

**オブジェクトモデルの使用**  
属性アクションを手動で定義した場合は、オブジェクトモデル内で属性に関連付けられた属性アクションを `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` から `SIGN_ONLY` に更新します。