Enkripsi yang dapat dicari di DynamoDB - 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.

Enkripsi yang dapat dicari di DynamoDB

Untuk mengonfigurasi tabel Amazon DynamoDB Anda untuk enkripsi yang dapat dicari, Anda harus menggunakan AWS KMS keyring Hierarkis untuk menghasilkan, mengenkripsi, dan mendekripsi kunci data yang digunakan untuk melindungi item Anda. Anda juga harus menyertakan konfigurasi enkripsi tabel Anda. SearchConfig

catatan

Jika Anda menggunakan pustaka enkripsi sisi klien Java untuk DynamoDB, Anda harus menggunakan SDK Enkripsi AWS Database tingkat rendah untuk DynamoDB API untuk mengenkripsi, menandatangani, memverifikasi, dan mendekripsi item tabel Anda. DynamoDB Enhanced Client dan DynamoDBItemEncryptor level yang lebih rendah tidak mendukung enkripsi yang dapat dicari.

Mengkonfigurasi indeks sekunder dengan beacon

Setelah Anda mengkonfigurasi beacon Anda, Anda harus mengkonfigurasi indeks sekunder yang mencerminkan setiap suar sebelum Anda dapat mencari pada atribut terenkripsi.

Saat Anda mengonfigurasi suar standar atau gabungan, SDK Enkripsi AWS Database menambahkan aws_dbe_b_ awalan ke nama suar sehingga server dapat dengan mudah mengidentifikasi beacon. Misalnya, jika Anda menamai suar majemukcompoundBeacon, nama suar lengkapnya sebenarnya. aws_dbe_b_compoundBeacon Jika Anda ingin mengonfigurasi indeks sekunder yang menyertakan suar standar atau majemuk, Anda harus menyertakan aws_dbe_b_ awalan saat mengidentifikasi nama suar.

Partisi dan sortir kunci

Anda tidak dapat mengenkripsi nilai kunci primer. Kunci partisi dan sortir Anda harus ditandatangani. Nilai kunci primer Anda tidak bisa menjadi suar standar atau majemuk.

Nilai kunci utama Anda harusSIGN_ONLY, kecuali Anda menentukan SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT atribut apa pun, maka atribut partisi dan sortir juga harusSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT.

Nilai kunci utama Anda dapat ditandatangani beacon. Jika Anda mengonfigurasi beacon bertanda tangan yang berbeda untuk setiap nilai kunci utama, Anda harus menentukan nama atribut yang mengidentifikasi nilai kunci primer sebagai nama suar yang ditandatangani. Namun, SDK Enkripsi AWS Database tidak menambahkan aws_dbe_b_ awalan ke beacon yang ditandatangani. Bahkan jika Anda mengonfigurasi beacon bertanda tangan yang berbeda untuk nilai kunci utama Anda, Anda hanya perlu menentukan nama atribut untuk nilai kunci primer saat Anda mengonfigurasi indeks sekunder.

Indeks sekunder lokal

Kunci sortir untuk indeks sekunder lokal dapat berupa suar.

Jika Anda menentukan suar untuk kunci sortir, tipenya harus String. Jika Anda menentukan standar atau suar majemuk untuk kunci sortir, Anda harus menyertakan aws_dbe_b_ awalan saat Anda menentukan nama suar. Jika Anda menentukan suar yang ditandatangani, tentukan nama suar tanpa awalan apa pun.

Indeks sekunder global

Kunci partisi dan sortir untuk indeks sekunder global dapat berupa beacon.

Jika Anda menentukan suar untuk partisi atau kunci sortir, jenisnya harus String. Jika Anda menentukan standar atau suar majemuk untuk kunci sortir, Anda harus menyertakan aws_dbe_b_ awalan saat Anda menentukan nama suar. Jika Anda menentukan suar yang ditandatangani, tentukan nama suar tanpa awalan apa pun.

Proyeksi atribut

Proyeksi adalah kumpulan atribut yang disalin dari tabel ke indeks sekunder. Kunci partisi dan kunci urutan tabel selalu diproyeksikan ke dalam indeks; Anda dapat memproyeksikan atribut lain untuk mendukung persyaratan kueri aplikasi Anda. DynamoDB menyediakan tiga opsi berbeda untuk proyeksi KEYS_ONLY atribut:,, dan. INCLUDE ALL

Jika Anda menggunakan proyeksi atribut INCLUDE untuk mencari pada suar, Anda harus menentukan nama untuk semua atribut yang suar dibangun dari dan nama suar dengan awalan. aws_dbe_b_ Misalnya, jika Anda mengkonfigurasi suar majemuk,compoundBeacon, dari,field1, dan field2field3, Anda harus menentukanaws_dbe_b_compoundBeacon,, field1field2, dan field3 dalam proyeksi.

Indeks sekunder global hanya dapat menggunakan atribut yang ditentukan secara eksplisit dalam proyeksi, tetapi indeks sekunder lokal dapat menggunakan atribut apa pun.

Menguji output suar

Jika Anda mengonfigurasi suar majemuk atau membuat beacon menggunakan bidang virtual, sebaiknya verifikasi bahwa beacon ini menghasilkan output yang diharapkan sebelum mengisi tabel DynamoDB Anda.

AWS Database Encryption SDK menyediakan DynamoDbEncryptionTransforms layanan untuk membantu Anda memecahkan masalah bidang virtual dan output suar gabungan.

Cuplikan berikut membuat item pengujian, mendefinisikan DynamoDbEncryptionTransforms layanan dengan konfigurasi enkripsi tabel DynamoDB, dan menunjukkan cara menggunakan ResolveAttributes untuk memverifikasi bahwa bidang virtual menghasilkan output yang diharapkan.

Java

Lihat contoh kode lengkapnya: VirtualBeaconSearchableEncryptionExample.java

// Create test items final PutItemRequest itemWithHasTestResultPutRequest = PutItemRequest.builder() .tableName(ddbTableName) .item(itemWithHasTestResult) .build(); final PutItemResponse itemWithHasTestResultPutResponse = ddb.putItem(itemWithHasTestResultPutRequest); final PutItemRequest itemWithNoHasTestResultPutRequest = PutItemRequest.builder() .tableName(ddbTableName) .item(itemWithNoHasTestResult) .build(); final PutItemResponse itemWithNoHasTestResultPutResponse = ddb.putItem(itemWithNoHasTestResultPutRequest); // Define the DynamoDbEncryptionTransforms service final DynamoDbEncryptionTransforms trans = DynamoDbEncryptionTransforms.builder() .DynamoDbTablesEncryptionConfig(encryptionConfig).build(); // Verify configuration final ResolveAttributesInput resolveInput = ResolveAttributesInput.builder() .TableName(ddbTableName) .Item(itemWithHasTestResult) .Version(1) .build(); final ResolveAttributesOutput resolveOutput = trans.ResolveAttributes(resolveInput); // Verify that VirtualFields has the expected value Map<String, String> vf = new HashMap<>(); vf.put("stateAndHasTestResult", "CAt"); assert resolveOutput.VirtualFields().equals(vf);
C# / .NET

Lihat contoh kode lengkapnya: VirtualBeaconSearchableEncryptionExample.cs

// Create item with hasTestResult=true var itemWithHasTestResult = new Dictionary<String, AttributeValue> { ["customer_id"] = new AttributeValue("ABC-123"), ["create_time"] = new AttributeValue { N = "1681495205" }, ["state"] = new AttributeValue("CA"), ["hasTestResult"] = new AttributeValue { BOOL = true } }; // Create item with hasTestResult=false var itemWithNoHasTestResult = new Dictionary<String, AttributeValue> { ["customer_id"] = new AttributeValue("DEF-456"), ["create_time"] = new AttributeValue { N = "1681495205" }, ["state"] = new AttributeValue("CA"), ["hasTestResult"] = new AttributeValue { BOOL = false } }; // Define the DynamoDbEncryptionTransforms service var trans = new DynamoDbEncryptionTransforms(encryptionConfig); // Verify configuration var resolveInput = new ResolveAttributesInput { TableName = ddbTableName, Item = itemWithHasTestResult, Version = 1 }; var resolveOutput = trans.ResolveAttributes(resolveInput); // Verify that VirtualFields has the expected value Debug.Assert(resolveOutput.VirtualFields.Count == 1); Debug.Assert(resolveOutput.VirtualFields["stateAndHasTestResult"] == "CAt");

Cuplikan berikut membuat item uji, mendefinisikan DynamoDbEncryptionTransforms layanan dengan konfigurasi enkripsi tabel DynamoDB, dan menunjukkan cara menggunakan untuk memverifikasi bahwa suar majemuk menghasilkan output yang ResolveAttributes diharapkan.

Java

Lihat contoh kode lengkapnya: CompoundBeaconSearchableEncryptionExample.java

// Create an item with both attributes used in the compound beacon. final HashMap<String, AttributeValue> item = new HashMap<>(); item.put("work_id", AttributeValue.builder().s("9ce39272-8068-4efd-a211-cd162ad65d4c").build()); item.put("inspection_date", AttributeValue.builder().s("2023-06-13").build()); item.put("inspector_id_last4", AttributeValue.builder().s("5678").build()); item.put("unit", AttributeValue.builder().s("011899988199").build()); // Define the DynamoDbEncryptionTransforms service final DynamoDbEncryptionTransforms trans = DynamoDbEncryptionTransforms.builder() .DynamoDbTablesEncryptionConfig(encryptionConfig).build(); // Verify configuration final ResolveAttributesInput resolveInput = ResolveAttributesInput.builder() .TableName(ddbTableName) .Item(item) .Version(1) .build(); final ResolveAttributesOutput resolveOutput = trans.ResolveAttributes(resolveInput); // Verify that CompoundBeacons has the expected value Map<String, String> cbs = new HashMap<>(); cbs.put("last4UnitCompound", "L-5678.U-011899988199"); assert resolveOutput.CompoundBeacons().equals(cbs); // Note : the compound beacon actually stored in the table is not "L-5678.U-011899988199" // but rather something like "L-abc.U-123", as both parts are EncryptedParts // and therefore the text is replaced by the associated beacon
C# / .NET

Lihat contoh kode lengkapnya: CompoundBeaconSearchableEncryptionExample.cs

// Create an item with both attributes used in the compound beacon var item = new Dictionary<String, AttributeValue> { ["work_id"] = new AttributeValue("9ce39272-8068-4efd-a211-cd162ad65d4c"), ["inspection_date"] = new AttributeValue("2023-06-13"), ["inspector_id_last4"] = new AttributeValue("5678"), ["unit"] = new AttributeValue("011899988199") }; // Define the DynamoDbEncryptionTransforms service var trans = new DynamoDbEncryptionTransforms(encryptionConfig); // Verify configuration var resolveInput = new ResolveAttributesInput { TableName = ddbTableName, Item = item, Version = 1 }; var resolveOutput = trans.ResolveAttributes(resolveInput); // Verify that CompoundBeacons has the expected value Debug.Assert(resolveOutput.CompoundBeacons.Count == 1); Debug.Assert(resolveOutput.CompoundBeacons["last4UnitCompound"] == "L-5678.U-011899988199"); // Note : the compound beacon actually stored in the table is not "L-5678.U-011899988199" // but rather something like "L-abc.U-123", as both parts are EncryptedParts // and therefore the text is replaced by the associated beacon