Contoh Java - AWS Enkripsi Database SDK

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

Contoh Java

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

Contoh berikut menunjukkan cara menggunakan pustaka enkripsi sisi klien Java untuk DynamoDB untuk melindungi item tabel dalam aplikasi Anda. Anda dapat menemukan lebih banyak contoh (dan berkontribusi sendiri) di contoh Java di repositori aws-database-encryption-sdk -dynamodb di. GitHub

Contoh berikut menunjukkan cara mengonfigurasi pustaka enkripsi sisi klien Java untuk DynamoDB dalam tabel Amazon DynamoDB baru yang tidak terisi. Jika Anda ingin mengonfigurasi tabel Amazon DynamoDB yang ada untuk enkripsi sisi klien, lihat. Tambahkan versi 3.x ke tabel yang ada

Menggunakan klien yang disempurnakan DynamoDB

Contoh berikut menunjukkan cara menggunakan DynamoDB Enhanced Client DynamoDbEncryptionInterceptor dan dengan keyring untuk mengenkripsi item tabel DynamoDB AWS KMS sebagai bagian dari panggilan DynamoDB Anda. API

Anda dapat menggunakan keyring apa pun yang didukung dengan DynamoDB Enhanced Client, tetapi sebaiknya gunakan salah AWS KMS satu gantungan kunci bila memungkinkan.

catatan

DynamoDB Enhanced Client tidak mendukung enkripsi yang dapat dicari. Gunakan DynamoDbEncryptionInterceptor dengan API DynamoDB tingkat rendah untuk menggunakan enkripsi yang dapat dicari.

Lihat contoh kode lengkapnya: EnhancedPutGetExample.java

Langkah 1: Buat AWS KMS keyring

Contoh berikut digunakan CreateAwsKmsMrkMultiKeyring untuk membuat AWS KMS keyring dengan kunci enkripsi KMS 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);
Langkah 2: Buat skema tabel dari kelas data beranotasi

Contoh berikut menggunakan kelas data beranotasi untuk membuat. TableSchema

Contoh ini mengasumsikan bahwa kelas data beranotasi dan tindakan atribut didefinisikan menggunakan .java. SimpleClass Untuk panduan selengkapnya tentang anotasi tindakan atribut Anda, lihat. Gunakan kelas data beranotasi

catatan

Enkripsi AWS Database SDK tidak mendukung anotasi pada atribut bersarang.

final TableSchema<SimpleClass> schemaOnEncrypt = TableSchema.fromBean(SimpleClass.class);
Langkah 3: Tentukan atribut mana yang 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 mengasumsikan bahwa nama atribut apa pun dengan awalan ":" dikecualikan dari tanda tangan. Untuk informasi selengkapnya, lihat Allowed unsigned attributes.

final String unsignedAttrPrefix = ":";
Langkah 4: Buat konfigurasi enkripsi

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

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.

catatan

Untuk menggunakan enkripsi yang dapat dicari atau suar yang ditandatangani, Anda juga harus menyertakan SearchConfigdalam konfigurasi enkripsi Anda.

final Map<String, DynamoDbEnhancedTableEncryptionConfig> tableConfigs = new HashMap<>(); tableConfigs.put(ddbTableName, DynamoDbEnhancedTableEncryptionConfig.builder() .logicalTableName(ddbTableName) .keyring(kmsKeyring) .allowedUnsignedAttributePrefix(unsignedAttrPrefix) .schemaOnEncrypt(tableSchema) .build());
Langkah 5: Membuat DynamoDbEncryptionInterceptor

Contoh berikut membuat yang baru DynamoDbEncryptionInterceptor dengan tableConfigs dari Langkah 4.

final DynamoDbEncryptionInterceptor interceptor = DynamoDbEnhancedClientEncryption.CreateDynamoDbEncryptionInterceptor( CreateDynamoDbEncryptionInterceptorInput.builder() .tableEncryptionConfigs(tableConfigs) .build() );
Langkah 6: Buat klien AWS SDK DynamoDB baru

Contoh berikut membuat klien AWS SDK DynamoDB baru menggunakan interceptor dari Langkah 5.

final DynamoDbClient ddb = DynamoDbClient.builder() .overrideConfiguration( ClientOverrideConfiguration.builder() .addExecutionInterceptor(interceptor) .build()) .build();
Langkah 7: Buat DynamoDB Enhanced Client dan buat tabel

Contoh berikut menciptakan DynamoDB Enhanced Client menggunakan klien AWS SDK DynamoDB dibuat pada Langkah 6 dan membuat tabel menggunakan kelas data beranotasi.

final DynamoDbEnhancedClient enhancedClient = DynamoDbEnhancedClient.builder() .dynamoDbClient(ddb) .build(); final DynamoDbTable<SimpleClass> table = enhancedClient.table(ddbTableName, tableSchema);
Langkah 8: Enkripsi dan tandatangani item tabel

Contoh berikut menempatkan item ke dalam tabel DynamoDB menggunakan DynamoDB Enhanced Client. Item dienkripsi dan ditandatangani sisi klien sebelum dikirim ke DynamoDB.

final SimpleClass item = new SimpleClass(); item.setPartitionKey("EnhancedPutGetExample"); item.setSortKey(0); item.setAttribute1("encrypt and sign me!"); item.setAttribute2("sign me!"); item.setAttribute3("ignore me!"); table.putItem(item);

Menggunakan DynamoDB tingkat rendah API

Contoh berikut menunjukkan cara menggunakan DynamoDB tingkat rendah dengan keyring untuk secara otomatis mengenkripsi dan menandatangani item sisi klien dengan AWS KMS permintaan API DynamoDB Anda. PutItem

Anda dapat menggunakan keyring apa pun yang didukung, tetapi kami sarankan menggunakan salah satu AWS KMS gantungan kunci jika memungkinkan.

Lihat contoh kode lengkapnya: BasicPutGetExample.java

Langkah 1: Buat AWS KMS keyring

Contoh berikut digunakan CreateAwsKmsMrkMultiKeyring untuk membuat AWS KMS keyring dengan kunci enkripsi KMS 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);
Langkah 2: Konfigurasikan tindakan atribut Anda

Contoh berikut mendefinisikan attributeActionsOnEncrypt Peta yang mewakili tindakan atribut sampel untuk item tabel.

catatan

Contoh berikut tidak mendefinisikan atribut apa pun sebagaiSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT. Jika Anda menentukan SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT atribut apa pun, maka atribut partisi dan sortir juga harusSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT.

final Map<String, CryptoAction> attributeActionsOnEncrypt = new HashMap<>(); // The partition attribute must be SIGN_ONLY attributeActionsOnEncrypt.put("partition_key", CryptoAction.SIGN_ONLY); // The sort attribute must be SIGN_ONLY attributeActionsOnEncrypt.put("sort_key", CryptoAction.SIGN_ONLY); attributeActionsOnEncrypt.put("attribute1", CryptoAction.ENCRYPT_AND_SIGN); attributeActionsOnEncrypt.put("attribute2", CryptoAction.SIGN_ONLY); attributeActionsOnEncrypt.put(":attribute3", CryptoAction.DO_NOTHING);
Langkah 3: Tentukan atribut mana yang 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 mengasumsikan bahwa nama atribut apa pun dengan awalan ":" dikecualikan dari tanda tangan. Untuk informasi selengkapnya, lihat Allowed unsigned attributes.

final String unsignedAttrPrefix = ":";
Langkah 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.

catatan

Untuk menggunakan enkripsi yang dapat dicari atau suar yang ditandatangani, Anda juga harus menyertakan SearchConfigdalam konfigurasi enkripsi Anda.

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

Contoh berikut menciptakan DynamoDbEncryptionInterceptor menggunakan tableConfigs dari Langkah 4.

DynamoDbEncryptionInterceptor interceptor = DynamoDbEncryptionInterceptor.builder() .config(DynamoDbTablesEncryptionConfig.builder() .tableEncryptionConfigs(tableConfigs) .build()) .build();
Langkah 6: Buat klien AWS SDK DynamoDB baru

Contoh berikut membuat klien AWS SDK DynamoDB baru menggunakan interceptor dari Langkah 5.

final DynamoDbClient ddb = DynamoDbClient.builder() .overrideConfiguration( ClientOverrideConfiguration.builder() .addExecutionInterceptor(interceptor) .build()) .build();
Langkah 7: Enkripsi dan tandatangani item tabel DynamoDB

Contoh berikut mendefinisikan item Peta yang mewakili item tabel sampel dan menempatkan item dalam tabel DynamoDB. Item dienkripsi dan ditandatangani sisi klien sebelum dikirim ke DynamoDB.

final HashMap<String, AttributeValue> item = new HashMap<>(); item.put("partition_key", AttributeValue.builder().s("BasicPutGetExample").build()); item.put("sort_key", AttributeValue.builder().n("0").build()); item.put("attribute1", AttributeValue.builder().s("encrypt and sign me!").build()); item.put("attribute2", AttributeValue.builder().s("sign me!").build()); item.put(":attribute3", AttributeValue.builder().s("ignore me!").build()); final PutItemRequest putRequest = PutItemRequest.builder() .tableName(ddbTableName) .item(item) .build(); final PutItemResponse putResponse = ddb.putItem(putRequest);

Menggunakan level yang lebih rendah DynamoDbItemEncryptor

Contoh berikut menunjukkan cara menggunakan level yang lebih rendah DynamoDbItemEncryptor dengan AWS KMS keyring untuk langsung mengenkripsi dan menandatangani item tabel. DynamoDbItemEncryptorItu tidak menempatkan item di tabel DynamoDB Anda.

Anda dapat menggunakan keyring apa pun yang didukung dengan DynamoDB Enhanced Client, tetapi sebaiknya gunakan salah AWS KMS satu gantungan kunci bila memungkinkan.

catatan

Tingkat yang lebih rendah DynamoDbItemEncryptor tidak mendukung enkripsi yang dapat dicari. Gunakan DynamoDbEncryptionInterceptor dengan API DynamoDB tingkat rendah untuk menggunakan enkripsi yang dapat dicari.

Lihat contoh kode lengkapnya: ItemEncryptDecryptExample.java

Langkah 1: Buat AWS KMS keyring

Contoh berikut digunakan CreateAwsKmsMrkMultiKeyring untuk membuat AWS KMS keyring dengan kunci enkripsi KMS 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);
Langkah 2: Konfigurasikan tindakan atribut Anda

Contoh berikut mendefinisikan attributeActionsOnEncrypt Peta yang mewakili tindakan atribut sampel untuk item tabel.

catatan

Contoh berikut tidak mendefinisikan atribut apa pun sebagaiSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT. Jika Anda menentukan SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT atribut apa pun, maka atribut partisi dan sortir juga harusSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT.

final Map<String, CryptoAction> attributeActionsOnEncrypt = new HashMap<>(); // The partition attribute must be SIGN_ONLY attributeActionsOnEncrypt.put("partition_key", CryptoAction.SIGN_ONLY); // The sort attribute must be SIGN_ONLY attributeActionsOnEncrypt.put("sort_key", CryptoAction.SIGN_ONLY); attributeActionsOnEncrypt.put("attribute1", CryptoAction.ENCRYPT_AND_SIGN); attributeActionsOnEncrypt.put("attribute2", CryptoAction.SIGN_ONLY); attributeActionsOnEncrypt.put(":attribute3", CryptoAction.DO_NOTHING);
Langkah 3: Tentukan atribut mana yang 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 mengasumsikan bahwa nama atribut apa pun dengan awalan ":" dikecualikan dari tanda tangan. Untuk informasi selengkapnya, lihat Allowed unsigned attributes.

final String unsignedAttrPrefix = ":";
Langkah 4: Tentukan DynamoDbItemEncryptor konfigurasi

Contoh berikut mendefinisikan konfigurasi untuk. DynamoDbItemEncryptor

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.

final DynamoDbItemEncryptorConfig config = DynamoDbItemEncryptorConfig.builder() .logicalTableName(ddbTableName) .partitionKeyName("partition_key") .sortKeyName("sort_key") .attributeActionsOnEncrypt(attributeActionsOnEncrypt) .keyring(kmsKeyring) .allowedUnsignedAttributePrefix(unsignedAttrPrefix) .build();
Langkah 5: Buat DynamoDbItemEncryptor

Contoh berikut membuat baru DynamoDbItemEncryptor menggunakan config dari Langkah 4.

final DynamoDbItemEncryptor itemEncryptor = DynamoDbItemEncryptor.builder() .DynamoDbItemEncryptorConfig(config) .build();
Langkah 6: Langsung mengenkripsi dan menandatangani item tabel

Contoh berikut langsung mengenkripsi dan menandatangani item menggunakan. DynamoDbItemEncryptor DynamoDbItemEncryptorItu tidak menempatkan item di tabel DynamoDB Anda.

final Map<String, AttributeValue> originalItem = new HashMap<>(); originalItem.put("partition_key", AttributeValue.builder().s("ItemEncryptDecryptExample").build()); originalItem.put("sort_key", AttributeValue.builder().n("0").build()); originalItem.put("attribute1", AttributeValue.builder().s("encrypt and sign me!").build()); originalItem.put("attribute2", AttributeValue.builder().s("sign me!").build()); originalItem.put(":attribute3", AttributeValue.builder().s("ignore me!").build()); final Map<String, AttributeValue> encryptedItem = itemEncryptor.EncryptItem( EncryptItemInput.builder() .plaintextItem(originalItem) .build() ).encryptedItem();