

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)
<a name="s3-encryption-migration-v1-v2"></a>

**catatan**  
Jika Anda menggunakan V2 dari klien enkripsi S3 dan ingin bermigrasi ke V3, lihat. [Migrasi Klien Enkripsi Amazon S3 (V2 ke V3)](s3-encryption-migration-v2-v3.md)

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.

## Ikhtisar Migrasi
<a name="migration-overview-v1-v2"></a>

Migrasi ini terjadi dalam dua fase:

1. **Perbarui klien yang ada untuk membaca format baru.** Pertama, gunakan versi terbaru AWS SDK for 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 SDKs, Anda harus memutakhirkan setiap SDK secara terpisah.

2. **Migrasikan enkripsi dan dekripsi klien 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
<a name="update-existing-clients-to-read-new-formats-v1-v2"></a>

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 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 for Ruby.

### Perbarui AWS SDK for Ruby Versi 3
<a name="update-aws-sdk-for-ruby-version-3-v1-v2"></a>

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

 **Menginstal dari baris perintah** 

Untuk proyek yang menginstal `aws-sdk-s3` permata, 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 `aws-sdk-s3` permata ke 1.76.0. Contoh:

```
gem 'aws-sdk-s3', '>= 1.76.0'
```

1. Ubah Gemfile Anda.

1. Jalankan `bundle update aws-sdk-s3`. Untuk memverifikasi versi Anda, jalankan`bundle info aws-sdk-s3`.

### Upgrade AWS SDK for Ruby Versi 2
<a name="upgdate-aws-sdk-for-ruby-version-2-v1-v2"></a>

Versi 2 AWS SDK for Ruby [akan memasuki](https://aws.amazon.com/blogs/developer/deprecation-schedule-for-aws-sdk-for-ruby-v2/) 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` permata, 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 `aws-sdk` permata ke 2.11.562. Contoh:

```
gem 'aws-sdk', '>= 2.11.562'
```

1. Ubah Gemfile Anda. Jika Anda memiliki file Gemfile.lock, hapus atau perbarui.

1. Jalankan `bundle update aws-sdk`. Untuk memverifikasi versi Anda, jalankan`bundle info aws-sdk`.

## Migrasi Klien Enkripsi dan Dekripsi ke V2
<a name="migrate-encryption-and-decryption-clients-to-v2-v1-v2"></a>

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` permata 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
<a name="configuring-v2-encryption-clients-v1-v2"></a>

*EncryptionV2: :Client* membutuhkan konfigurasi tambahan. Untuk informasi konfigurasi terperinci, lihat [dokumentasi EncryptionV2: :Client](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/EncryptionV2/Client.html#initialize-instance_method) atau contoh yang diberikan nanti dalam topik ini.

1. **Metode pembungkus kunci dan algoritma enkripsi konten harus ditentukan pada konstruksi klien.** Saat membuat yang baru`EncryptionV2::Client`, Anda perlu memberikan nilai untuk `key_wrap_schema` dan`content_encryption_schema`.

 `key_wrap_schema`- Jika Anda menggunakan AWS KMS, ini harus diatur ke`:kms_context`. Jika Anda menggunakan kunci simetris (AES), itu harus diatur ke. `:aes_gcm` Jika Anda menggunakan kunci asimetris (RSA), itu harus diatur 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 baru`EncryptionV2::Client`, Anda perlu memberikan nilai untuk`security_profile`. Parameter *security\_profile* menentukan dukungan untuk membaca objek yang ditulis menggunakan V1 yang lebih lama. `Encryption::Client` **Ada dua nilai ::v2 dan:v2\_and\_legacy.** *Untuk mendukung migrasi, atur `security_profile` ke:v2\_and\_legacy.* Gunakan: v2 *hanya* untuk pengembangan aplikasi baru.

3. **AWS KMS key ID diberlakukan secara default.** Di V1`Encryption::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 gumpalan ciphertext simetris. Di V2, E`nCryptionv2: :Client`, *kms\_key\_id* diteruskan ke panggilan AWS KMS Dekripsi, dan panggilan gagal jika tidak cocok dengan kunci yang digunakan untuk mengenkripsi objek. Jika kode Anda sebelumnya mengandalkan tidak menyetel yang spesifik`kms_key_id`, setel `kms_key_id: :kms_allow_decrypt_with_any_cmk` pada pembuatan klien atau setel `kms_allow_decrypt_with_any_cmk: true` `get_object` panggilan.

### Contoh: Menggunakan Kunci Symmetric (AES)
<a name="example-using-a-symmetric-aes-key-v1-v2"></a>

 **Pra-migrasi** 

```
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)
```

 **Pasca-migrasi** 

```
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
<a name="example-using-aws-kms-with-kms-key-id-v1-v2"></a>

 **Pra-migrasi** 

```
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)
```

 **Pasca-migrasi** 

```
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
<a name="example-using-aws-kms-without-kms-key-id-v1-v2"></a>

 **Pra-migrasi** 

```
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)
```

 **Pasca-migrasi** 

```
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
```

 **Alternatif Pasca Migrasi** 

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
```