マルチテナンシーデータベースの検索可能な暗号化 - AWS データベース暗号化 SDK

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

マルチテナンシーデータベースの検索可能な暗号化

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

データベースで検索可能な暗号化を実装するには、AWS KMS 階層キーリングを使用する必要があります。 AWS KMS 階層キーリングは、レコードの保護に使用されるデータキーを生成、暗号化、復号します。また、ビーコンを生成するために使用されるビーコンキーも作成します。マルチテナントデータベース で AWS KMS 階層キーリングを使用する場合、テナントごとに個別のブランチキーとビーコンキーがあります。マルチテナンシーデータベース内の暗号化されたデータをクエリするには、クエリしているビーコンを生成するために使用されたビーコンキーマテリアルを特定する必要があります。

マルチテナンシーデータベースのビーコンバージョンを定義する場合は、設定したすべての標準ビーコンのリスト、設定したすべての複合ビーコンのリスト、ビーコンバージョン、および keySource を指定します。ビーコンキーソースを MultiKeyStore として定義し、keyFieldName、ローカルビーコンキーキャッシュのキャッシュ Time To Live、およびローカルビーコンキーキャッシュの最大キャッシュサイズを含める必要があります。

署名付きビーコンを設定した場合は、それらを compoundBeaconList に含める必要があります。署名付きビーコンは、 および SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXTフィールドに対してインデックスを作成し、複雑なクエリを実行する複合ビーコンの一種SIGN_ONLYです。

Java
List<BeaconVersion> beaconVersions = new ArrayList<>(); beaconVersions.add( BeaconVersion.builder() .standardBeacons(standardBeaconList) .compoundBeacons(compoundBeaconList) .version(1) // MUST be 1 .keyStore(branchKeyStoreName) .keySource(BeaconKeySource.builder() .multi(MultiKeyStore.builder() .keyFieldName(keyField) .cacheTTL(6000) .maxCacheSize(10) .build()) .build()) .build() );
C# / .NET
var beaconVersions = new List<BeaconVersion> { new BeaconVersion { StandardBeacons = standardBeaconList, CompoundBeacons = compoundBeaconList, EncryptedParts = encryptedPartsList, SignedParts = signedPartsList, Version = 1, // MUST be 1 KeyStore = branchKeyStoreName, KeySource = new BeaconKeySource { Multi = new MultiKeyStore { KeyId = branch-key-id, CacheTTL = 6000, MaxCacheSize = 10 } } } };
keyFieldName

keyFieldName は、特定のテナンシーについて生成されたビーコンに使用されるビーコンキーに関連付けられた branch-key-id を格納するフィールドの名前を定義します。

新しいレコードをデータベースに書き込むと、そのレコードについてのビーコンを生成するために使用されるビーコンキーを識別する branch-key-id がこのフィールドに格納されます。

デフォルトでは、keyField はデータベースに明示的に格納されない概念的なフィールドです。 AWS Database Encryption SDK は、暗号化されたデータキーbranch-key-idから をマテリアルの説明で識別し、複合ビーコン と署名付きビーコン で参照keyFieldできるように、値を概念 に保存します。マテリアルの説明は署名されているため、概念的な keyField は署名付きの部分とみなされます。

暗号化アクションkeyFieldに を SIGN_ONLYまたは SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXTフィールドとして含めて、 フィールドをデータベースに明示的に保存することもできます。これを実行するには、データベースにレコードを書き込むたびに、branch-key-id を手動で keyField に含める必要があります。

マルチテナンシーデータベース内のビーコンのクエリ

ビーコンをクエリするには、クエリに keyField を含めて、ビーコンの再計算に必要となる適切なビーコンキーマテリアルを識別する必要があります。レコードのビーコンを生成するために使用されるビーコンキーに関連付けられた branch-key-id を指定する必要があります。ブランチキー ID サプライヤーのテナンシーの branch-key-id を識別するフレンドリ名を指定することはできません。次の方法でクエリに keyField を含めることができます。

複合ビーコン

keyField をレコードに明示的に格納するかどうかにかかわらず、複合ビーコンに署名付きの部分として keyField を直接含めることができます。keyField の署名付きの部分は必須である必要があります。

例えば、encryptedField および signedField の 2 つのフィールドから複合ビーコン compoundBeacon を構築する場合は、署名付きの部分として keyField も含める必要があります。これにより、compoundBeacon に対して次のクエリを実行できるようになります。

compoundBeacon = E_encryptedFieldValue.S_signedFieldValue.K_branch-key-id
署名付きビーコン

AWS Database Encryption SDK は、標準ビーコンと複合ビーコンを使用して、検索可能な暗号化ソリューションを提供します。これらのビーコンには、少なくとも 1 つの暗号化されたフィールドが含まれている必要があります。ただし、 AWS Database Encryption SDK は、プレーンテキストSIGN_ONLYSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXTフィールドから完全に設定できる署名付きビーコンもサポートしています。

署名付きビーコンは単一の部分から構築できます。keyField をレコードに明示的に格納するかどうかにかかわらず、keyField から署名付きビーコンを構築し、それを使用して、keyField 署名付きビーコンに対するクエリと、他のビーコンの 1 つに対するクエリを組み合わせる複合クエリを作成できます。例えば、次のクエリを実行できます。

keyField = K_branch-key-id AND compoundBeacon = E_encryptedFieldValue.S_signedFieldValue

署名付きビーコンの設定については、「署名付きビーコンの作成」を参照してください

keyField に対する直接的なクエリの実行

暗号化アクションで keyField を指定し、そのフィールドをレコードに明示的に格納した場合は、ビーコンに対するクエリと、keyField に対するクエリを組み合わせた複合クエリを作成できます。標準ビーコンをクエリする場合は、keyField に対して直接クエリを実行することを選択できます。例えば、次のクエリを実行できます。

keyField = branch-key-id AND standardBeacon = S_standardBeaconValue