データモデルの更新 - AWS データベース暗号化 SDK

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

データモデルの更新

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

AWS Database Encryption SDK for DynamoDB を設定するときは、属性アクション を指定します。暗号化時に、 AWS Database Encryption SDK は属性アクションを使用して、暗号化して署名する属性、署名する属性 (暗号化はしない)、無視する属性を識別します。また、許可された署名なし属性を定義して、どの属性が署名から除外されるかをクライアントに明示的に伝えます。復号時に、 AWS Database Encryption SDK は、定義した許可された署名なし属性を使用して、署名に含まれていない属性を識別します。属性アクションは暗号化された項目に保存されず、 AWS Database Encryption SDK は属性アクションを自動的に更新しません。

属性アクションを慎重に選択します。不確かな場合は、暗号化と署名を使用します。 AWS Database Encryption SDK を使用して項目を保護すると、既存の ENCRYPT_AND_SIGNSIGN_ONLY、または SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT 属性を に変更することはできませんDO_NOTHING。ただし、次の変更は安全に行うことができます。

検索可能な暗号化に関する考慮事項

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

SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT 属性に関する考慮事項

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

注記

SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT 暗号化アクションを使用するには、 AWS Database Encryption SDK のバージョン 3.3 以降を使用する必要があります。データモデルを更新して を含める前に、すべてのリーダーに新しいバージョンをデプロイしますSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT

新しい ENCRYPT_AND_SIGNSIGN_ONLY、および SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT 属性を追加する

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

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

アノテーション付きデータクラスの使用

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

オブジェクトモデルの使用

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

既存の属性を削除する

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

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

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

アノテーション付きデータクラスの使用

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

オブジェクトモデルの使用

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

既存のENCRYPT_AND_SIGN属性を SIGN_ONLYまたは に変更する SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT

既存の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注釈を含めます。

オブジェクトモデルの使用

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

既存の SIGN_ONLYまたは SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT 属性を に変更する ENCRYPT_AND_SIGN

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

アノテーション付きデータクラスの使用

で属性アクションを定義した場合はTableSchema、既存の属性から @DynamoDBEncryptionSignOnlyまたは @DynamoDBEncryptionSignAndIncludeInEncryptionContextアノテーションを削除します。

オブジェクトモデルの使用

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

新しい DO_NOTHING 属性を追加する

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

アノテーション付きデータクラスから既存の ENCRYPT_AND_SIGNSIGN_ONLY、または SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT 属性を削除してから、属性をDO_NOTHING属性として再度追加することはできません。まったく新しい DO_NOTHING 属性のみを追加できます。

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

許可された署名なし属性プレフィックスの使用

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

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

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

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

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

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

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

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

既存の SIGN_ONLY 属性を SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT に変更する

既存の SIGN_ONLY 属性を SIGN_AND_INCLUDE_IN_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 に変更する

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

既存のSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT属性を に変更する前にSIGN_ONLY、更新がブランチキー ID サプライヤー の機能にどのように影響するかを慎重に検討してください。

アノテーション付きデータクラスの使用

で属性アクションを定義した場合はTableSchema、属性に関連付けられた属性アクションを から @DynamoDBEncryptionSignAndIncludeInEncryptionContextに更新します@DynamoDBEncryptionSignOnly

オブジェクトモデルの使用

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