Mengkonfigurasi beacon - AWS SDK Enkripsi Basis Data

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

Mengkonfigurasi beacon

Pustaka enkripsi sisi klien kami diubah namanya menjadi SDK Enkripsi AWS Database. Panduan pengembang ini masih memberikan informasi tentang Klien Enkripsi DynamoDB.

Ada dua jenis beacon yang mendukung enkripsi yang dapat dicari. Beacon standar melakukan pencarian kesetaraan. Mereka adalah cara paling sederhana untuk menerapkan enkripsi yang dapat dicari di database Anda. Compound beacon menggabungkan string plaintext literal dan beacon standar untuk melakukan kueri yang lebih kompleks.

Beacon dirancang untuk diimplementasikan dalam database baru yang tidak berpenghuni. Setiap suar yang dikonfigurasi dalam database yang ada hanya akan memetakan catatan baru yang ditulis ke database. Beacon dihitung dari nilai plaintext bidang, setelah bidang dienkripsi, tidak ada cara bagi beacon untuk memetakan data yang ada. Setelah Anda menulis catatan baru dengan suar, Anda tidak dapat memperbarui konfigurasi suar. Namun, Anda dapat menambahkan beacon baru untuk bidang baru yang Anda tambahkan ke catatan Anda.

Setelah menentukan pola akses Anda, mengonfigurasi beacon harus menjadi langkah kedua dalam implementasi database Anda. Kemudian, setelah Anda mengkonfigurasi semua beacon Anda, Anda perlu membuat keyring AWS KMS Hierarkis, menentukan versi suar, mengonfigurasi indeks sekunder untuk setiap suar, menentukan tindakan kriptografi Anda, dan mengkonfigurasi database dan klien SDK Enkripsi Database Anda. AWS Untuk informasi selengkapnya, lihat Menggunakan beacon.

Untuk membuatnya lebih mudah untuk menentukan versi beacon, kami sarankan membuat daftar untuk beacon standar dan majemuk. Tambahkan setiap suar yang Anda buat ke daftar suar standar atau gabungan masing-masing saat Anda mengonfigurasinya.

Mengkonfigurasi beacon standar

Beacon standar adalah cara paling sederhana untuk mengimplementasikan enkripsi yang dapat dicari di database Anda. Mereka hanya dapat melakukan pencarian kesetaraan untuk satu bidang terenkripsi atau virtual.

Contoh sintaks konfigurasi

Java
List<StandardBeacon> standardBeaconList = new ArrayList<>(); StandardBeacon exampleStandardBeacon = StandardBeacon.builder() .name("beaconName") .length(beaconLengthInBits) .build(); standardBeaconList.add(exampleStandardBeacon);
C# / .NET
var standardBeaconList = new List<StandardBeacon>(); StandardBeacon exampleStandardBeacon = new StandardBeacon { Name = "beaconName", Length = 10 }; standardBeaconList.Add(exampleStandardBeacon);
Rust
let standard_beacon_list = vec![ StandardBeacon::builder().name("beacon_name").length(beacon_length_in_bits).build()?,

Untuk mengkonfigurasi suar standar, berikan nilai berikut.

Nama suar

Nama yang Anda gunakan saat menanyakan bidang terenkripsi.

Nama suar dapat berupa nama yang sama dengan bidang terenkripsi atau bidang virtual, tetapi tidak bisa nama yang sama dengan bidang yang tidak terenkripsi. Kami sangat menyarankan untuk menggunakan nama bidang terenkripsi atau bidang virtual tempat suar standar Anda dibangun kapan pun memungkinkan. Dua beacon yang berbeda tidak dapat memiliki nama suar yang sama. Untuk bantuan menentukan nama beacon terbaik untuk implementasi Anda, lihat Memilih nama suar.

Panjang suar

Jumlah bit dari nilai hash beacon yang disimpan setelah pemotongan.

Panjang suar menentukan jumlah rata-rata positif palsu yang dihasilkan oleh suar yang diberikan. Untuk informasi selengkapnya dan membantu menentukan panjang suar yang sesuai untuk implementasi Anda, lihat Menentukan panjang suar.

Sumber suar (Opsional)

Bidang tempat suar standar dibangun.

Sumber suar harus berupa nama bidang atau indeks yang mengacu pada nilai bidang bersarang. Ketika nama suar Anda sama dengan sumber suar, Anda dapat menghilangkan sumber suar dari konfigurasi Anda dan SDK Enkripsi AWS Database akan secara otomatis menggunakan nama suar sebagai sumber suar.

Membuat bidang virtual

Untuk membuat bidang virtual, Anda harus memberikan nama untuk bidang virtual dan daftar bidang sumber. Urutan yang Anda tambahkan bidang sumber ke daftar bagian virtual menentukan urutan penggabungannya untuk membangun bidang virtual. Contoh berikut menggabungkan dua bidang sumber secara keseluruhan untuk membuat bidang virtual.

catatan

Kami menyarankan untuk memverifikasi bahwa bidang virtual Anda menghasilkan hasil yang diharapkan sebelum Anda mengisi database Anda. Untuk informasi selengkapnya, lihat Menguji output suar.

Java

Lihat contoh kode lengkapnya: VirtualBeaconSearchableEncryptionExample.java

List<VirtualPart> virtualPartList = new ArrayList<>(); virtualPartList.add(sourceField1); virtualPartList.add(sourceField2); VirtualField virtualFieldName = VirtualField.builder() .name("virtualFieldName") .parts(virtualPartList) .build(); List<VirtualField> virtualFieldList = new ArrayList<>(); virtualFieldList.add(virtualFieldName);
C# / .NET

Lihat contoh kode lengkapnya: VirtualBeaconSearchableEncryptionExample.cs

var virtualPartList = new List<VirtualPart> { sourceField1, sourceField2 }; var virtualFieldName = new VirtualField { Name = "virtualFieldName", Parts = virtualPartList }; var virtualFieldList = new List<VirtualField> { virtualFieldName };
Rust

Lihat contoh kode lengkap: virtual_beacon_searchable_encryption.rs

let virtual_part_list = vec![source_field_one, source_field_two]; let state_and_has_test_result_field = VirtualField::builder() .name("virtual_field_name") .parts(virtual_part_list) .build()?; let virtual_field_list = vec![virtual_field_name];

Untuk membuat bidang virtual dengan segmen tertentu dari bidang sumber, Anda harus menentukan transformasi itu sebelum menambahkan bidang sumber ke daftar bagian virtual Anda.

Pertimbangan keamanan untuk bidang virtual

Beacon tidak mengubah status lapangan yang dienkripsi. Namun, ketika Anda menggunakan beacon, ada tradeoff yang melekat antara seberapa efisien kueri Anda dan seberapa banyak informasi yang terungkap tentang distribusi data Anda. Cara Anda mengonfigurasi suar Anda menentukan tingkat keamanan yang dipertahankan oleh suar itu.

Hindari membuat bidang virtual dengan bidang sumber yang tumpang tindih dengan beacon standar yang ada. Membuat bidang virtual yang menyertakan bidang sumber yang telah digunakan untuk membuat suar standar dapat mengurangi tingkat keamanan untuk kedua beacon. Sejauh mana keamanan berkurang tergantung pada tingkat entropi yang ditambahkan oleh bidang sumber tambahan. Tingkat entropi ditentukan oleh distribusi nilai unik di bidang sumber tambahan dan jumlah bit yang disumbangkan oleh bidang sumber tambahan pada ukuran keseluruhan bidang virtual.

Anda dapat menggunakan populasi dan panjang suar untuk menentukan apakah bidang sumber untuk bidang virtual menjaga keamanan kumpulan data Anda. Populasi adalah jumlah nilai unik yang diharapkan dalam suatu bidang. Populasi Anda tidak perlu tepat. Untuk bantuan memperkirakan populasi suatu bidang, lihat Memperkirakan populasi.

Pertimbangkan contoh berikut saat Anda meninjau keamanan bidang virtual Anda.

  • Beacon1 dibangun dari. FieldA FieldAmemiliki populasi lebih besar dari 2 (panjang Beacon1).

  • Beacon2 dibangun dariVirtualField, yang dibangun dari,FieldA,FieldB, FieldC dan. FieldD Bersama-samaFieldB,FieldC,, dan FieldD memiliki populasi lebih besar dari 2 N

Beacon2 menjaga keamanan Beacon1 dan Beacon2 jika pernyataan berikut benar:

N ≥ (Beacon1 length)/2

and

N ≥ (Beacon2 length)/2

Mendefinisikan gaya suar

Beacon standar dapat digunakan untuk melakukan pencarian kesetaraan untuk bidang terenkripsi atau virtual. Atau, mereka dapat digunakan untuk membangun suar majemuk untuk melakukan operasi database yang lebih kompleks. Untuk membantu Anda mengatur dan mengelola beacon standar, AWS Database Encryption SDK menyediakan gaya beacon opsional berikut yang menentukan tujuan penggunaan suar standar.

catatan

Untuk menentukan gaya suar, Anda harus menggunakan SDK Enkripsi AWS Database versi 3.2 atau yang lebih baru. Terapkan versi baru ke semua pembaca sebelum menambahkan gaya suar ke konfigurasi suar Anda.

PartOnly

Sebuah beacon standar didefinisikan sebagai hanya PartOnly dapat digunakan untuk mendefinisikan bagian terenkripsi dari suar majemuk. Anda tidak dapat langsung menanyakan suar PartOnly standar.

Java
List<StandardBeacon> standardBeaconList = new ArrayList<>(); StandardBeacon exampleStandardBeacon = StandardBeacon.builder() .name("beaconName") .length(beaconLengthInBits) .style( BeaconStyle.builder() .partOnly(PartOnly.builder().build()) .build() ) .build(); standardBeaconList.add(exampleStandardBeacon);
C #/.NET
new StandardBeacon { Name = "beaconName", Length = beaconLengthInBits, Style = new BeaconStyle { PartOnly = new PartOnly() } }
Rust
StandardBeacon::builder() .name("beacon_name") .length(beacon_length_in_bits) .style(BeaconStyle::PartOnly(PartOnly::builder().build()?)) .build()?
Shared

Secara default, setiap suar standar menghasilkan kunci HMAC unik untuk perhitungan suar. Akibatnya, Anda tidak dapat melakukan pencarian kesetaraan pada bidang terenkripsi dari dua suar standar terpisah. Sebuah suar standar didefinisikan sebagai Shared menggunakan kunci HMAC dari suar standar lain untuk perhitungannya.

Misalnya, jika Anda perlu membandingkan beacon1 bidang dengan beacon2 bidang, tentukan beacon2 sebagai Shared suar yang menggunakan kunci HMAC dari beacon1 untuk perhitungannya.

catatan

Pertimbangkan kebutuhan keamanan dan kinerja Anda sebelum mengonfigurasi Shared beacon apa pun. Sharedbeacon dapat meningkatkan jumlah informasi statistik yang dapat diidentifikasi tentang distribusi dataset Anda. Misalnya, mereka mungkin mengungkapkan bidang bersama mana yang berisi nilai plaintext yang sama.

Java
List<StandardBeacon> standardBeaconList = new ArrayList<>(); StandardBeacon exampleStandardBeacon = StandardBeacon.builder() .name("beacon2") .length(beaconLengthInBits) .style( BeaconStyle.builder() .shared(Shared.builder().other("beacon1").build()) .build() ) .build(); standardBeaconList.add(exampleStandardBeacon);
C #/.NET
new StandardBeacon { Name = "beacon2", Length = beaconLengthInBits, Style = new BeaconStyle { Shared = new Shared { Other = "beacon1" } } }
Rust
StandardBeacon::builder() .name("beacon2") .length(beacon_length_in_bits) .style(BeaconStyle::Shared( Shared::builder().other("beacon1").build()?, )) .build()?
AsSet

Secara default, jika nilai bidang adalah satu set, SDK Enkripsi AWS Database menghitung satu suar standar untuk set tersebut. Akibatnya, Anda tidak dapat melakukan kueri di CONTAINS(a, :value) mana a adalah bidang terenkripsi. Sebuah suar standar didefinisikan sebagai AsSet menghitung nilai beacon standar individu untuk setiap elemen individu dari himpunan dan menyimpan nilai beacon dalam item sebagai satu set. Ini memungkinkan SDK Enkripsi AWS Database untuk melakukan kueriCONTAINS(a, :value).

Untuk menentukan suar AsSet standar, elemen dalam himpunan harus dari populasi yang sama sehingga mereka semua dapat menggunakan panjang suar yang sama. Set beacon mungkin memiliki elemen lebih sedikit daripada set plaintext jika ada tabrakan saat menghitung nilai beacon.

catatan

Pertimbangkan kebutuhan keamanan dan kinerja Anda sebelum mengonfigurasi AsSet beacon apa pun. AsSetbeacon dapat meningkatkan jumlah informasi statistik yang dapat diidentifikasi tentang distribusi dataset Anda. Misalnya, mereka mungkin mengungkapkan ukuran set plaintext.

Java
List<StandardBeacon> standardBeaconList = new ArrayList<>(); StandardBeacon exampleStandardBeacon = StandardBeacon.builder() .name("beaconName") .length(beaconLengthInBits) .style( BeaconStyle.builder() .asSet(AsSet.builder().build()) .build() ) .build(); standardBeaconList.add(exampleStandardBeacon);
C #/.NET
new StandardBeacon { Name = "beaconName", Length = beaconLengthInBits, Style = new BeaconStyle { AsSet = new AsSet() } }
Rust
StandardBeacon::builder() .name("beacon_name") .length(beacon_length_in_bits) .style(BeaconStyle::AsSet(AsSet::builder().build()?)) .build()?
SharedSet

Sebuah beacon standar didefinisikan sebagai SharedSet menggabungkan Shared dan AsSet fungsi sehingga Anda dapat melakukan pencarian kesetaraan pada nilai terenkripsi dari set dan bidang. Ini memungkinkan SDK Enkripsi AWS Database untuk melakukan kueri CONTAINS(a, b) di mana a kumpulan terenkripsi dan b merupakan bidang terenkripsi.

catatan

Pertimbangkan kebutuhan keamanan dan kinerja Anda sebelum mengonfigurasi Shared beacon apa pun. SharedSetbeacon dapat meningkatkan jumlah informasi statistik yang dapat diidentifikasi tentang distribusi dataset Anda. Misalnya, mereka mungkin mengungkapkan ukuran set teks biasa atau bidang bersama mana yang berisi nilai plaintext yang sama.

Java
List<StandardBeacon> standardBeaconList = new ArrayList<>(); StandardBeacon exampleStandardBeacon = StandardBeacon.builder() .name("beacon2") .length(beaconLengthInBits) .style( BeaconStyle.builder() .sharedSet(SharedSet.builder().other("beacon1").build()) .build() ) .build(); standardBeaconList.add(exampleStandardBeacon);
C #/.NET
new StandardBeacon { Name = "beacon2", Length = beaconLengthInBits, Style = new BeaconStyle { SharedSet = new SharedSet { Other = "beacon1" } } }
Rust
StandardBeacon::builder() .name("beacon2") .length(beacon_length_in_bits) .style(BeaconStyle::SharedSet( SharedSet::builder().other("beacon1").build()?, )) .build()?

Mengkonfigurasi suar majemuk

Compound beacon menggabungkan string plaintext literal dan beacon standar untuk melakukan operasi database yang kompleks, seperti menanyakan dua jenis rekaman yang berbeda dari indeks tunggal atau menanyakan kombinasi bidang dengan kunci pengurutan. Suar majemuk dapat dibangun dariENCRYPT_AND_SIGN,SIGN_ONLY, dan SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT ladang. Anda harus membuat suar standar untuk setiap bidang terenkripsi yang termasuk dalam suar majemuk.

catatan

Sebaiknya verifikasi bahwa suar majemuk Anda menghasilkan hasil yang diharapkan sebelum Anda mengisi basis data Anda. Untuk informasi selengkapnya, lihat Menguji output suar.

Contoh sintaks konfigurasi

Java

Konfigurasi suar majemuk

Contoh berikut mendefinisikan daftar bagian terenkripsi dan ditandatangani secara lokal dalam konfigurasi suar majemuk.

List<CompoundBeacon> compoundBeaconList = new ArrayList<>(); CompoundBeacon exampleCompoundBeacon = CompoundBeacon.builder() .name("compoundBeaconName") .split(".") .encrypted(encryptedPartList) .signed(signedPartList) .constructors(constructorList) .build(); compoundBeaconList.add(exampleCompoundBeacon);

Definisi versi suar

Contoh berikut mendefinisikan daftar bagian terenkripsi dan ditandatangani secara global dalam versi beacon. Untuk informasi selengkapnya tentang mendefinisikan versi beacon, lihat Menggunakan beacon.

List<BeaconVersion> beaconVersions = new ArrayList<>(); beaconVersions.add( BeaconVersion.builder() .standardBeacons(standardBeaconList) .compoundBeacons(compoundBeaconList) .encryptedParts(encryptedPartList) .signedParts(signedPartList) .version(1) // MUST be 1 .keyStore(keyStore) .keySource(BeaconKeySource.builder() .single(SingleKeyStore.builder() .keyId(branchKeyId) .cacheTTL(6000) .build()) .build()) .build() );
C# / .NET

Lihat contoh kode lengkapnya: BeaconConfig.cs

Konfigurasi suar majemuk

Contoh berikut mendefinisikan daftar bagian terenkripsi dan ditandatangani secara lokal dalam konfigurasi suar majemuk.

var compoundBeaconList = new List<CompoundBeacon>(); var exampleCompoundBeacon = new CompoundBeacon { Name = "compoundBeaconName", Split = ".", Encrypted = encryptedPartList, Signed = signedPartList, Constructors = constructorList }; compoundBeaconList.Add(exampleCompoundBeacon);

Definisi versi suar

Contoh berikut mendefinisikan daftar bagian terenkripsi dan ditandatangani secara global dalam versi beacon. Untuk informasi selengkapnya tentang mendefinisikan versi beacon, lihat Menggunakan beacon.

var beaconVersions = new List<BeaconVersion> { new BeaconVersion { StandardBeacons = standardBeaconList, CompoundBeacons = compoundBeaconList, EncryptedParts = encryptedPartsList, SignedParts = signedPartsList, Version = 1, // MUST be 1 KeyStore = keyStore, KeySource = new BeaconKeySource { Single = new SingleKeyStore { KeyId = branchKeyId, CacheTTL = 6000 } } } };
Rust

Lihat contoh kode lengkap: beacon_config.rs

Konfigurasi suar majemuk

Contoh berikut mendefinisikan daftar bagian terenkripsi dan ditandatangani secara lokal dalam konfigurasi suar majemuk.

let compound_beacon_list = vec![ CompoundBeacon::builder() .name("compound_beacon_name") .split(".") .encrypted(encrypted_parts_list) .signed(signed_parts_list) .constructors(constructor_list) .build()?

Definisi versi suar

Contoh berikut mendefinisikan daftar bagian terenkripsi dan ditandatangani secara global dalam versi beacon. Untuk informasi selengkapnya tentang mendefinisikan versi beacon, lihat Menggunakan beacon.

let beacon_versions = BeaconVersion::builder() .standard_beacons(standard_beacon_list) .compound_beacons(compound_beacon_list) .encrypted_parts(encrypted_parts_list) .signed_parts(signed_parts_list) .version(1) // MUST be 1 .key_store(key_store.clone()) .key_source(BeaconKeySource::Single( SingleKeyStore::builder() .key_id(branch_key_id) .cache_ttl(6000) .build()?, )) .build()?; let beacon_versions = vec![beacon_versions];

Anda dapat menentukan bagian terenkripsi dan bagian yang ditandatangani dalam daftar yang ditentukan secara lokal atau global. Kami merekomendasikan untuk menentukan bagian terenkripsi dan ditandatangani Anda dalam daftar global dalam versi suar bila memungkinkan. Dengan mendefinisikan bagian terenkripsi dan ditandatangani secara global, Anda dapat menentukan setiap bagian sekali dan kemudian menggunakan kembali bagian-bagian tersebut dalam beberapa konfigurasi suar majemuk. Jika Anda hanya ingin menggunakan bagian terenkripsi atau ditandatangani sekali, Anda dapat mendefinisikannya dalam daftar lokal dalam konfigurasi suar majemuk. Anda dapat mereferensikan bagian lokal dan global dalam daftar konstruktor Anda.

Jika Anda menentukan daftar bagian terenkripsi dan ditandatangani secara global, Anda harus memberikan daftar bagian konstruktor yang mengidentifikasi semua kemungkinan cara suar majemuk dapat merakit bidang dalam konfigurasi suar majemuk Anda.

catatan

Untuk menentukan daftar bagian terenkripsi dan ditandatangani secara global, Anda harus menggunakan SDK Enkripsi AWS Database versi 3.2 atau yang lebih baru. Terapkan versi baru ke semua pembaca sebelum mendefinisikan bagian baru secara global.

Anda tidak dapat memperbarui konfigurasi suar yang ada untuk menentukan daftar bagian terenkripsi dan ditandatangani secara global.

Untuk mengkonfigurasi suar majemuk, berikan nilai berikut.

Nama suar

Nama yang Anda gunakan saat menanyakan bidang terenkripsi.

Nama suar dapat berupa nama yang sama dengan bidang terenkripsi atau bidang virtual, tetapi tidak bisa nama yang sama dengan bidang yang tidak terenkripsi. Tidak ada dua suar yang dapat memiliki nama suar yang sama. Untuk bantuan menentukan nama beacon terbaik untuk implementasi Anda, lihat Memilih nama suar.

Karakter split

Karakter yang digunakan untuk memisahkan bagian-bagian yang membentuk suar majemuk Anda.

Karakter split tidak dapat muncul dalam nilai plaintext dari salah satu bidang tempat suar majemuk dibangun.

Daftar bagian terenkripsi

Mengidentifikasi ENCRYPT_AND_SIGN bidang yang termasuk dalam suar majemuk.

Setiap bagian harus menyertakan nama dan awalan. Nama bagian harus merupakan nama suar standar yang dibangun dari bidang terenkripsi. Awalan dapat berupa string apa saja, tetapi harus unik. Bagian terenkripsi tidak dapat memiliki awalan yang sama dengan bagian yang ditandatangani. Sebaiknya gunakan nilai pendek yang membedakan bagian dari bagian lain yang dilayani oleh suar majemuk.

Kami merekomendasikan untuk menentukan bagian terenkripsi Anda secara global bila memungkinkan. Anda dapat mempertimbangkan untuk mendefinisikan bagian terenkripsi secara lokal jika Anda hanya bermaksud menggunakannya dalam satu suar majemuk. Bagian terenkripsi yang didefinisikan secara lokal tidak dapat memiliki awalan atau nama yang sama dengan bagian terenkripsi yang didefinisikan secara global.

Java
List<EncryptedPart> encryptedPartList = new ArrayList<>); EncryptedPart encryptedPartExample = EncryptedPart.builder() .name("standardBeaconName") .prefix("E-") .build(); encryptedPartList.add(encryptedPartExample);
C# / .NET
var encryptedPartList = new List<EncryptedPart>(); var encryptedPartExample = new EncryptedPart { Name = "compoundBeaconName", Prefix = "E-" }; encryptedPartList.Add(encryptedPartExample);
Rust
let encrypted_parts_list = vec![ EncryptedPart::builder() .name("standard_beacon_name") .prefix("E-") .build()? ];
Daftar bagian yang ditandatangani

Mengidentifikasi bidang yang ditandatangani termasuk dalam suar majemuk.

catatan

Bagian yang ditandatangani adalah opsional. Anda dapat mengonfigurasi suar majemuk yang tidak mereferensikan bagian yang ditandatangani.

Setiap bagian harus menyertakan nama, sumber, dan awalan. Sumbernya adalah SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT bidang SIGN_ONLY atau yang diidentifikasi oleh bagian tersebut. Sumber harus berupa nama bidang atau indeks yang mengacu pada nilai bidang bersarang. Jika nama bagian Anda mengidentifikasi sumber, Anda dapat menghilangkan sumber dan SDK Enkripsi AWS Database akan secara otomatis menggunakan nama sebagai sumbernya. Kami merekomendasikan untuk menentukan sumber sebagai nama bagian bila memungkinkan. Awalan dapat berupa string apa saja, tetapi harus unik. Bagian yang ditandatangani tidak dapat memiliki awalan yang sama dengan bagian terenkripsi. Sebaiknya gunakan nilai pendek yang membedakan bagian dari bagian lain yang dilayani oleh suar majemuk.

Kami merekomendasikan untuk menentukan suku cadang Anda yang ditandatangani secara global bila memungkinkan. Anda dapat mempertimbangkan untuk mendefinisikan bagian yang ditandatangani secara lokal jika Anda hanya bermaksud menggunakannya dalam satu suar majemuk. Bagian yang ditandatangani secara lokal tidak dapat memiliki awalan atau nama yang sama dengan bagian ditandatangani yang ditentukan secara global.

Java
List<SignedPart> signedPartList = new ArrayList<>); SignedPart signedPartExample = SignedPart.builder() .name("signedFieldName") .prefix("S-") .build(); signedPartList.add(signedPartExample);
C# / .NET
var signedPartsList = new List<SignedPart> { new SignedPart { Name = "signedFieldName1", Prefix = "S-" }, new SignedPart { Name = "signedFieldName2", Prefix = "SF-" } };
Rust
let signed_parts_list = vec![ SignedPart::builder() .name("signed_field_name_1") .prefix("S-") .build()?, SignedPart::builder() .name("signed_field_name_2") .prefix("SF-") .build()?, ];
Daftar konstruktor

Mengidentifikasi konstruktor yang menentukan cara berbeda bahwa bagian terenkripsi dan ditandatangani dapat dirakit oleh suar majemuk. Anda dapat mereferensikan bagian lokal dan global dalam daftar konstruktor Anda.

Jika Anda membangun suar majemuk Anda dari bagian terenkripsi dan ditandatangani yang didefinisikan secara global, Anda harus memberikan daftar konstruktor.

Jika Anda tidak menggunakan bagian terenkripsi atau ditandatangani yang didefinisikan secara global untuk membangun suar majemuk Anda, daftar konstruktor bersifat opsional. Jika Anda tidak menentukan daftar konstruktor, AWS Database Encryption SDK merakit suar majemuk dengan konstruktor default berikut.

  • Semua bagian yang ditandatangani dalam urutan mereka ditambahkan ke daftar bagian yang ditandatangani

  • Semua bagian terenkripsi dalam urutan mereka ditambahkan ke daftar bagian terenkripsi

  • Semua bagian diperlukan

Konstruktor

Setiap konstruktor adalah daftar terurut dari bagian-bagian konstruktor yang mendefinisikan satu cara bahwa suar majemuk dapat dirakit. Bagian konstruktor digabungkan bersama dalam urutan mereka ditambahkan ke daftar, dengan setiap bagian dipisahkan oleh karakter split yang ditentukan.

Setiap bagian konstruktor menamai bagian terenkripsi atau bagian yang ditandatangani, dan menentukan apakah bagian itu diperlukan atau opsional dalam konstruktor. Misalnya, jika Anda ingin menanyakan suar majemuk padaField1,, dan Field1.Field2Field1.Field2.Field3, tandai dan Field3 sebagai opsional Field2 dan buat satu konstruktor.

Setiap konstruktor harus memiliki setidaknya satu bagian yang diperlukan. Sebaiknya buat bagian pertama di setiap konstruktor yang diperlukan sehingga Anda dapat menggunakan BEGINS_WITH operator dalam kueri Anda.

Konstruktor berhasil jika semua bagian yang diperlukan ada dalam catatan. Saat Anda menulis catatan baru, suar majemuk menggunakan daftar konstruktor untuk menentukan apakah suar dapat dirakit dari nilai yang diberikan. Ini mencoba untuk merakit suar dalam urutan bahwa konstruktor ditambahkan ke daftar konstruktor, dan menggunakan konstruktor pertama yang berhasil. Jika tidak ada konstruktor yang berhasil, suar tidak ditulis ke catatan.

Semua pembaca dan penulis harus menentukan urutan konstruktor yang sama untuk memastikan bahwa hasil kueri mereka benar.

Gunakan prosedur berikut untuk menentukan daftar konstruktor Anda sendiri.

  1. Buat bagian konstruktor untuk setiap bagian terenkripsi dan bagian yang ditandatangani untuk menentukan apakah bagian itu diperlukan atau tidak.

    Nama bagian konstruktor harus nama suar standar atau bidang bertanda tangan yang diwakilinya.

    Java
    ConstructorPart field1ConstructorPart = ConstructorPart.builder() .name("Field1") .required(true) .build();
    C# / .NET
    var field1ConstructorPart = new ConstructorPart { Name = "Field1", Required = true };
    Rust
    let field_1_constructor_part = ConstructorPart::builder() .name("field_1") .required(true) .build()?;
  2. Buat konstruktor untuk setiap cara yang mungkin bahwa suar majemuk dapat dirakit menggunakan bagian konstruktor yang Anda buat di Langkah 1.

    Misalnya, jika Anda ingin menanyakan Field1.Field2.Field3 danField4.Field2.Field3, maka Anda harus membuat dua konstruktor. Field1dan keduanya Field4 dapat diperlukan karena mereka didefinisikan dalam dua konstruktor terpisah.

    Java
    // Create a list for Field1.Field2.Field3 queries List<ConstructorPart> field123ConstructorPartList = new ArrayList<>(); field123ConstructorPartList.add(field1ConstructorPart); field123ConstructorPartList.add(field2ConstructorPart); field123ConstructorPartList.add(field3ConstructorPart); Constructor field123Constructor = Constructor.builder() .parts(field123ConstructorPartList) .build(); // Create a list for Field4.Field2.Field1 queries List<ConstructorPart> field421ConstructorPartList = new ArrayList<>(); field421ConstructorPartList.add(field4ConstructorPart); field421ConstructorPartList.add(field2ConstructorPart); field421ConstructorPartList.add(field1ConstructorPart); Constructor field421Constructor = Constructor.builder() .parts(field421ConstructorPartList) .build();
    C# / .NET
    // Create a list for Field1.Field2.Field3 queries var field123ConstructorPartList = new Constructor { Parts = new List<ConstructorPart> { field1ConstructorPart, field2ConstructorPart, field3ConstructorPart } }; // Create a list for Field4.Field2.Field1 queries var field421ConstructorPartList = new Constructor { Parts = new List<ConstructorPart> { field4ConstructorPart, field2ConstructorPart, field1ConstructorPart } };
    Rust
    // Create a list for field1.field2.field3 queries let field1_field2_field3_constructor = Constructor::builder() .parts(vec![ field1_constructor_part, field2_constroctor_part.clone(), field3_constructor_part, ]) .build()?; // Create a list for field4.field2.field1 queries let field4_field2_field1_constructor = Constructor::builder() .parts(vec![ field4_constructor_part, field2_constroctor_part.clone(), field1_constructor_part, ]) .build()?;
  3. Buat daftar konstruktor yang mencakup semua konstruktor yang Anda buat di Langkah 2.

    Java
    List<Constructor> constructorList = new ArrayList<>(); constructorList.add(field123Constructor) constructorList.add(field421Constructor)
    C# / .NET
    var constructorList = new List<Constructor> { field123Constructor, field421Constructor };
    Rust
    let constructor_list = vec![ field1_field2_field3_constructor, field4_field2_field1_constructor, ];
  4. Tentukan constructorList kapan Anda membuat suar majemuk Anda.