翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ビーコンのタイプの選択
| クライアント側の暗号化ライブラリの名前が AWS Database Encryption SDK に変更されました。このデベロッパーガイドでは、引き続き DynamoDB Encryption Client に関する情報を提供します。 |
検索可能な暗号化では、暗号化されたフィールドのプレーンテキストの値をビーコンでマッピングすることで、暗号化されたレコードを検索できます。設定するビーコンのタイプによって、実行できるクエリのタイプが決まります。
ビーコンを設定する前に、実行する必要があるクエリのタイプを特定して計画することを強くお勧めします。ビーコンを設定した後、暗号化されたフィールドを検索する前に、各ビーコンについてセカンダリインデックスを設定する必要があります。詳細については、「ビーコンを使用したセカンダリインデックスの設定」を参照してください。
ビーコンは、フィールドに書き込まれるプレーンテキストの値と、データベースに実際に格納される暗号化された値との間のマップを作成します。2 つの標準ビーコンの値は、基になる同じプレーンテキストが含まれている場合でも比較できません。2 つの標準ビーコンは、同じプレーンテキストの値について 2 つの異なる HMAC タグを生成します。その結果、標準ビーコンは次のクエリを実行できません。
-
beacon1=beacon2 -
beacon1IN (beacon2) -
valueIN (beacon1,beacon2, ...) -
CONTAINS(beacon1,beacon2)
上記のクエリは、複合ビーコンの署名付きの部分を比較する場合にのみ実行できます。ただし、CONTAINS 演算子は例外です。この演算子は、アセンブルされたビーコンに含まれる暗号化または署名されたフィールドの値全体を識別するために複合ビーコンで使用できます。署名付きの部分を比較する場合、オプションで暗号化された部分のプレフィックスを含めることができますが、フィールドの暗号化された値を含めることはできません。標準ビーコンおよび複合ビーコンが実行できるクエリのタイプの詳細については、「ビーコンのクエリ」を参照してください。
データベースのアクセスパターンを確認する際には、次の検索可能な暗号化ソリューションを検討してください。次の例では、暗号化およびクエリに関するさまざまな要件を満たすためにどのビーコンを設定すべきかを定義します。
標準ビーコン
標準ビーコンは、一致検索のみを実行できます。標準ビーコンを使用して、次のクエリを実行できます。
暗号化された単一フィールドをクエリする
暗号化されたフィールドについて特定の値を含むレコードを識別する場合は、標準ビーコンを作成します。
次の例では、生産施設の検査データを追跡する UnitInspection という名前のデータベースについて考えてみます。データベース内の各レコードには、work_id、inspection_date、inspector_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の値を持つすべてのレコードを返します。 - 複数のフィールドの連結をクエリする
-
注記
FirstNameとLastNameフィールドの連結に対して一致検索を実行する場合は、FirstNameフィールドの最初の文字と、その後に続くLastNameフィールドで構築される仮想NameTagフィールドを作成できます (すべて小文字)。この仮想フィールドを使用して、標準ビーコンを構築します。その後、標準ビーコンを使用してセカンダリインデックスを作成します。このセカンダリインデックスを使用して、仮想フィールドのNameTag=mjonesをクエリできます。少なくとも 1 つのソースフィールドを暗号化する必要があります。
FirstNameまたはLastNameのいずれかを暗号化することも、両方を暗号化することもできます。プレーンテキストのソースフィールドは、暗号化アクションSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXTでSIGN_ONLYまたは としてマークする必要があります。
仮想フィールドとそれらを使用するビーコンの設定については、「仮想フィールドの作成」を参照してください。
複合ビーコン
複合ビーコンは、リテラルプレーンテキスト文字列と標準ビーコンからインデックスを作成し、複雑なデータベースオペレーションを実行します。複号ビーコンを使用して、次のクエリを実行できます。
単一のインデックスで暗号化されたフィールドの組み合わせをクエリする
単一のインデックスで暗号化されたフィールドの組み合わせをクエリする必要がある場合は、暗号化されたフィールドごとに構築された個々の標準ビーコンを組み合わせて単一のインデックスを形成する複合ビーコンを作成します。
複合ビーコンを設定した後、複合ビーコンをパーティションキーとして指定するセカンダリインデックスを作成して完全一致クエリを実行したり、ソートキーを使用してより複雑なクエリを実行したりできます。複合ビーコンをソートキーとして指定するセカンダリインデックスは、完全一致クエリや、よりカスタマイズされた複雑なクエリを実行できます。
次の例では、生産施設の検査データを追跡する UnitInspection という名前のデータベースについて考えてみます。データベース内の各レコードには、work_id、inspection_date、inspector_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_last4とunitのフィールドについての個別の標準ビーコンを作成します。その後、2 つの標準ビーコンから複合ビーコンを作成します。複合ビーコンを設定した後、複合ビーコンをパーティションキーとして指定するセカンダリインデックスを作成します。このセカンダリインデックスを使用して、
inspector_id_last4.unitの完全一致検索のためにクエリを実行します。例えば、このビーコンをクエリして、インスペクターが特定のユニットについて実行した検査のリストを検索できます。 - 暗号化されたフィールドの組み合わせに対して複雑なクエリを実行する
-
inspector_id_last4とinspector_id_last4.unitのためにUnitInspectionデータベースをクエリする場合は、まずinspector_id_last4とunitのフィールドについて個別の標準ビーコンを作成します。その後、2 つの標準ビーコンから複合ビーコンを作成します。複合ビーコンを設定した後、複合ビーコンをソートキーとして指定するセカンダリインデックスを作成します。このセカンダリインデックスを使用して、特定のインスペクターで始まるエントリや、特定のインスペクターによって検査された特定のユニット ID 範囲内のすべてのユニットのリストを検索するために
UnitInspectionデータベースをクエリできます。inspector_id_last4.unitについての完全一致検索を実行することもできます。
複合ビーコンの設定については、「複合ビーコンの設定」を参照してください。
単一のインデックスで暗号化されたフィールドとプレーンテキストフィールドの組み合わせをクエリする
単一のインデックスで暗号化されたフィールドとプレーンテキストフィールドの組み合わせをクエリする必要がある場合は、個々の標準ビーコンとプレーンテキストフィールドを組み合わせて単一のインデックスを形成する複合ビーコンを作成します。複合ビーコンの構築に使用されるプレーンテキストフィールドは、暗号化アクションSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXTで SIGN_ONLYまたは とマークする必要があります。
複合ビーコンを設定した後、複合ビーコンをパーティションキーとして指定するセカンダリインデックスを作成して完全一致クエリを実行したり、ソートキーを使用してより複雑なクエリを実行したりできます。複合ビーコンをソートキーとして指定するセカンダリインデックスは、完全一致クエリや、よりカスタマイズされた複雑なクエリを実行できます。
次の例では、生産施設の検査データを追跡する UnitInspection という名前のデータベースについて考えてみます。データベース内の各レコードには、work_id、inspection_date、inspector_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 つの標準ビーコンから複合ビーコンを作成します。複合ビーコンを設定した後、複合ビーコンをソートキーとして指定するセカンダリインデックスを作成します。このセカンダリインデックスを使用して、特定のインスペクターが特定の日付に実施した検査を検索するためにクエリを実行します。例えば、同日に検査されたすべてのユニットのリストを取得するために、データベースをクエリできます。または、指定された検査期間中に特定のユニットに対して実行されたすべての検査のリストを取得するために、データベースをクエリできます。
複合ビーコンの設定については、「複合ビーコンの設定」を参照してください。