

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Enkripsi yang dapat dicari untuk database multitenant
<a name="searchable-encryption-multitenant"></a>


****  

|  | 
| --- |
| Pustaka enkripsi sisi klien kami diubah namanya menjadi SDK Enkripsi AWS Database. Panduan pengembang ini masih memberikan informasi tentang Klien Enkripsi [DynamoDB](legacy-dynamodb-encryption-client.md). | 

Untuk mengimplementasikan enkripsi yang dapat dicari di database Anda, Anda harus menggunakan keyring [AWS KMS Hierarkis](use-hierarchical-keyring.md). Keyring AWS KMS Hierarkis menghasilkan, mengenkripsi, dan mendekripsi kunci data yang digunakan untuk melindungi catatan Anda. Ini juga menciptakan kunci suar yang digunakan untuk menghasilkan suar. Saat menggunakan keyring AWS KMS Hierarkis dengan database multitenant, ada kunci cabang dan kunci suar yang berbeda untuk setiap penyewa. Untuk menanyakan data terenkripsi dalam database multitenant, Anda harus mengidentifikasi bahan kunci suar yang digunakan untuk menghasilkan suar yang Anda kueri. Untuk informasi selengkapnya, lihat [Menggunakan keyring Hierarkis untuk enkripsi yang dapat dicari](use-hierarchical-keyring.md#searchable-encryption-hierarchical-keyrings).

Saat Anda menentukan [versi beacon](using-beacons.md#beacon-version) untuk database multitenant, tentukan daftar semua beacon standar yang Anda konfigurasikan, daftar semua suar majemuk yang Anda konfigurasikan, versi suar, dan a. `keySource` Anda harus [mendefinisikan sumber kunci suar Anda](use-hierarchical-keyring.md#beacon-key-source) sebagai`MultiKeyStore`, dan menyertakan`keyFieldName`, waktu cache untuk hidup untuk cache kunci suar lokal, dan ukuran cache maksimum untuk cache kunci suar lokal.

Jika Anda mengonfigurasi [suar yang ditandatangani](configure.md#signed-beacons), mereka harus disertakan dalam suar Anda. `compoundBeaconList` Signed beacon adalah jenis suar majemuk yang mengindeks dan melakukan kueri kompleks pada dan bidang. `SIGN_ONLY` `SIGN_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\$1 / .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
            }
        }
    }
};
```

------
#### [ Rust ]

```
let beacon_version = BeaconVersion::builder()
    .standard_beacons(standard_beacon_list)
    .compound_beacons(compound_beacon_list)
    .version(1) // MUST be 1
    .key_store(key_store.clone())
    .key_source(BeaconKeySource::Multi(
        MultiKeyStore::builder()
            // `keyId` references a beacon key.
            // For every branch key we create in the keystore,
            // we also create a beacon key.
            // This beacon key is not the same as the branch key,
            // but is created with the same ID as the branch key.
            .key_id(branch_key_id)
            .cache_ttl(6000)
            .max_cache_size(10)
            .build()?,
    ))
    .build()?;
let beacon_versions = vec![beacon_version];
```

------

**keyFieldName**  
[`keyFieldName`](use-hierarchical-keyring.md#keyFieldName)Mendefinisikan nama bidang yang menyimpan yang `branch-key-id` terkait dengan kunci suar yang digunakan untuk menghasilkan suar untuk penyewa tertentu.  
Saat Anda menulis catatan baru ke database Anda, `branch-key-id` yang mengidentifikasi kunci suar yang digunakan untuk menghasilkan suar apa pun untuk catatan itu disimpan di bidang ini.  
Secara default, `keyField` adalah bidang konseptual yang tidak secara eksplisit disimpan dalam database Anda. [SDK Enkripsi AWS Database mengidentifikasi `branch-key-id` dari [kunci data](concepts.md#data-key) terenkripsi dalam [deskripsi material](concepts.md#material-description) dan menyimpan nilai dalam konseptual `keyField` untuk Anda referensikan di suar majemuk dan suar bertanda tangan.](configure.md#signed-beacons) Karena deskripsi materi ditandatangani, konseptual `keyField` dianggap sebagai bagian yang ditandatangani.  
Anda juga dapat memasukkan `keyField` dalam tindakan kriptografi Anda sebagai `SIGN_ONLY` atau `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` bidang untuk secara eksplisit menyimpan bidang dalam database Anda. Jika Anda melakukan ini, Anda harus secara manual memasukkan `branch-key-id` dalam `keyField` setiap kali Anda menulis catatan ke database Anda.

## Menanyakan beacon dalam database multitenant
<a name="query-multitenant-beacons"></a>

Untuk menanyakan suar, Anda harus menyertakan kueri `keyField` dalam kueri Anda untuk mengidentifikasi bahan kunci suar yang sesuai yang diperlukan untuk menghitung ulang suar. Anda harus menentukan yang `branch-key-id` terkait dengan kunci suar yang digunakan untuk menghasilkan suar untuk catatan. Anda tidak dapat menentukan [nama ramah](use-hierarchical-keyring.md#branch-key-id-supplier) yang mengidentifikasi penyewa `branch-key-id` di pemasok ID kunci cabang. Anda dapat memasukkan `keyField` dalam kueri Anda dengan cara berikut.

**Suar majemuk**  
Apakah Anda secara eksplisit menyimpan `keyField` dalam catatan Anda atau tidak, Anda dapat memasukkan `keyField` langsung ke dalam suar majemuk Anda sebagai bagian yang ditandatangani. Bagian yang `keyField` ditandatangani harus diperlukan.  
Misalnya, jika Anda ingin membangun suar majemuk,, dari dua bidang`compoundBeacon`, `encryptedField` dan`signedField`, Anda juga harus menyertakan `keyField` sebagai bagian yang ditandatangani. Hal ini memungkinkan Anda untuk melakukan query berikut pada`compoundBeacon`.  

```
compoundBeacon = E_encryptedFieldValue.S_signedFieldValue.K_branch-key-id
```

**Suar yang ditandatangani**  
 AWS Database Encryption SDK menggunakan beacon standar dan gabungan untuk menyediakan solusi enkripsi yang dapat dicari. Beacon ini harus menyertakan setidaknya satu bidang terenkripsi. Namun, AWS Database Encryption SDK juga mendukung [beacon bertanda tangan](configure.md#signed-beacons) yang dapat dikonfigurasi seluruhnya dari `SIGN_ONLY` plaintext dan field. `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`  
Beacon yang ditandatangani dapat dibangun dari satu bagian. Apakah Anda secara eksplisit menyimpan `keyField` dalam catatan Anda atau tidak, Anda dapat membuat suar yang ditandatangani dari `keyField` dan menggunakannya untuk membuat kueri gabungan yang menggabungkan kueri pada suar yang `keyField` ditandatangani dengan kueri di salah satu beacon Anda yang lain. Misalnya, Anda dapat melakukan kueri berikut.  

```
keyField = K_branch-key-id AND compoundBeacon = E_encryptedFieldValue.S_signedFieldValue
```
Untuk bantuan mengonfigurasi suar bertanda tangan, lihat [Membuat beacon yang ditandatangani](configure.md#signed-beacons)

**Query langsung pada `keyField`**  
Jika Anda menentukan `keyField` dalam tindakan kriptografi Anda dan secara eksplisit menyimpan bidang dalam catatan Anda, Anda dapat membuat kueri gabungan yang menggabungkan kueri pada suar Anda dengan kueri di file. `keyField` Anda dapat memilih untuk menanyakan langsung `keyField` jika Anda ingin menanyakan suar standar. Misalnya, Anda dapat melakukan kueri berikut.  

```
keyField = branch-key-id AND standardBeacon = S_standardBeaconValue
```