View a markdown version of this page

Migrasi Klien Enkripsi Amazon S3 (V1 ke V2) - AWS SDK untuk Ruby

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 (V1 ke V2)

catatan

Jika Anda menggunakan V2 dari klien enkripsi S3 dan ingin bermigrasi ke V3, lihatMigrasi Klien Enkripsi Amazon S3 (V2 ke V3).

Topik ini menunjukkan cara memigrasi 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.

Ikhtisar Migrasi

Migrasi ini terjadi dalam dua fase:

1. Perbarui klien yang ada untuk membaca format baru. Pertama, terapkan versi terbaru AWS SDK untuk Ruby ke aplikasi Anda. Ini akan memungkinkan klien enkripsi V1 yang ada untuk mendekripsi objek yang ditulis oleh klien V2 baru. Jika aplikasi Anda menggunakan beberapa AWS SDK, Anda harus memutakhirkan setiap SDK secara terpisah.

2. Migrasikan klien enkripsi dan dekripsi ke V2. Setelah semua klien enkripsi V1 Anda dapat membaca format baru, Anda dapat memigrasikan klien enkripsi dan dekripsi yang ada ke versi V2 masing-masing.

Perbarui Klien yang Ada untuk Membaca Format Baru

Klien enkripsi V2 menggunakan algoritma enkripsi yang tidak didukung oleh versi lama klien. Langkah pertama dalam migrasi adalah memperbarui klien dekripsi V1 Anda ke rilis SDK terbaru. Setelah menyelesaikan langkah ini, klien V1 aplikasi Anda akan dapat mendekripsi objek yang dienkripsi oleh klien enkripsi V2. Lihat detail di bawah untuk setiap versi utama AWS SDK untuk Ruby.

Perbarui AWS SDK untuk Ruby Versi 3

Versi 3 adalah versi terbaru dari AWS SDK Untuk Ruby. Untuk menyelesaikan migrasi ini, Anda perlu menggunakan versi 1.76.0 atau yang lebih baru dari aws-sdk-s3 permata.

Menginstal dari Baris Perintah

Untuk proyek yang menginstal aws-sdk-s3 gem, gunakan opsi versi untuk memverifikasi bahwa versi minimum 1.76.0 diinstal.

gem install aws-sdk-s3 -v '>= 1.76.0'

Menggunakan Gemfiles

Untuk proyek yang menggunakan Gemfile untuk mengelola dependensi, atur versi minimum per aws-sdk-s3 mata ke 1.76.0. Contoh:

gem 'aws-sdk-s3', '>= 1.76.0'
  1. Ubah Gemfile Anda.

  2. Jalankan bundle update aws-sdk-s3. Untuk memverifikasi versi Anda, jalankanbundle info aws-sdk-s3.

Peningkatan AWS SDK untuk Ruby Versi 2

Versi 2 AWS SDK untuk Ruby akan memasuki mode pemeliharaan pada 21 November 2021. Untuk menyelesaikan migrasi ini, Anda perlu menggunakan permata aws-sdk versi 2.11.562 atau yang lebih baru.

Menginstal dari Baris Perintah

Untuk proyek yang menginstal aws-sdk gem, dari baris perintah, gunakan opsi versi untuk memverifikasi bahwa versi minimum 2.11.562 diinstal.

gem install aws-sdk -v '>= 2.11.562'

Menggunakan Gemfiles

Untuk proyek yang menggunakan Gemfile untuk mengelola dependensi, atur versi minimum per aws-sdk mata ke 2.11.562. Contoh:

gem 'aws-sdk', '>= 2.11.562'
  1. Ubah Gemfile Anda. Jika Anda memiliki Gemfile.lock file, hapus atau perbarui.

  2. Jalankan bundle update aws-sdk. Untuk memverifikasi versi Anda, jalankanbundle info aws-sdk.

Migrasikan Klien Enkripsi dan Dekripsi ke V2

Setelah memperbarui klien Anda untuk membaca format enkripsi baru, Anda dapat memperbarui aplikasi Anda ke klien enkripsi dan dekripsi V2. Langkah-langkah berikut menunjukkan cara berhasil memigrasikan kode Anda dari V1 ke V2.

Sebelum memperbarui kode Anda untuk menggunakan klien enkripsi V2, pastikan Anda telah mengikuti langkah-langkah sebelumnya dan menggunakan aws-sdk-s3 gem versi 2.11.562 atau yang lebih baru.

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.

Mengkonfigurasi Klien Enkripsi V2

EncryptionV2: :Client memerlukan konfigurasi tambahan. Untuk informasi konfigurasi terperinci, lihat dokumentasi EncryptionV2: :Client atau contoh yang diberikan nanti dalam topik ini.

1. Metode pembungkus kunci dan algoritma enkripsi konten harus ditentukan pada konstruksi klien. Saat membuat yang baruEncryptionV2::Client, Anda perlu memberikan nilai untuk key_wrap_schema dancontent_encryption_schema.

key_wrap_schema- Jika Anda menggunakan AWS KMS, ini harus disetel ke:kms_context. Jika Anda menggunakan kunci simetris (AES), itu harus disetel ke. :aes_gcm Jika Anda menggunakan kunci asimetris (RSA), itu harus disetel ke:rsa_oaep_sha1.

content_encryption_schema- Ini harus diatur ke:aes_gcm_no_padding.

2. security_profile harus ditentukan pada konstruksi klien. Saat membuat yang baruEncryptionV2::Client, Anda perlu memberikan nilai untuksecurity_profile. Parameter security_profile menentukan dukungan untuk membaca objek yang ditulis menggunakan V1 yang lebih lama. Encryption::Client Ada dua nilai: :v2 dan:v 2_and_legacy. Untuk mendukung migrasi, atur ke security_profile :v2_and_legacy. Gunakan: v2 hanya untuk pengembangan aplikasi baru.

3. AWS KMS key ID diberlakukan secara default. Di V1Encryption::Client,, yang kms_key_id digunakan untuk membuat klien tidak diberikan kepada AWS KMS Decrypt call. AWS KMS bisa mendapatkan informasi ini dari metadata dan menambahkannya ke blob ciphertext simetris. Di V2, E`ncryptionV2: :Client`, kms_key_id diteruskan ke panggilan Decrypt, dan panggilan gagal jika tidak AWS KMS cocok dengan kunci yang digunakan untuk mengenkripsi objek. Jika kode Anda sebelumnya mengandalkan tidak menyetel yang spesifikkms_key_id, atur kms_key_id: :kms_allow_decrypt_with_any_cmk pada pembuatan klien atau setel kms_allow_decrypt_with_any_cmk: true pada get_object panggilan.

Contoh: Menggunakan Kunci Simetris (AES)

Pre-migration

client = Aws::S3::Encryption::Client.new(encryption_key: aes_key) client.put_object(bucket: bucket, key: key, body: secret_data) resp = client.get_object(bucket: bucket, key: key)

Post-migration

client = Aws::S3::EncryptionV2::Client.new( encryption_key: rsa_key, key_wrap_schema: :rsa_oaep_sha1, # the key_wrap_schema must be rsa_oaep_sha1 for asymmetric keys content_encryption_schema: :aes_gcm_no_padding, security_profile: :v2_and_legacy # to allow reading/decrypting objects encrypted by the V1 encryption client ) client.put_object(bucket: bucket, key: key, body: secret_data) # No changes resp = client.get_object(bucket: bucket, key: key) # No changes

Contoh: Menggunakan AWS KMS dengan kms_key_id

Pre-migration

client = Aws::S3::Encryption::Client.new(kms_key_id: kms_key_id) client.put_object(bucket: bucket, key: key, body: secret_data) resp = client.get_object(bucket: bucket, key: key)

Post-migration

client = Aws::S3::EncryptionV2::Client.new( kms_key_id: kms_key_id, key_wrap_schema: :kms_context, # the key_wrap_schema must be kms_context for KMS keys content_encryption_schema: :aes_gcm_no_padding, security_profile: :v2_and_legacy # to allow reading/decrypting objects encrypted by the V1 encryption client ) client.put_object(bucket: bucket, key: key, body: secret_data) # No changes resp = client.get_object(bucket: bucket, key: key) # No change

Contoh: Menggunakan AWS KMS tanpa kms_key_id

Pre-migration

client = Aws::S3::Encryption::Client.new(kms_key_id: kms_key_id) client.put_object(bucket: bucket, key: key, body: secret_data) resp = client.get_object(bucket: bucket, key: key)

Post-migration

client = Aws::S3::EncryptionV2::Client.new( kms_key_id: kms_key_id, key_wrap_schema: :kms_context, # the key_wrap_schema must be kms_context for KMS keys content_encryption_schema: :aes_gcm_no_padding, security_profile: :v2_and_legacy # to allow reading/decrypting objects encrypted by the V1 encryption client ) client.put_object(bucket: bucket, key: key, body: secret_data) # No changes resp = client.get_object(bucket: bucket, key: key, kms_allow_decrypt_with_any_cmk: true) # To allow decrypting with any cmk

Post-Migration Alternatif

Jika Anda hanya membaca dan mendekripsi (tidak pernah menulis dan mengenkripsi) objek menggunakan klien enkripsi S2, gunakan kode ini.

client = Aws::S3::EncryptionV2::Client.new( kms_key_id: :kms_allow_decrypt_with_any_cmk, # set kms_key_id to allow all get_object requests to use any cmk key_wrap_schema: :kms_context, # the key_wrap_schema must be kms_context for KMS keys content_encryption_schema: :aes_gcm_no_padding, security_profile: :v2_and_legacy # to allow reading/decrypting objects encrypted by the V1 encryption client ) resp = client.get_object(bucket: bucket, key: key) # No change