View a markdown version of this page

Migrasi Klien Enkripsi S3 (V2 ke V4) - AWS SDK untuk .NET (V4)

Versi 4 (V4) AWS SDK untuk .NET telah dirilis!

Untuk informasi tentang mengubah perubahan dan memigrasikan aplikasi Anda, lihat topik https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html migrasi.

Orange button with text "Click here for details".

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

Migrasi Klien Enkripsi S3 (V2 ke V4)

catatan

Jika Anda menggunakan V1 dan ingin bermigrasi ke V4, Anda harus terlebih dahulu bermigrasi ke V2. Lihat Migrasi Klien Enkripsi S3 (V1 ke V2).

Topik ini menunjukkan cara memigrasi aplikasi Anda dari versi 2 (V2) klien enkripsi Amazon Simple Storage Service (S3) ke Versi 4 (V4), dan memastikan ketersediaan aplikasi selama proses migrasi. V4 menggunakan AES-GCM komitmen kunci untuk enkripsi konten dan memperkenalkan Kebijakan Komitmen untuk meningkatkan keamanan terhadap serangan substitusi kunci.

Klien V4 tersedia dalam Amazon.Extensions.S3.Encryption NuGet paket.

penting

Perubahan Melanggar: Kli en V4 yang dikonfigurasi dengan RequireEncryptRequireDecrypt kebijakan tidak dapat mendekripsi objek yang dienkripsi dengan klien V1 atau V2. Hanya klien V2 terbaru yang dapat mendekripsi V4-encrypted objek dengan komitmen utama. Sebelum beralih ke RequireEncryptRequireDecrypt kebijakan, Anda harus mengenkripsi ulang semua data yang ada menggunakan klien V4 dengan komitmen kunci diaktifkan.

Memahami Konsep V4

V4 menggunakan AES-GCM dengan komitmen kunci untuk enkripsi konten dan memperkenalkan konsep keamanan utama yang meningkatkan perlindungan data terenkripsi Anda:

Kebijakan Komitmen

Kebijakan Komitmen mengontrol bagaimana klien enkripsi menangani komitmen kunci selama operasi enkripsi dan dekripsi. V4 mendukung tiga kebijakan komitmen:

ForbidEncryptAllowDecrypt

Enkripsi: Tanpa komitmen

Dekripsi: Mem ungkinkan objek yang tidak berkomitmen

Keamanan: Tidak menegakkan komitmen dan dapat mengizinkan gangguan

Kompatibilitas: Semua implementasi V2 dan V4 dapat membaca objek yang dienkripsi dengan kebijakan ini

RequireEncryptAllowDecrypt

Enkripsi: Dengan komitmen kunci

Dekripsi: Mem ungkinkan objek yang melakukan dan tidak berkomitmen

Keamanan: Ob jek baru dilindungi terhadap serangan substitusi kunci, objek lama masih dapat dibaca

Kompatibilitas: Hanya V4 yang mendukung kebijakan ini

RequireEncryptRequireDecrypt(Standar untuk V4)

Enkripsi: Dengan komitmen kunci

Dekripsi: Hanya melakukan objek

Keamanan: Penegakan komitmen penuh untuk keamanan maksimum

Kompatibilitas: Hanya V4 yang mendukung kebijakan ini

AES GCM dengan Komitmen Utama

V4 menggunakan AES-GCM dengan komitmen kunci untuk enkripsi konten, yang memberikan keamanan yang ditingkatkan:

  • Perlindungan Kerusakan: Ini melindungi terhadap serangan substitusi kunci dengan mengikat kunci secara kriptografis ke data terenkripsi.

  • Kompatibilitas Versi: Ob jek yang dienkripsi dengan komitmen kunci hanya dapat didekripsi oleh klien V4 dan versi yang lebih baru.

Awas

Sebelum mengaktifkan enkripsi komitmen kunci dalam produksi, pastikan bahwa semua aplikasi yang perlu mendekripsi objek Anda telah ditingkatkan ke V4 atau yang lebih baru karena klien V2 tidak digunakan lagi.

Perbarui Klien yang Ada untuk Membaca Format V4

Klien enkripsi V4 menggunakan algoritma enkripsi yang tidak didukung oleh versi lama klien. Langkah pertama dalam migrasi adalah memperbarui klien V2 Anda sehingga mereka dapat membaca format V4 baru.

Perbarui Dependensi NuGet Paket

Perbarui aplikasi Anda untuk menggunakan versi terbaru dari Amazon.Extensions.S3.Encryption NuGet paket yang menyertakan dukungan V4. Lakukan langkah-langkah berikut pada setiap aplikasi Anda:

  1. Perbarui ke Amazon.Extensions.S3.Encryption paket terbaru. Jika proyek Anda bergantung langsung pada AWSSDK.KeyManagementService paket AWSSDK.S3 or, Anda harus memperbarui dependensi tersebut atau menghapusnya sehingga versi yang diperbarui akan ditarik dengan paket baru ini.

  2. Pastikan using pernyataan Anda mereferensikan namespace yang benar:

    using Amazon.Extensions.S3.Encryption; using Amazon.Extensions.S3.Encryption.Primitives;
  3. Bangun kembali dan gunakan kembali aplikasi Anda.

Klien V2 Anda yang ada akan terus bekerja dengan paket yang diperbarui dan akan dapat mendekripsi objek yang dienkripsi oleh klien V4 (tergantung pada kebijakan komitmen yang digunakan).

Membangun dan Menyebarkan Aplikasi

Setelah memperbarui dependensi NuGet paket Anda:

  1. Bangun aplikasi Anda untuk memastikan semua dependensi diselesaikan dengan benar.

  2. Uji aplikasi Anda di lingkungan pengembangan untuk memverifikasi bahwa fungsionalitas yang ada terus berfungsi.

  3. Terapkan aplikasi yang diperbarui ke lingkungan produksi Anda.

Pembaruan ini memungkinkan klien V2 Anda yang ada untuk mendekripsi objek yang akan dienkripsi oleh klien V4, memastikan kompatibilitas selama proses migrasi.

Bermigrasi ke Klien V4

Setelah memperbarui klien Anda yang ada untuk membaca format enkripsi baru, Anda dapat melanjutkan untuk memperbarui aplikasi Anda dengan aman untuk menggunakan klien enkripsi dan dekripsi V4. Klien V4 memberikan keamanan yang ditingkatkan melalui komitmen kunci sambil mempertahankan kompatibilitas dengan objek terenkripsi yang ada.

Proses Migrasi 4 Langkah

Migrasi dari V2 ke V4 mengikuti proses 4 langkah terstruktur untuk memastikan kompatibilitas dan keamanan. Setiap langkah mewakili konfigurasi tertentu yang harus diterapkan di semua aplikasi Anda sebelum melanjutkan ke langkah berikutnya.

  1. Langkah 0: Klien V2 (Titik Awal) - Implementasi V2 Anda yang ada

  2. Langkah 1: V4 dengan Kompatibilitas V2 - Bermigrasi ke klien V4 sambil mempertahankan perilaku V2-compatible enkripsi

  3. Langkah 2: V4 dengan Key Commitment Writes - Mulai mengenkripsi dengan komitmen kunci sambil mengizinkan dekripsi objek lama

  4. Langkah 3: V4 dengan Penegakan Penuh - Memerlukan komitmen kunci untuk enkripsi dan dekripsi

Langkah 0: Klien V2 (Titik Awal)

Ini mewakili konfigurasi klien V2 Anda yang ada. Langkah ini menunjukkan status awal sebelum migrasi.

using Amazon.Extensions.S3.Encryption; using Amazon.Extensions.S3.Encryption.Primitives; using Amazon.S3.Model; // Step 0: V2 Client - Starting configuration var encryptionContext = new Dictionary<string, string>(); var encryptionMaterial = new EncryptionMaterialsV2(kmsKeyId, KmsType.KmsContext, encryptionContext); #pragma warning disable 0618 var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2); #pragma warning enable 0618 var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial); // Use the client for PutObject and GetObject operations await encryptionClient.PutObjectAsync(new PutObjectRequest { BucketName = bucket, Key = objectKey, ContentBody = content });

Langkah 1: V4 dengan Kompatibilitas V2

Bermigrasi ke klien V4 sambil mempertahankan perilaku yang identik dengan V2. Langkah ini menggunakan ForbidEncryptAllowDecrypt kebijakan untuk mengenkripsi tanpa komitmen dan memungkinkan dekripsi semua objek.

using Amazon.Extensions.S3.Encryption; using Amazon.Extensions.S3.Encryption.Primitives; using Amazon.S3.Model; // Step 1: V4 Client with V2 compatibility var encryptionContext = new Dictionary<string, string>(); var encryptionMaterial = new EncryptionMaterialsV4(kmsKeyId, KmsType.KmsContext, encryptionContext); var configuration = new AmazonS3CryptoConfigurationV4( SecurityProfile.V4, CommitmentPolicy.ForbidEncryptAllowDecrypt, ContentEncryptionAlgorithm.AesGcm); var encryptionClient = new AmazonS3EncryptionClientV4(configuration, encryptionMaterial); // Use the client for PutObject and GetObject operations await encryptionClient.PutObjectAsync(new PutObjectRequest { BucketName = bucket, Key = objectKey, ContentBody = content });

Perilaku: Mengenkripsi tanpa komitmen, dapat mendekripsi objek yang berkomitmen dan tidak berkomitmen. Identik dengan perilaku V2.

Langkah 2: V4 dengan Penulisan Komitmen Utama

Mulai mengenkripsi dengan komitmen kunci sambil mempertahankan kompatibilitas mundur untuk dekripsi. Langkah ini menggunakan RequireEncryptAllowDecrypt kebijakan.

Awas

Sebelum menerapkan Langkah 2, pastikan semua pembaca telah diperbarui ke Langkah 1 atau yang lebih baru untuk menangani enkripsi komitmen kunci.

using Amazon.Extensions.S3.Encryption; using Amazon.Extensions.S3.Encryption.Primitives; using Amazon.S3.Model; // Step 2: V4 Client with key commitment writes var encryptionContext = new Dictionary<string, string>(); var encryptionMaterial = new EncryptionMaterialsV4(kmsKeyId, KmsType.KmsContext, encryptionContext); var configuration = new AmazonS3CryptoConfigurationV4( SecurityProfile.V4, CommitmentPolicy.RequireEncryptAllowDecrypt, ContentEncryptionAlgorithm.AesGcmWithCommitment); var encryptionClient = new AmazonS3EncryptionClientV4(configuration, encryptionMaterial); // Use the client for PutObject and GetObject operations await encryptionClient.PutObjectAsync(new PutObjectRequest { BucketName = bucket, Key = objectKey, ContentBody = content });

Perilaku: Mengenkripsi dengan komitmen, dapat mendekripsi objek yang berkomitmen dan tidak berkomitmen. Objek baru dilindungi terhadap serangan substitusi kunci.

Langkah 3: V4 dengan Penegakan Penuh

Memerlukan komitmen kunci untuk enkripsi dan dekripsi. Langkah ini menggunakan RequireEncryptRequireDecrypt kebijakan untuk keamanan maksimum.

Awas

Sebelum menerapkan Langkah 3, pastikan semua objek di sistem Anda telah dienkripsi ulang dengan komitmen kunci (Langkah 2). Langkah ini akan gagal mendekripsi objek yang dienkripsi tanpa komitmen.

using Amazon.Extensions.S3.Encryption; using Amazon.Extensions.S3.Encryption.Primitives; using Amazon.S3.Model; // Step 3: V4 Client with full key commitment enforcement var encryptionContext = new Dictionary<string, string>(); var encryptionMaterial = new EncryptionMaterialsV4(kmsKeyId, KmsType.KmsContext, encryptionContext); var configuration = new AmazonS3CryptoConfigurationV4( SecurityProfile.V4, CommitmentPolicy.RequireEncryptRequireDecrypt, ContentEncryptionAlgorithm.AesGcmWithCommitment); var encryptionClient = new AmazonS3EncryptionClientV4(configuration, encryptionMaterial); // Use the client for PutObject and GetObject operations await encryptionClient.PutObjectAsync(new PutObjectRequest { BucketName = bucket, Key = objectKey, ContentBody = content });

Perilaku: Mengenkripsi dengan komitmen, hanya mendekripsi objek yang dienkripsi dengan komitmen. Keamanan maksimum terhadap serangan substitusi kunci.

Contoh Konfigurasi Tambahan

Bagian ini memberikan contoh tambahan untuk mengonfigurasi klien V4 dengan opsi yang berbeda selama migrasi.

Mengaktifkan Dukungan Legacy

Untuk mengaktifkan klien V4 membaca objek yang dienkripsi oleh klien V1 dan V2, konfigurasikan klien dengan kebijakan komitmen yang memungkinkan dekripsi lama:

using Amazon.Extensions.S3.Encryption; using Amazon.Extensions.S3.Encryption.Primitives; // Configure V4 client to read V1/V2 objects var configuration = new AmazonS3CryptoConfigurationV4(SecurityProfile.V4AndLegacy, CommitmentPolicy.RequireEncryptAllowDecrypt) { StorageMode = CryptoStorageMode.ObjectMetadata }; // This configuration allows: // - Encryption: With commitment (secure) // - Decryption: Both V2 (non-committing) and V4 (committing) objects

Gunakan konfigurasi ini selama migrasi saat Anda perlu mendekripsi objek yang dienkripsi oleh klien lama sambil memastikan objek baru dienkripsi dengan keamanan yang ditingkatkan.

Mengkonfigurasi Metode Penyimpanan

V4 mendukung dua metode penyimpanan untuk metadata enkripsi. Pilih metode yang paling sesuai dengan kasus penggunaan Anda:

Metadata Objek (Default)

var configuration = new AmazonS3CryptoConfigurationV4(SecurityProfile.V4, CommitmentPolicy.RequireEncryptAllowDecrypt) { StorageMode = CryptoStorageMode.ObjectMetadata }; // Encryption metadata is stored in S3 object metadata

File Instruksi

var configuration = new AmazonS3CryptoConfigurationV4(SecurityProfile.V4, CommitmentPolicy.RequireEncryptAllowDecrypt) { StorageMode = CryptoStorageMode.InstructionFile }; // Encryption metadata is stored in a separate S3 object (instruction file)

Gunakan InstructionFile saat Anda perlu menyimpan metadata objek untuk tujuan lain atau saat bekerja dengan objek yang memiliki batasan ukuran metadata.

Mengkonfigurasi Kebijakan Komitmen

Pilih kebijakan komitmen yang sesuai berdasarkan persyaratan keamanan dan fase migrasi Anda:

Fase Migrasi (Kompatibilitas V2)

// For migration: encrypt without commitment, allow all decryption var migrationConfig = new AmazonS3CryptoConfigurationV4(SecurityProfile.V4, CommitmentPolicy.ForbidEncryptAllowDecrypt);

Fase Transisi (Direkomendasikan)

// For transition: encrypt with commitment, allow legacy decryption var transitionConfig = new AmazonS3CryptoConfigurationV4(SecurityProfile.V4, CommitmentPolicy.RequireEncryptAllowDecrypt);

Fase Keamanan Penuh

// For maximum security: require commitment for both encryption and decryption var secureConfig = new AmazonS3CryptoConfigurationV4(SecurityProfile.V4, CommitmentPolicy.RequireEncryptRequireDecrypt);

Mulailah dengan ForbidEncryptAllowDecrypt selama migrasi awal, pindah ke RequireEncryptAllowDecrypt fase transisi, dan akhirnya gunakan RequireEncryptRequireDecrypt ketika semua klien telah ditingkatkan dan semua objek telah dienkripsi ulang dengan komitmen.