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 Enkripsi Database untuk AWS DynamoDB SDK
Pustaka enkripsi sisi klien kami diubah namanya menjadi Enkripsi AWS Database. SDK 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 D ynamoDBMapper, Anda harus bermigrasi ke AWS SDK for Java 2.x untuk menggunakan DynamoDB Enhanced Client.
Ikuti petunjuk untuk bermigrasi dari versi 1.x ke 2.x. 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 TableSchema
menggunakan kelas data beranotasi dan membuat klien yang disempurnakan.
Langkah 1: Bersiaplah untuk membaca dan menulis item terenkripsi
Selesaikan langkah-langkah berikut untuk mempersiapkan SDK klien 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 Allowed unsigned attributes.final String unsignedAttrPrefix = ":";
- 3. Buat keyring
-
Contoh berikut membuat AWS KMS keyring. AWS KMS Keyring menggunakan enkripsi simetris atau asimetris RSA AWS KMS keys untuk menghasilkan, mengenkripsi, dan mendekripsi kunci data.
Contoh ini digunakan
CreateMrkMultiKeyring
untuk membuat AWS KMS keyring dengan kunci enkripsi KMS simetris.CreateAwsKmsMrkMultiKeyring
Metode 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 Enkripsi AWS Database SDK 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
menggunakantableConfigs
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 SDK ditambahkan 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);