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

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

Untuk informasi tentang melanggar perubahan dan memigrasi aplikasi Anda, lihat topik migrasi.

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

Migrasi Klien Enkripsi Amazon S3

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

Objek yang dienkripsi dengan klien V2 tidak dapat didekripsi dengan klien V1. Untuk memudahkan migrasi ke klien baru tanpa harus mengenkripsi ulang semua objek sekaligus, klien “V1-transisi” telah disediakan. Klien ini dapat mendekripsi objek terenkripsi V1- dan V2, tetapi mengenkripsi objek hanya dalam format yang kompatibel dengan V1. Klien V2 dapat mendekripsi objek terenkripsi V1- dan V2 (bila diaktifkan untuk objek V1), tetapi mengenkripsi objek hanya dalam format yang kompatibel dengan V2.

Ikhtisar Migrasi

Migrasi ini terjadi dalam tiga fase. Fase-fase ini diperkenalkan di sini dan dijelaskan secara rinci nanti. Setiap fase harus diselesaikan untuk semua klien yang menggunakan objek bersama sebelum fase berikutnya dimulai.

  1. Perbarui klien yang ada ke klien transisi V1 untuk membaca format baru. Pertama, perbarui aplikasi Anda untuk mengambil ketergantungan pada klien transisi V1 alih-alih klien V1. Klien transisi V1 memungkinkan kode Anda yang ada untuk mendekripsi objek yang ditulis oleh klien V2 baru dan objek yang ditulis dalam format yang kompatibel dengan V1.

    catatan

    Klien transisi V1 disediakan hanya untuk tujuan migrasi. Lanjutkan untuk memutakhirkan ke klien V2 setelah pindah ke klien transisi V1.

  2. Migrasikan klien transisi V1 ke klien V2 untuk menulis format baru. Selanjutnya, ganti semua klien transisi V1 di aplikasi Anda dengan klien V2, dan atur profil keamanan ke. V2AndLegacy Menyetel profil keamanan ini pada klien V2 memungkinkan klien tersebut untuk mendekripsi objek yang dienkripsi dalam format yang kompatibel dengan V1.

  3. Perbarui klien V2 agar tidak lagi membaca format V1. Akhirnya, setelah semua klien dimigrasikan ke V2 dan semua objek telah dienkripsi atau dienkripsi ulang dalam format yang kompatibel dengan V2, atur profil keamanan V2 sebagai gantinya. V2 V2AndLegacy Ini mencegah dekripsi objek yang dalam format yang kompatibel dengan V1.

Perbarui Klien yang Ada ke Klien Transisi V1 untuk Membaca Format Baru

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

Klien V1-transisi memungkinkan aplikasi Anda untuk mendekripsi objek terenkripsi V1 dan V2. Klien ini adalah bagian dari paket NuGet Amazon.Extensions.S3.Encryption. Lakukan langkah-langkah berikut pada setiap aplikasi Anda untuk menggunakan klien transisi V1.

  1. Ambil ketergantungan baru pada paket Amazon.Extensions.S3.Encryption. Jika proyek Anda bergantung langsung pada AWSSDK.S3 atau. AWSSDK KeyManagementServicepaket, Anda harus memperbarui dependensi tersebut atau menghapusnya sehingga versi yang diperbarui akan ditarik dengan paket baru ini.

  2. Ubah using pernyataan yang sesuai dari Amazon.S3.Encryption menjadiAmazon.Extensions.S3.Encryption, sebagai berikut:

    // using Amazon.S3.Encryption; using Amazon.Extensions.S3.Encryption;
  3. Membangun kembali dan menerapkan kembali aplikasi Anda.

Klien transisi V1 sepenuhnya kompatibel dengan API dengan klien V1, jadi tidak ada perubahan kode lain yang diperlukan.

Migrasikan Klien Transisi V1 ke Klien V2 untuk Menulis Format Baru

Klien V2 adalah bagian dari paket NuGet Amazon.Extensions.S3.Encryption. Ini memungkinkan aplikasi Anda untuk mendekripsi objek terenkripsi V1- dan V2 (jika dikonfigurasi untuk melakukannya), tetapi mengenkripsi objek hanya dalam format yang kompatibel dengan V2.

Setelah memperbarui klien Anda yang ada untuk membaca format enkripsi baru, Anda dapat melanjutkan untuk memperbarui aplikasi Anda dengan aman ke klien enkripsi dan dekripsi V2. Lakukan langkah-langkah berikut pada setiap aplikasi Anda untuk menggunakan klien V2:

  1. Ubah EncryptionMaterials ke EncryptionMaterialsV2.

    1. Saat menggunakan KMS:

      1. Berikan ID kunci KMS.

      2. Deklarasikan metode enkripsi yang Anda gunakan; yaitu,. KmsType.KmsContext

      3. Berikan konteks enkripsi ke KMS untuk dikaitkan dengan kunci data ini. Anda dapat mengirim kamus kosong (konteks enkripsi Amazon masih akan digabungkan), tetapi memberikan konteks tambahan dianjurkan.

    2. Saat menggunakan metode pembungkus kunci yang disediakan pengguna (enkripsi simetris atau asimetris):

      1. Menyediakan AES atau RSA contoh yang berisi materi enkripsi.

      2. Deklarasikan algoritma enkripsi mana yang akan digunakan; yaitu, SymmetricAlgorithmType.AesGcm atau. AsymmetricAlgorithmType.RsaOaepSha1

  2. Ubah AmazonS3CryptoConfiguration ke AmazonS3CryptoConfigurationV2 dengan SecurityProfile properti disetel keSecurityProfile.V2AndLegacy.

  3. Ubah AmazonS3EncryptionClient ke AmazonS3EncryptionClientV2. Klien ini mengambil yang baru dikonversi AmazonS3CryptoConfigurationV2 dan EncryptionMaterialsV2 objek dari langkah sebelumnya.

Contoh: Konteks KMS ke KMS +

Pra-migrasi

using System.Security.Cryptography; using Amazon.S3.Encryption; var encryptionMaterial = new EncryptionMaterials("1234abcd-12ab-34cd-56ef-1234567890ab"); var configuration = new AmazonS3CryptoConfiguration() { StorageMode = CryptoStorageMode.ObjectMetadata }; var encryptionClient = new AmazonS3EncryptionClient(configuration, encryptionMaterial);

Pasca-migrasi

using System.Security.Cryptography; using Amazon.Extensions.S3.Encryption; using Amazon.Extensions.S3.Encryption.Primitives; var encryptionContext = new Dictionary<string, string>(); var encryptionMaterial = new EncryptionMaterialsV2("1234abcd-12ab-34cd-56ef-1234567890ab", KmsType.KmsContext, encryptionContext); var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy) { StorageMode = CryptoStorageMode.ObjectMetadata }; var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);

Contoh: Algoritma Simetris (AES-CBC ke AES-GCM Key Wrap)

StorageModebisa salah satu ObjectMetadata atauInstructionFile.

Pra-migrasi

using System.Security.Cryptography; using Amazon.S3.Encryption; var symmetricAlgorithm = Aes.Create(); var encryptionMaterial = new EncryptionMaterials(symmetricAlgorithm); var configuration = new AmazonS3CryptoConfiguration() { StorageMode = CryptoStorageMode.ObjectMetadata }; var encryptionClient = new AmazonS3EncryptionClient(configuration, encryptionMaterial);

Pasca-migrasi

using System.Security.Cryptography; using Amazon.Extensions.S3.Encryption; using Amazon.Extensions.S3.Encryption.Primitives; var symmetricAlgorithm = Aes.Create(); var encryptionMaterial = new EncryptionMaterialsV2(symmetricAlgorithm, SymmetricAlgorithmType.AesGcm); var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy) { StorageMode = CryptoStorageMode.ObjectMetadata }; var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);
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.

Contoh: Algoritma Asimetris (RSA ke RSA-OAEP-SHA 1 Key Wrap)

StorageModebisa salah satu ObjectMetadata atauInstructionFile.

Pra-migrasi

using System.Security.Cryptography; using Amazon.S3.Encryption; var asymmetricAlgorithm = RSA.Create(); var encryptionMaterial = new EncryptionMaterials(asymmetricAlgorithm); var configuration = new AmazonS3CryptoConfiguration() { StorageMode = CryptoStorageMode.ObjectMetadata }; var encryptionClient = new AmazonS3EncryptionClient(configuration, encryptionMaterial);

Pasca-migrasi

using System.Security.Cryptography; using Amazon.Extensions.S3.Encryption; using Amazon.Extensions.S3.Encryption.Primitives; var asymmetricAlgorithm = RSA.Create(); var encryptionMaterial = new EncryptionMaterialsV2(asymmetricAlgorithm, AsymmetricAlgorithmType.RsaOaepSha1); var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy) { StorageMode = CryptoStorageMode.ObjectMetadata }; var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);

Perbarui Klien V2 agar Tidak Lagi Membaca Format V1

Akhirnya, semua objek akan dienkripsi atau dienkripsi ulang menggunakan klien V2. Setelah konversi ini selesai, Anda dapat menonaktifkan kompatibilitas V1 di klien V2 dengan menyetel SecurityProfile properti keSecurityProfile.V2, seperti yang ditunjukkan pada cuplikan berikut.

//var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy); var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2);