多租戶資料庫的可搜尋加密 - AWS 資料庫加密 SDK

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

多租戶資料庫的可搜尋加密

我們的用戶端加密程式庫已重新命名為 AWS 資料庫加密 SDK。此開發人員指南仍會提供有關 DynamoDB Encryption Client 的資訊。

若要在資料庫中實作可搜尋加密,您必須使用AWS KMS 階層式金鑰環 。 AWS KMS 階層式鍵控會產生、加密和解密用來保護記錄的資料金鑰。它也會建立用來產生信標的信標金鑰。搭配多租戶資料庫使用 AWS KMS 階層式金鑰控制時,每個租戶都有不同的分支金鑰和信標金鑰。若要查詢多租戶資料庫中的加密資料,您必須識別用來產生您正在查詢之信標的信標金鑰材料。如需詳細資訊,請參閱使用階層式鍵控進行可搜尋加密

當您定義多租戶資料庫的信標版本時,請指定您設定的所有標準信標清單、您設定的所有複合信標清單、信標版本和 keySource。您必須將信標金鑰來源定義為 MultiKeyStore,並包含 keyFieldName、本機信標金鑰快取的存留快取時間,以及本機信標金鑰快取的快取大小上限。

如果您設定了任何已簽章的信標 ,則必須將其包含在 中compoundBeaconList。簽章信標是一種複合信標類型,可對 SIGN_ONLYSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT欄位編製索引並執行複雜的查詢。

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 資料庫加密branch-key-id會從材料描述中的加密資料金鑰SDK識別 ,並將該值儲存在概念中,keyField供您在複合信標和簽章信標 中參考。由於材料描述已簽署,因此概念keyField會被視為已簽署部分。

您也可以將 作為 SIGN_ONLYSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT 欄位包含在密碼編譯動作keyField中,以明確將 欄位存放在資料庫中。如果您這樣做,keyField每次將記錄寫入資料庫時,都必須手動將 包含在 branch-key-id中。

查詢多租戶資料庫中的信標

若要查詢信標,您必須在查詢keyField中包含 ,以識別重新計算信標所需的適當信標金鑰材料。您必須指定與用來產生記錄信標的信標金鑰branch-key-id相關聯的 。您無法在分支金鑰 ID 供應商branch-key-id中指定識別租戶的易記名稱。您可以透過下列方式將 包含在查詢keyField中。

複合信標

無論您是否明確keyField將 存放在記錄中,都可以將 keyField直接包含在複合信標中,做為已簽署的部分。keyField 簽署的 部分為必填。

例如,如果您想要從compoundBeacon兩個欄位 encryptedField和 建構複合信標 ,signedField也必須將 keyField包含為已簽署部分。這可讓您在 上執行下列查詢compoundBeacon

compoundBeacon = E_encryptedFieldValue.S_signedFieldValue.K_branch-key-id
已簽章的信標

AWS Database Encryption SDK使用標準和複合信標來提供可搜尋的加密解決方案。這些信標必須至少包含一個加密欄位。不過, AWS 資料庫加密SDK也支援簽署的信標,這些信標可以完全從純文字SIGN_ONLYSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT欄位設定。

簽章信標可以從單一部分建構。無論您是否明確keyField將 存放在記錄中,都可以從 建構已簽署的信標keyField,並使用它來建立複合查詢,將keyField已簽署信標上的查詢與其中一個信標上的查詢結合在一起。例如,您可以執行下列查詢。

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

如需設定簽章信標的說明,請參閱 建立已簽署的信標

直接在 上查詢 keyField

如果您在密碼編譯動作keyField中指定 ,並明確地將 欄位存放在記錄中,則可以建立複合查詢,將信標上的查詢與 上的查詢結合在一起keyFieldkeyField 如果您想要查詢標準信標,您可以選擇直接在 上查詢。例如,您可以執行下列查詢。

keyField = branch-key-id AND standardBeacon = S_standardBeaconValue