翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ビーコンのタイプの選択
クライアント側の暗号化ライブラリの名前が 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_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 つの標準ビーコンから複合ビーコンを作成します。複合ビーコンを設定した後、複合ビーコンをソートキーとして指定するセカンダリインデックスを作成します。このセカンダリインデックスを使用して、特定のインスペクターが特定の日付に実施した検査を検索するためにクエリを実行します。例えば、同日に検査されたすべてのユニットのリストを取得するために、データベースをクエリできます。または、指定された検査期間中に特定のユニットに対して実行されたすべての検査のリストを取得するために、データベースをクエリできます。
複合ビーコンの設定については、「複合ビーコンの設定」を参照してください。