Amazon S3 Migrasi Klien Enkripsi - AWS SDK for Java 1.x

AWS SDK for Java 1.x telah memasuki mode pemeliharaan pada 31 Juli 2024, dan akan mencapai end-of-supportpada 31 Desember 2025. Kami menyarankan Anda bermigrasi ke AWS SDK for Java 2.xuntuk terus menerima fitur baru, peningkatan ketersediaan, dan pembaruan keamanan.

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

Amazon S3 Migrasi Klien Enkripsi

Topik ini menunjukkan cara memigrasikan aplikasi Anda dari Versi 1 (V1) klien enkripsi Amazon Simple Storage Service (Amazon S3) ke Versi 2 (V2) dan memastikan ketersediaan aplikasi selama proses migrasi.

Prasyarat

Amazon S3 enkripsi sisi klien memerlukan yang berikut:

  • Java 8 atau yang lebih baru diinstal di lingkungan aplikasi Anda. AWS SDK for Java Bekerja dengan Oracle Java SE Development Kit dan dengan distribusi Open Java Development Kit (OpenJDK) seperti Amazon Corretto, Red Hat Open JDK, dan. AdoptOpenJDK

  • Paket Bouncy Castle Crypto. Anda dapat menempatkan file Bouncy Castle .jar di classpath lingkungan aplikasi Anda, atau menambahkan ketergantungan pada artifactId bcprov-ext-jdk15on (dengan groupId dariorg.bouncycastle) ke file Maven Anda. pom.xml

Ikhtisar Migrasi

Migrasi ini terjadi dalam dua fase:

  1. Perbarui klien yang ada untuk membaca format baru. Perbarui aplikasi Anda untuk menggunakan versi 1.11.837 atau yang lebih baru AWS SDK for Java dan gunakan kembali aplikasi. Ini memungkinkan Amazon S3 klien layanan enkripsi sisi klien dalam aplikasi Anda untuk mendekripsi objek yang dibuat oleh klien layanan V2. Jika aplikasi Anda menggunakan beberapa AWS SDKs, Anda harus memperbarui masing-masing SDK secara terpisah.

  2. Migrasikan enkripsi dan dekripsi klien ke V2. Setelah semua klien enkripsi V1 Anda dapat membaca format enkripsi V2, perbarui enkripsi Amazon S3 sisi klien dan klien dekripsi dalam kode aplikasi Anda untuk menggunakan setara V2 mereka.

Perbarui Klien yang Ada untuk Membaca Format Baru

Klien enkripsi V2 menggunakan algoritma enkripsi yang AWS SDK for Java tidak didukung oleh versi lama.

Langkah pertama dalam migrasi adalah memperbarui klien enkripsi V1 Anda untuk menggunakan versi 1.11.837 atau yang lebih baru. AWS SDK for Java(Kami menyarankan Anda memperbarui ke versi rilis terbaru, yang dapat Anda temukan di APIReferensi Java versi 1.x.) Untuk melakukannya, perbarui dependensi dalam konfigurasi proyek Anda. Setelah konfigurasi proyek Anda diperbarui, bangun kembali proyek Anda dan terapkan ulang.

Setelah Anda menyelesaikan langkah-langkah ini, klien enkripsi V1 aplikasi Anda akan dapat membaca objek yang ditulis oleh klien enkripsi V2.

Perbarui Ketergantungan dalam Konfigurasi Proyek Anda

Ubah file konfigurasi proyek Anda (misalnya, pom.xml atau build.gradle) untuk menggunakan versi 1.11.837 atau yang lebih baru. AWS SDK for Java Kemudian, bangun kembali proyek Anda dan gunakan kembali.

Menyelesaikan langkah ini sebelum menerapkan kode aplikasi baru membantu memastikan bahwa operasi enkripsi dan dekripsi tetap konsisten di seluruh armada Anda selama proses migrasi.

Contoh Menggunakan Maven

Cuplikan dari file pom.xml:

<dependencyManagement> <dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-bom</artifactId> <version>1.11.837</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>

Contoh Menggunakan Gradle

Cuplikan dari file build.gradle:

dependencies { implementation platform('com.amazonaws:aws-java-sdk-bom:1.11.837') implementation 'com.amazonaws:aws-java-sdk-s3' }

Migrasi Klien Enkripsi dan Dekripsi ke V2

Setelah proyek Anda diperbarui dengan SDK versi terbaru, Anda dapat memodifikasi kode aplikasi Anda untuk menggunakan klien V2. Untuk melakukannya, pertama-tama perbarui kode Anda untuk menggunakan pembuat klien layanan baru. Kemudian berikan materi enkripsi menggunakan metode pada builder yang telah diganti namanya, dan konfigurasikan klien layanan Anda lebih lanjut sesuai kebutuhan.

Cuplikan kode ini menunjukkan cara menggunakan enkripsi sisi klien dengan AWS SDK for Java, dan memberikan perbandingan antara klien enkripsi V1 dan V2.

V1

// minimal configuration in V1; default CryptoMode.EncryptionOnly. EncryptionMaterialsProvider encryptionMaterialsProvider = ... AmazonS3Encryption encryptionClient = AmazonS3EncryptionClient.encryptionBuilder() .withEncryptionMaterials(encryptionMaterialsProvider) .build();

V2

// minimal configuration in V2; default CryptoMode.StrictAuthenticatedEncryption. EncryptionMaterialsProvider encryptionMaterialsProvider = ... AmazonS3EncryptionV2 encryptionClient = AmazonS3EncryptionClientV2.encryptionBuilder() .withEncryptionMaterialsProvider(encryptionMaterialsProvider) .withCryptoConfiguration(new CryptoConfigurationV2() // The following setting allows the client to read V1 encrypted objects .withCryptoMode(CryptoMode.AuthenticatedEncryption) ) .build();

Contoh di atas menetapkan cryptoMode keAuthenticatedEncryption. Ini adalah pengaturan yang memungkinkan klien enkripsi V2 untuk membaca objek yang telah ditulis oleh klien enkripsi V1. Jika klien Anda tidak memerlukan kemampuan untuk membaca objek yang ditulis oleh klien V1, maka sebaiknya gunakan pengaturan default StrictAuthenticatedEncryption sebagai gantinya.

Membangun Klien Enkripsi V2

Klien enkripsi V2 dapat dibangun dengan memanggil EncryptionClientAmazonS3 V2. encryptionBuilder().

Anda dapat mengganti semua klien enkripsi V1 yang ada dengan klien enkripsi V2. Klien enkripsi V2 akan selalu dapat membaca objek apa pun yang telah ditulis oleh klien enkripsi V1 selama Anda mengizinkannya melakukannya dengan mengonfigurasi klien enkripsi V2 untuk menggunakan `. AuthenticatedEncryption `cryptoMode

Membuat klien enkripsi V2 baru sangat mirip dengan cara Anda membuat klien enkripsi V1. Namun, ada beberapa perbedaan:

  • Anda akan menggunakan CryptoConfigurationV2 objek untuk mengkonfigurasi klien alih-alih CryptoConfiguration objek. Parameter ini diperlukan.

  • cryptoModePengaturan default untuk klien enkripsi V2 adalahStrictAuthenticatedEncryption. Untuk klien enkripsi V1 ituEncryptionOnly.

  • Metode withEncryptionMaterials() pada pembuat klien enkripsi telah diubah namanya menjadi withEncryptionMaterialsProvider (). Ini hanyalah perubahan kosmetik yang lebih akurat mencerminkan jenis argumen. Anda harus menggunakan metode baru ketika Anda mengkonfigurasi klien layanan Anda.

catatan

Saat mendekripsi dengan AES -GCM, baca seluruh objek sampai akhir sebelum Anda mulai menggunakan data yang didekripsi. Ini untuk memverifikasi bahwa objek belum dimodifikasi sejak dienkripsi.

Gunakan Penyedia Bahan Enkripsi

Anda dapat terus menggunakan penyedia bahan enkripsi yang sama dan objek materi enkripsi yang sudah Anda gunakan dengan klien enkripsi V1. Kelas-kelas ini bertanggung jawab untuk menyediakan kunci yang digunakan klien enkripsi untuk mengamankan data Anda. Mereka dapat digunakan secara bergantian dengan klien enkripsi V2 dan V1.

Konfigurasikan Klien Enkripsi V2

Klien enkripsi V2 dikonfigurasi dengan CryptoConfigurationV2 objek. Objek ini dapat dibangun dengan memanggil konstruktor defaultnya dan kemudian memodifikasi propertinya seperti yang diperlukan dari default.

Nilai default untuk CryptoConfigurationV2 adalah:

  • cryptoMode = CryptoMode.StrictAuthenticatedEncryption

  • storageMode = CryptoStorageMode.ObjectMetadata

  • secureRandom= contoh SecureRandom

  • rangeGetMode = CryptoRangeGetMode.DISABLED

  • unsafeUndecryptableObjectPassthrough = false

Perhatikan bahwa EncryptionOnlytidak didukung cryptoMode dalam klien enkripsi V2. Klien enkripsi V2 akan selalu mengenkripsi konten menggunakan enkripsi yang diautentikasi, dan melindungi kunci enkripsi konten (CEKs) menggunakan objek V2. KeyWrap

Contoh berikut menunjukkan cara menentukan konfigurasi kripto di V1, dan cara membuat instance objek CryptoConfigurationV2 untuk diteruskan ke pembuat klien enkripsi V2.

V1

CryptoConfiguration cryptoConfiguration = new CryptoConfiguration() .withCryptoMode(CryptoMode.StrictAuthenticatedEncryption);

V2

CryptoConfigurationV2 cryptoConfiguration = new CryptoConfigurationV2() .withCryptoMode(CryptoMode.StrictAuthenticatedEncryption);

Contoh Tambahan

Contoh berikut menunjukkan cara mengatasi kasus penggunaan tertentu yang terkait dengan migrasi dari V1 ke V2.

Konfigurasikan Klien Layanan untuk Membaca Objek yang Dibuat oleh Klien Enkripsi V1

Untuk membaca objek yang sebelumnya ditulis menggunakan klien enkripsi V1, atur cryptoMode keAuthenticatedEncryption. Cuplikan kode berikut menunjukkan bagaimana membangun objek konfigurasi dengan pengaturan ini.

CryptoConfigurationV2 cryptoConfiguration = new CryptoConfigurationV2() .withCryptoMode(CryptoMode.AuthenticatedEncryption);

Konfigurasikan Klien Layanan untuk Mendapatkan Rentang Byte Objek

Untuk get dapat berbagai byte dari objek S3 terenkripsi, aktifkan pengaturan konfigurasi baru. rangeGetMode Pengaturan ini dinonaktifkan pada klien enkripsi V2 secara default. Perhatikan bahwa bahkan ketika diaktifkan, rentang get hanya berfungsi pada objek yang telah dienkripsi menggunakan algoritme yang didukung oleh cryptoMode pengaturan klien. Untuk informasi lebih lanjut, lihat CryptoRangeGetModedi AWS SDK for Java API Referensi.

Jika Anda berencana untuk menggunakan Amazon S3 TransferManager untuk melakukan unduhan multipart dari Amazon S3 objek terenkripsi menggunakan klien enkripsi V2, maka Anda harus terlebih dahulu mengaktifkan rangeGetMode pengaturan pada klien enkripsi V2.

Cuplikan kode berikut menunjukkan cara mengkonfigurasi klien V2 untuk melakukan rentang. get

// Allows range gets using AES/CTR, for V2 encrypted objects only CryptoConfigurationV2 cryptoConfiguration = new CryptoConfigurationV2() .withRangeGetMode(CryptoRangeGetMode.ALL); // Allows range gets using AES/CTR and AES/CBC, for V1 and V2 objects CryptoConfigurationV2 cryptoConfiguration = new CryptoConfigurationV2() .withCryptoMode(CryptoMode.AuthenticatedEncryption) .withRangeGetMode(CryptoRangeGetMode.ALL);