View a markdown version of this page

Menggunakan Amazon DynamoDB Encryption Client untuk Java - 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.

Menggunakan Amazon DynamoDB Encryption Client untuk Java

catatan

Pustaka enkripsi sisi klien kami diubah namanya menjadi AWS Database Encryption SDK. Topik berikut memberikan informasi tentang versi 1. x —2. x dari DynamoDB Encryption Client untuk Java dan versi 1. x —3. x dari Klien Enkripsi DynamoDB untuk Python. Untuk informasi selengkapnya, lihat SDK Enkripsi AWS Database untuk dukungan versi DynamoDB.

Topik ini menjelaskan beberapa fitur DynamoDB Encryption Client di Java yang mungkin tidak ditemukan dalam implementasi bahasa pemrograman lainnya.

Untuk detail tentang pemrograman dengan Klien Enkripsi DynamoDB, lihat contoh Java, contoh di aws-dynamodb-encryption-java repository aktif, dan Javadoc untuk Klien Enkripsi DynamoDB. GitHub

Enkripsi barang: DynamodBenCryptor

Klien Enkripsi DynamoDB di Java memiliki satu item enkripsi: DynamodBenCryptor tingkat bawah

Tindakan atribut di Java

Tindakan atribut menentukan mana nilai atribut yang dienkripsi dan ditandatangani, mana yang hanya ditandatangani, dan mana yang diabaikan.

penting

Setelah Anda menggunakan tindakan atribut untuk mengenkripsi item tabel Anda, menambahkan atau menghapus atribut dari model data Anda dapat menyebabkan kesalahan validasi tanda tangan yang mencegah Anda mendekripsi data Anda. Untuk penjelasan detail, lihat Mengubah model data Anda.

Untuk menentukan tindakan atribut saat Anda menggunakan DynamoDBEncryptor secara langsung, buat objek HashMap di mana pasangan nama-nilai mewakili nama atribut dan tindakan yang ditentukan.

Nilai-nilai yang valid adalah untuk tindakan atribut yang didefinisikan dalam jenis EncryptionFlags yang disebutkan. Anda dapat menggunakan ENCRYPT dan SIGN secara bersamaan, menggunakan SIGN saja, atau tidak menggunakan keduanya. Namun, jika Anda menggunakan ENCRYPT saja, DynamoDB Encryption Client menyebabkan kesalahan. Anda tidak dapat mengenkripsi atribut yang tidak Anda tanda tangani.

ENCRYPT SIGN
Awas

Jangan mengenkripsi atribut kunci utama. Atribut tersebut harus tetap dalam plaintext sehingga DynamoDB dapat menemukan item tanpa memindai keseluruhan tabel.

Jika Anda menentukan kunci utama dalam konteks enkripsi dan kemudian menetapkan ENCRYPT dalam tindakan atribut untuk atribut kunci utama, DynamoDB Encryption Client membuat pengecualian.

Misalnya, kode Java berikut membuat sebuah actions HashMap yang mengenkripsi dan menandatangani semua atribut dalam item. record Pengecualiannya adalah atribut kunci partisi dan kunci penyortiran, yang ditandatangani tetapi tidak dienkripsi, dan atribut test, yang tidak ditandatangani atau dienkripsi.

final EnumSet<EncryptionFlags> signOnly = EnumSet.of(EncryptionFlags.SIGN); final EnumSet<EncryptionFlags> encryptAndSign = EnumSet.of(EncryptionFlags.ENCRYPT, EncryptionFlags.SIGN); final Map<String, Set<EncryptionFlags>> actions = new HashMap<>(); for (final String attributeName : record.keySet()) { switch (attributeName) { case partitionKeyName: // no break; falls through to next case case sortKeyName: // Partition and sort keys must not be encrypted, but should be signed actions.put(attributeName, signOnly); break; case "test": // Don't encrypt or sign break; default: // Encrypt and sign everything else actions.put(attributeName, encryptAndSign); break; } }

Kemudian, ketika Anda memanggil metode encryptRecord DynamoDBEncryptor, tentukan peta sebagai nilai parameter attributeFlags. Sebagai contoh, panggilan untuk encryptRecord ini menggunakan peta actions.

// Encrypt the plaintext record final Map<String, AttributeValue> encrypted_record = encryptor.encryptRecord(record, actions, encryptionContext);

Menimpa nama tabel

Pada DynamoDB Encryption Client, nama tabel DynamoDB adalah elemen konteks enkripsi DynamoDB yang diteruskan ke metode enkripsi dan dekripsi. Ketika Anda mengenkripsi atau menandatangani item tabel, konteks enkripsi DynamoDB, termasuk nama tabel, secara kriptografis terikat pada ciphertext. Jika konteks enkripsi DynamoDB yang diteruskan ke metode dekripsi tidak cocok dengan konteks enkripsi DynamoDB yang diteruskan ke metode enkripsi, operasi dekripsi gagal.

Kadang-kadang, nama tabel berubah, seperti ketika Anda membuat cadangan tabel atau melakukan pemulihan titik waktu. Ketika Anda mendekripsi atau memverifikasi tanda tangan item ini, Anda harus menggunakan konteks enkripsi DynamoDB yang sama yang digunakan untuk mengenkripsi dan menandatangani item, termasuk nama tabel asli. Nama tabel saat ini tidak diperlukan.

Saat Anda menggunakan DynamoDBEncryptor, Anda menyusun konteks enkripsi DynamoDB secara manual. Jadi, jangan gunakan operator penggantian nama tabel jika Anda menggunakan. DynamoDBEncryptor Sebaliknya, buatlah konteks enkripsi dengan nama tabel asli dan kirimkan ke metode dekripsi.