ビーコンのタイプの選択 - AWS データベース暗号化 SDK

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

ビーコンのタイプの選択

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

検索可能な暗号化では、暗号化されたフィールドのプレーンテキストの値をビーコンでマッピングすることで、暗号化されたレコードを検索できます。設定するビーコンのタイプによって、実行できるクエリのタイプが決まります。

ビーコンを設定する前に、実行する必要があるクエリのタイプを特定して計画することを強くお勧めします。ビーコンを設定した後、暗号化されたフィールドを検索する前に、各ビーコンについてセカンダリインデックスを設定する必要があります。詳細については、「ビーコンを使用したセカンダリインデックスの設定」を参照してください。

ビーコンは、フィールドに書き込まれるプレーンテキストの値と、データベースに実際に格納される暗号化された値との間のマップを作成します。2 つの標準ビーコンの値は、基になる同じプレーンテキストが含まれている場合でも比較できません。2 つの標準ビーコンは、同じプレーンテキストの値について 2 つの異なる HMAC タグを生成します。その結果、標準ビーコンは次のクエリを実行できません。

  • beacon1 = beacon2

  • beacon1 IN (beacon2)

  • value IN (beacon1, beacon2, ...)

  • CONTAINS(beacon1, beacon2)

上記のクエリは、複合ビーコンの署名付きの部分を比較する場合にのみ実行できます。ただし、CONTAINS 演算子は例外です。この演算子は、アセンブルされたビーコンに含まれる暗号化または署名されたフィールドの値全体を識別するために複合ビーコンで使用できます。署名付きの部分を比較する場合、オプションで暗号化された部分のプレフィックスを含めることができますが、フィールドの暗号化された値を含めることはできません。標準ビーコンおよび複合ビーコンが実行できるクエリのタイプの詳細については、「ビーコンのクエリ」を参照してください。

データベースのアクセスパターンを確認する際には、次の検索可能な暗号化ソリューションを検討してください。次の例では、暗号化およびクエリに関するさまざまな要件を満たすためにどのビーコンを設定すべきかを定義します。

標準ビーコン

標準ビーコンは、一致検索のみを実行できます。標準ビーコンを使用して、次のクエリを実行できます。

暗号化された単一フィールドをクエリする

暗号化されたフィールドについて特定の値を含むレコードを識別する場合は、標準ビーコンを作成します。

次の例では、生産施設の検査データを追跡する UnitInspection という名前のデータベースについて考えてみます。データベース内の各レコードには、work_idinspection_dateinspector_id_last4、および unit と呼ばれるフィールドが含まれています。完全なインスペクター ID は 0~99,999,999 の数値です。ただし、データセットが統一的に分布するようにするために、inspector_id_last4 はインスペクターの ID の下 4 桁のみを格納します。データベース内の各フィールドは、プライマリキー work_id によって識別されます。inspector_id_last4 および unit フィールドは、暗号化アクションENCRYPT_AND_SIGN とマークされます。

UnitInspection データベース内のプレーンテキストエントリの例を次に示します。

{ "work_id": "1c7fcff3-6e74-41a8-b7f7-925dc039830b", "inspection_date": 2023-06-07, "inspector_id_last4": 8744, "unit": 229304973450 }
レコード内の暗号化された単一フィールドをクエリする

inspector_id_last4 フィールドを暗号化する必要があるが、完全一致検索のためにクエリする必要もある場合は、inspector_id_last4 フィールドから標準ビーコンを構築します。その後、標準ビーコンを使用してセカンダリインデックスを作成します。このセカンダリインデックスを使用して、暗号化された inspector_id_last4 フィールドをクエリできます。

標準ビーコンの設定については、「標準ビーコンの設定」を参照してください。

仮想フィールドをクエリする

仮想フィールドは、1 つ以上のソースフィールドから構築された概念的なフィールドです。暗号化されたフィールドの特定のセグメントについて一致検索を実行する場合、または複数のフィールドの連結に対して一致検索を実行する場合は、仮想フィールドから標準ビーコンを構築します。すべての仮想フィールドには、少なくとも 1 つの暗号化されたソースフィールドが含まれている必要があります。

次の例では、Employees データベースの仮想フィールドを作成します。Employees データベース内のプレーンテキストレコードの例を次に示します。

{ "EmployeeID": 101, "SSN": 000-00-0000, "LastName": "Jones", "FirstName": "Mary", "Address": { "Street": "123 Main", "City": "Anytown", "State": "OH", "ZIPCode": 12345 } }
暗号化されたフィールドのセグメントをクエリする

この例では、SSN フィールドは暗号化されています。

社会保障番号の下 4 桁を使用して SSN フィールドをクエリする場合は、クエリを実行するセグメントを識別する仮想フィールドを作成します。

Suffix(4) から構築された仮想 Last4SSN フィールドを使用すると、Last4SSN=0000 をクエリできます。この仮想フィールドを使用して、標準ビーコンを構築します。その後、標準ビーコンを使用してセカンダリインデックスを作成します。このセカンダリインデックスを使用して、仮想フィールドをクエリできます。このクエリは、指定した下 4 桁で終わる SSN の値を持つすべてのレコードを返します。

複数のフィールドの連結をクエリする
注記

次の例は、仮想フィールドを使用して実行できる変換とクエリのタイプを示しています。アプリケーションでは、この例で使用されているフィールド例は、ビーコンの分布および相関の一意性に関する推奨事項を満たしていない可能性があります。

FirstNameLastName フィールドの連結に対して一致検索を実行する場合は、FirstName フィールドの最初の文字と、その後に続く LastName フィールドで構築される仮想 NameTag フィールドを作成できます (すべて小文字)。この仮想フィールドを使用して、標準ビーコンを構築します。その後、標準ビーコンを使用してセカンダリインデックスを作成します。このセカンダリインデックスを使用して、仮想フィールドの NameTag=mjones をクエリできます。

少なくとも 1 つのソースフィールドを暗号化する必要があります。FirstName または LastName のいずれかを暗号化することも、両方を暗号化することもできます。プレーンテキストのソースフィールドは、暗号化アクション SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXTSIGN_ONLYまたは としてマークする必要があります。 暗号化アクション

仮想フィールドとそれらを使用するビーコンの設定については、「仮想フィールドの作成」を参照してください。

複合ビーコン

複合ビーコンは、リテラルプレーンテキスト文字列と標準ビーコンからインデックスを作成し、複雑なデータベースオペレーションを実行します。複号ビーコンを使用して、次のクエリを実行できます。

単一のインデックスで暗号化されたフィールドの組み合わせをクエリする

単一のインデックスで暗号化されたフィールドの組み合わせをクエリする必要がある場合は、暗号化されたフィールドごとに構築された個々の標準ビーコンを組み合わせて単一のインデックスを形成する複合ビーコンを作成します。

複合ビーコンを設定した後、複合ビーコンをパーティションキーとして指定するセカンダリインデックスを作成して完全一致クエリを実行したり、ソートキーを使用してより複雑なクエリを実行したりできます。複合ビーコンをソートキーとして指定するセカンダリインデックスは、完全一致クエリや、よりカスタマイズされた複雑なクエリを実行できます。

次の例では、生産施設の検査データを追跡する UnitInspection という名前のデータベースについて考えてみます。データベース内の各レコードには、work_idinspection_dateinspector_id_last4、および unit と呼ばれるフィールドが含まれています。完全なインスペクター ID は 0~99,999,999 の数値です。ただし、データセットが統一的に分布するようにするために、inspector_id_last4 はインスペクターの ID の下 4 桁のみを格納します。データベース内の各フィールドは、プライマリキー work_id によって識別されます。inspector_id_last4 および unit フィールドは、暗号化アクションENCRYPT_AND_SIGN とマークされます。

UnitInspection データベース内のプレーンテキストエントリの例を次に示します。

{ "work_id": "1c7fcff3-6e74-41a8-b7f7-925dc039830b", "inspection_date": 2023-06-07, "inspector_id_last4": 8744, "unit": 229304973450 }
暗号化されたフィールドの組み合わせに対して一致検索を実行する

inspector_id_last4.unit の完全一致検索のために UnitInspection データベースをクエリする場合は、まず inspector_id_last4unit のフィールドについての個別の標準ビーコンを作成します。その後、2 つの標準ビーコンから複合ビーコンを作成します。

複合ビーコンを設定した後、複合ビーコンをパーティションキーとして指定するセカンダリインデックスを作成します。このセカンダリインデックスを使用して、inspector_id_last4.unit の完全一致検索のためにクエリを実行します。例えば、このビーコンをクエリして、インスペクターが特定のユニットについて実行した検査のリストを検索できます。

暗号化されたフィールドの組み合わせに対して複雑なクエリを実行する

inspector_id_last4inspector_id_last4.unit のために UnitInspection データベースをクエリする場合は、まず inspector_id_last4unit のフィールドについて個別の標準ビーコンを作成します。その後、2 つの標準ビーコンから複合ビーコンを作成します。

複合ビーコンを設定した後、複合ビーコンをソートキーとして指定するセカンダリインデックスを作成します。このセカンダリインデックスを使用して、特定のインスペクターで始まるエントリや、特定のインスペクターによって検査された特定のユニット ID 範囲内のすべてのユニットのリストを検索するために UnitInspection データベースをクエリできます。inspector_id_last4.unit についての完全一致検索を実行することもできます。

複合ビーコンの設定については、「複合ビーコンの設定」を参照してください。

単一のインデックスで暗号化されたフィールドとプレーンテキストフィールドの組み合わせをクエリする

単一のインデックスで暗号化されたフィールドとプレーンテキストフィールドの組み合わせをクエリする必要がある場合は、個々の標準ビーコンとプレーンテキストフィールドを組み合わせて単一のインデックスを形成する複合ビーコンを作成します。複合ビーコンの構築に使用されるプレーンテキストフィールドは、暗号化アクション SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXTSIGN_ONLYまたは とマークする必要があります。 暗号化アクション

複合ビーコンを設定した後、複合ビーコンをパーティションキーとして指定するセカンダリインデックスを作成して完全一致クエリを実行したり、ソートキーを使用してより複雑なクエリを実行したりできます。複合ビーコンをソートキーとして指定するセカンダリインデックスは、完全一致クエリや、よりカスタマイズされた複雑なクエリを実行できます。

次の例では、生産施設の検査データを追跡する UnitInspection という名前のデータベースについて考えてみます。データベース内の各レコードには、work_idinspection_dateinspector_id_last4、および unit と呼ばれるフィールドが含まれています。完全なインスペクター ID は 0~99,999,999 の数値です。ただし、データセットが統一的に分布するようにするために、inspector_id_last4 はインスペクターの ID の下 4 桁のみを格納します。データベース内の各フィールドは、プライマリキー work_id によって識別されます。inspector_id_last4 および unit フィールドは、暗号化アクションENCRYPT_AND_SIGN とマークされます。

UnitInspection データベース内のプレーンテキストエントリの例を次に示します。

{ "work_id": "1c7fcff3-6e74-41a8-b7f7-925dc039830b", "inspection_date": 2023-06-07, "inspector_id_last4": 8744, "unit": 229304973450 }
フィールドの組み合わせに対して一致検索を実行する

特定の日付に特定のインスペクターによって実施された検査について UnitInspection データベースをクエリする場合は、まず inspector_id_last4 フィールドについての標準ビーコンを作成します。inspector_id_last4 フィールドは、暗号化アクションENCRYPT_AND_SIGN とマークされます。すべての暗号化された部分には独自の標準ビーコンが必要です。inspection_date フィールドは SIGN_ONLY とマークされており、標準ビーコンは必要ありません。次に、inspection_date フィールドと inspector_id_last4 標準ビーコンから複合ビーコンを作成します。

複合ビーコンを設定した後、複合ビーコンをパーティションキーとして指定するセカンダリインデックスを作成します。このセカンダリインデックスを使用して、特定のインスペクターおよび検査日に完全に一致するレコードを検索するために、データベースをクエリします。例えば、ID が 8744 で終わるインスペクターが特定の日に実施したすべての検査のリストを検索するために、データベースをクエリできます。

フィールドの組み合わせに対して複雑なクエリを実行する

inspection_date の範囲内で実施される検査を検索するため、または inspector_id_last4 もしくは inspector_id_last4.unit によって制約されている特定の inspection_date に対して実施される検査を検索するためにデータベースをクエリする場合は、まず、inspector_id_last4 および unit フィールドについての個別の標準ビーコンを作成します。その後、プレーンテキスト inspection_date フィールドと 2 つの標準ビーコンから複合ビーコンを作成します。

複合ビーコンを設定した後、複合ビーコンをソートキーとして指定するセカンダリインデックスを作成します。このセカンダリインデックスを使用して、特定のインスペクターが特定の日付に実施した検査を検索するためにクエリを実行します。例えば、同日に検査されたすべてのユニットのリストを取得するために、データベースをクエリできます。または、指定された検査期間中に特定のユニットに対して実行されたすべての検査のリストを取得するために、データベースをクエリできます。

複合ビーコンの設定については、「複合ビーコンの設定」を参照してください。