Konfigurasikan tabel DynamoDB yang ada untuk menggunakan SDK Enkripsi Database untuk AWS 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.

Konfigurasikan tabel DynamoDB yang ada untuk menggunakan SDK Enkripsi Database untuk AWS DynamoDB

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

Dengan versi 3. x dari pustaka enkripsi sisi klien Java untuk DynamoDB, Anda dapat mengonfigurasi tabel Amazon DynamoDB yang ada untuk enkripsi sisi klien. Topik ini memberikan panduan tentang tiga langkah yang harus Anda ambil untuk menambahkan versi 3. x ke tabel DynamoDB yang sudah ada dan terisi.

Prasyarat

Versi 3. x dari pustaka enkripsi sisi klien Java untuk DynamoDB memerlukan DynamoDB Enhanced Client yang disediakan di. AWS SDK for Java 2.x Jika Anda masih menggunakan DynamodBMapper, Anda harus bermigrasi untuk menggunakan DynamoDB Enhanced Client. AWS SDK for Java 2.x

Ikuti petunjuk untuk bermigrasi dari versi 1.x ke 2.x dari file. AWS SDK for Java

Kemudian, ikuti petunjuk untuk Memulai menggunakan DynamoDB Enhanced Client API.

Sebelum mengkonfigurasi tabel Anda untuk menggunakan pustaka enkripsi sisi klien Java untuk DynamoDB, Anda perlu membuat TableSchemamenggunakan kelas data beranotasi dan membuat klien yang disempurnakan.

Langkah 1: Bersiaplah untuk membaca dan menulis item terenkripsi

Selesaikan langkah-langkah berikut untuk mempersiapkan klien SDK Enkripsi AWS Database Anda untuk membaca dan menulis item terenkripsi. Setelah Anda menerapkan perubahan berikut, klien Anda akan terus membaca dan menulis item teks biasa. Ini tidak akan mengenkripsi atau menandatangani item baru yang ditulis ke tabel, tetapi akan dapat mendekripsi item terenkripsi segera setelah muncul. Perubahan ini mempersiapkan klien untuk mulai mengenkripsi item baru. Perubahan berikut harus diterapkan ke setiap pembaca sebelum Anda melanjutkan ke langkah berikutnya.

1. Tentukan tindakan atribut Anda

Perbarui kelas data beranotasi Anda untuk menyertakan tindakan atribut yang menentukan nilai atribut mana yang akan dienkripsi dan ditandatangani, yang hanya akan ditandatangani, dan mana yang akan diabaikan.

Lihat SimpleClass.java di repositori aws-database-encryption-sdk -dynamodb untuk panduan GitHub lebih lanjut tentang anotasi DynamoDB Enhanced Client.

Secara default, atribut kunci primer ditandatangani tetapi tidak dienkripsi (SIGN_ONLY) dan semua atribut lainnya dienkripsi dan ditandatangani (). ENCRYPT_AND_SIGN Untuk menentukan pengecualian, gunakan anotasi enkripsi yang ditentukan dalam pustaka enkripsi sisi klien Java untuk DynamoDB. Misalnya, jika Anda ingin atribut tertentu ditandatangani hanya gunakan @DynamoDbEncryptionSignOnly anotasi. Jika Anda ingin atribut tertentu ditandatangani dan disertakan dalam konteks enkripsi, gunakan @DynamoDbEncryptionSignAndIncludeInEncryptionContext anotasi. Jika Anda ingin atribut tertentu tidak ditandatangani atau dienkripsi (DO_NOTHING), gunakan anotasi@DynamoDbEncryptionDoNothing.

catatan

Jika Anda menentukan SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT atribut apa pun, maka atribut partisi dan sortir juga harusSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT. Untuk contoh yang menunjukkan anotasi yang digunakan untuk mendefinisikanSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT, lihat SimpleClass4.java.

Misalnya anotasi, lihatGunakan kelas data beranotasi.

2. Tentukan atribut mana yang akan dikecualikan dari tanda tangan

Contoh berikut mengasumsikan bahwa semua DO_NOTHING atribut berbagi awalan yang berbeda ":“, dan menggunakan awalan untuk menentukan atribut unsigned yang diizinkan. Klien akan menganggap bahwa nama atribut apa pun dengan awalan : "" dikecualikan dari tanda tangan. Untuk informasi selengkapnya, lihat Atribut yang tidak ditandatangani yang diizinkan.

final String unsignedAttrPrefix = ":";
3. Buat keyring

Contoh berikut membuat AWS KMS keyring. AWS KMS Keyring menggunakan enkripsi simetris atau RSA asimetris AWS KMS keys untuk menghasilkan, mengenkripsi, dan mendekripsi kunci data.

Contoh ini digunakan CreateMrkMultiKeyring untuk membuat AWS KMS keyring dengan kunci KMS enkripsi simetris. CreateAwsKmsMrkMultiKeyringMetode ini memastikan bahwa keyring akan menangani tombol Single-region dan Multi-region dengan benar.

final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsMrkMultiKeyringInput keyringInput = CreateAwsKmsMrkMultiKeyringInput.builder() .generator(kmsKeyId) .build(); final IKeyring kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
4. Tentukan konfigurasi enkripsi tabel DynamoDB

Contoh berikut mendefinisikan tableConfigs Peta yang mewakili konfigurasi enkripsi untuk tabel DynamoDB ini.

Contoh ini menentukan nama tabel DynamoDB sebagai nama tabel logis. Kami sangat menyarankan untuk menentukan nama tabel DynamoDB Anda sebagai nama tabel logis saat Anda pertama kali menentukan konfigurasi enkripsi Anda. Untuk informasi selengkapnya, lihat Konfigurasi enkripsi dalam SDK Enkripsi AWS Database untuk DynamoDB.

Anda harus menentukan FORCE_WRITE_PLAINTEXT_ALLOW_READ_PLAINTEXT sebagai plaintext override. Kebijakan ini terus membaca dan menulis item teks biasa, membaca item terenkripsi, dan mempersiapkan klien untuk menulis item terenkripsi.

final Map<String, DynamoDbTableEncryptionConfig> tableConfigs = new HashMap<>(); final DynamoDbTableEncryptionConfig config = DynamoDbTableEncryptionConfig.builder() .logicalTableName(ddbTableName) .partitionKeyName("partition_key") .sortKeyName("sort_key") .schemaOnEncrypt(tableSchema) .keyring(kmsKeyring) .allowedUnsignedAttributePrefix(unsignedAttrPrefix) .plaintextOverride(PlaintextOverride.FORCE_WRITE_PLAINTEXT_ALLOW_READ_PLAINTEXT) .build(); tableConfigs.put(ddbTableName, config);
5. Buat DynamoDbEncryptionInterceptor

Contoh berikut menciptakan DynamoDbEncryptionInterceptor menggunakan tableConfigs dari Langkah 3.

DynamoDbEncryptionInterceptor interceptor = DynamoDbEncryptionInterceptor.builder() .config(DynamoDbTablesEncryptionConfig.builder() .tableEncryptionConfigs(tableConfigs) .build()) .build();

Langkah 2: Tulis item terenkripsi dan ditandatangani

Perbarui kebijakan plaintext dalam DynamoDbEncryptionInterceptor konfigurasi Anda untuk memungkinkan klien menulis item terenkripsi dan ditandatangani. Setelah Anda menerapkan perubahan berikut, klien akan mengenkripsi dan menandatangani item baru berdasarkan tindakan atribut yang Anda konfigurasikan di Langkah 1. Klien akan dapat membaca item teks biasa dan item terenkripsi dan ditandatangani.

Sebelum Anda melanjutkan ke Langkah 3, Anda harus mengenkripsi dan menandatangani semua item plaintext yang ada di tabel Anda. Tidak ada metrik atau kueri tunggal yang dapat Anda jalankan untuk mengenkripsi item plaintext yang ada dengan cepat. Gunakan proses yang paling masuk akal untuk sistem Anda. Misalnya, Anda dapat menggunakan proses asinkron yang memindai tabel secara perlahan dan menulis ulang item menggunakan tindakan atribut dan konfigurasi enkripsi yang Anda tentukan. Untuk mengidentifikasi item plaintext dalam tabel Anda, kami sarankan memindai semua item yang tidak berisi aws_dbe_head dan aws_dbe_foot atribut yang ditambahkan SDK Enkripsi AWS Database ke item saat dienkripsi dan ditandatangani.

Contoh berikut memperbarui konfigurasi enkripsi tabel dari Langkah 1. Anda harus memperbarui penggantian plaintext dengan. FORBID_WRITE_PLAINTEXT_ALLOW_READ_PLAINTEXT Kebijakan ini terus membaca item teks biasa, tetapi juga membaca dan menulis item terenkripsi. Buat yang baru DynamoDbEncryptionInterceptor menggunakan yang diperbaruitableConfigs.

final Map<String, DynamoDbTableEncryptionConfig> tableConfigs = new HashMap<>(); final DynamoDbTableEncryptionConfig config = DynamoDbTableEncryptionConfig.builder() .logicalTableName(ddbTableName) .partitionKeyName("partition_key") .sortKeyName("sort_key") .schemaOnEncrypt(tableSchema) .keyring(kmsKeyring) .allowedUnsignedAttributePrefix(unsignedAttrPrefix) .plaintextOverride(PlaintextOverride.FORBID_WRITE_PLAINTEXT_ALLOW_READ_PLAINTEXT) .build(); tableConfigs.put(ddbTableName, config);

Langkah 3: Hanya baca item terenkripsi dan ditandatangani

Setelah Anda mengenkripsi dan menandatangani semua item Anda, perbarui penggantian plaintext dalam DynamoDbEncryptionInterceptor konfigurasi Anda untuk hanya mengizinkan klien membaca dan menulis item terenkripsi dan ditandatangani. Setelah Anda menerapkan perubahan berikut, klien akan mengenkripsi dan menandatangani item baru berdasarkan tindakan atribut yang Anda konfigurasikan di Langkah 1. Klien hanya akan dapat membaca item terenkripsi dan ditandatangani.

Contoh berikut memperbarui konfigurasi enkripsi tabel dari Langkah 2. Anda dapat memperbarui penggantian plaintext dengan FORBID_WRITE_PLAINTEXT_FORBID_READ_PLAINTEXT atau menghapus kebijakan plaintext dari konfigurasi Anda. Klien hanya membaca dan menulis item terenkripsi dan ditandatangani secara default. Buat yang baru DynamoDbEncryptionInterceptor menggunakan yang diperbaruitableConfigs.

final Map<String, DynamoDbTableEncryptionConfig> tableConfigs = new HashMap<>(); final DynamoDbTableEncryptionConfig config = DynamoDbTableEncryptionConfig.builder() .logicalTableName(ddbTableName) .partitionKeyName("partition_key") .sortKeyName("sort_key") .schemaOnEncrypt(tableSchema) .keyring(kmsKeyring) .allowedUnsignedAttributePrefix(unsignedAttrPrefix) // Optional: you can also remove the plaintext policy from your configuration .plaintextOverride(PlaintextOverride.FORBID_WRITE_PLAINTEXT_FORBID_READ_PLAINTEXT) .build(); tableConfigs.put(ddbTableName, config);