

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

# Memecahkan masalah migrasi ke versi terbaru
<a name="troubleshooting-migration"></a>

Sebelum memperbarui aplikasi Anda ke versi 2.0. *x* atau yang lebih baru AWS Encryption SDK, perbarui ke yang terbaru 1. *x* versi AWS Encryption SDK dan terapkan sepenuhnya. Itu akan membantu Anda menghindari sebagian besar kesalahan yang mungkin Anda temui saat memperbarui ke versi 2.0. *x* dan kemudian. Untuk panduan terperinci, termasuk contoh, lihat[Migrasi Anda AWS Encryption SDK](migration.md).

**penting**  
Verifikasi bahwa terbaru Anda 1. Versi *x* adalah versi 1.7. *x* atau yang lebih baru AWS Encryption SDK.

**catatan**  
**AWS Enkripsi CLI**: Referensi dalam panduan ini ke versi 1.7. *x* AWS Encryption SDK berlaku untuk versi 1.8. *x* dari CLI AWS Enkripsi. Referensi dalam panduan ini ke versi 2.0. *x* dari AWS Encryption SDK berlaku untuk 2.1. *x* dari CLI AWS Enkripsi.  
Fitur keamanan baru awalnya dirilis dalam AWS Enkripsi CLI versi 1.7. *x* dan 2.0. *x*. Namun, AWS Enkripsi CLI versi 1.8. *x* menggantikan versi 1.7. *x* dan AWS Enkripsi CLI 2.1. *x* menggantikan 2.0. *x*. Untuk detailnya, lihat [penasihat keamanan](https://github.com/aws/aws-encryption-sdk-cli/security/advisories/GHSA-2xwp-m7mq-7q3r) yang relevan di [aws-encryption-sdk-cli](https://github.com/aws/aws-encryption-sdk-cli/)repositori di. GitHub

Topik ini dirancang untuk membantu Anda mengenali dan mengatasi kesalahan paling umum yang mungkin Anda temui.

**Topics**
+ [Objek yang tidak digunakan lagi atau dihapus](#deprecated-removed)
+ [Konflik konfigurasi: Kebijakan komitmen dan rangkaian algoritme](#configuration-conflict_1)
+ [Konflik konfigurasi: Kebijakan komitmen dan ciphertext](#configuration-conflict_2)
+ [Validasi komitmen utama gagal](#commitment-failed)
+ [Kegagalan enkripsi lainnya](#encrypt-failed)
+ [Kegagalan dekripsi lainnya](#decrypt-failed)
+ [Pertimbangan rollback](#migration-rollback)

## Objek yang tidak digunakan lagi atau dihapus
<a name="deprecated-removed"></a>

Versi 2.0. *x* mencakup beberapa perubahan yang melanggar, termasuk menghapus konstruktor lama, metode, fungsi, dan kelas yang tidak digunakan lagi di versi 1.7. *x*. Untuk menghindari kesalahan kompiler, kesalahan impor, kesalahan sintaks, dan kesalahan simbol tidak ditemukan (tergantung pada bahasa pemrograman Anda), tingkatkan terlebih dahulu ke yang terbaru 1. *x* versi AWS Encryption SDK untuk bahasa pemrograman Anda. (Ini harus versi 1.7. *x* atau yang lebih baru.) Saat menggunakan yang terbaru 1. *x* versi, Anda dapat mulai menggunakan elemen pengganti sebelum simbol asli dihapus.

Jika Anda perlu meng-upgrade ke versi 2.0. *x* atau yang lebih baru segera, [konsultasikan changelog](about-versions.md) untuk bahasa pemrograman Anda, dan ganti simbol warisan dengan simbol yang direkomendasikan changelog.

## Konflik konfigurasi: Kebijakan komitmen dan rangkaian algoritme
<a name="configuration-conflict_1"></a>

Jika Anda menentukan rangkaian algoritme yang bertentangan dengan [kebijakan komitmen](concepts.md#commitment-policy) Anda, panggilan untuk mengenkripsi gagal dengan kesalahan *konflik Konfigurasi*.

Untuk menghindari jenis kesalahan ini, jangan tentukan rangkaian algoritme. Secara default, AWS Encryption SDK memilih algoritma paling aman yang kompatibel dengan kebijakan komitmen Anda. Namun, jika Anda harus menentukan rangkaian algoritme, seperti tanpa penandatanganan, pastikan untuk memilih rangkaian algoritme yang kompatibel dengan kebijakan komitmen Anda.


| Kebijakan komitmen | Suite algoritma yang kompatibel | 
| --- | --- | 
| ForbidEncryptAllowDecrypt | Setiap rangkaian algoritma *tanpa* komitmen utama, seperti:AES\$1256\$1GCM\$1IV12\$1TAG16\$1HKDF\$1SHA384\$1ECDSA\$1P384([03 78](algorithms-reference.md)) (dengan penandatanganan) `AES_256_GCM_IV12_TAG16_HKDF_SHA256`([01 78](algorithms-reference.md)) (tanpa penandatanganan) | 
| RequireEncryptAllowDecryptRequireEncryptRequireDecrypt | Setiap rangkaian algoritma *dengan* komitmen utama, seperti:AES\$1256\$1GCM\$1HKDF\$1SHA512\$1COMMIT\$1KEY\$1ECDSA\$1P384([05 78](algorithms-reference.md)) (dengan penandatanganan) `AES_256_GCM_HKDF_SHA512_COMMIT_KEY`([04 78](algorithms-reference.md)) (tanpa penandatanganan) | 

Jika Anda mengalami kesalahan ini ketika Anda belum menentukan rangkaian algoritme, rangkaian algoritme yang bertentangan mungkin telah dipilih oleh [pengelola bahan kriptografi](concepts.md#crypt-materials-manager) (CMM) Anda. CMM Default tidak akan memilih rangkaian algoritme yang bertentangan, tetapi CMM khusus mungkin. Untuk bantuan, lihat dokumentasi untuk CMM kustom Anda.

## Konflik konfigurasi: Kebijakan komitmen dan ciphertext
<a name="configuration-conflict_2"></a>

[Kebijakan `RequireEncryptRequireDecrypt` komitmen](concepts.md#commitment-policy) [tidak mengizinkan AWS Encryption SDK untuk mendekripsi pesan yang dienkripsi tanpa komitmen utama.](concepts.md#key-commitment) Jika Anda meminta AWS Encryption SDK untuk mendekripsi pesan tanpa komitmen kunci, ia mengembalikan kesalahan *konflik Konfigurasi*.

Untuk menghindari kesalahan ini, sebelum menetapkan kebijakan `RequireEncryptRequireDecrypt` komitmen, pastikan bahwa semua ciphertext yang dienkripsi tanpa komitmen utama didekripsi dan dienkripsi ulang dengan komitmen utama, atau ditangani oleh aplikasi yang berbeda. Jika Anda mengalami kesalahan ini, Anda dapat mengembalikan kesalahan untuk ciphertext yang bertentangan atau mengubah kebijakan komitmen Anda untuk sementara. `RequireEncryptAllowDecrypt`

Jika Anda mengalami kesalahan ini karena Anda meningkatkan ke versi 2.0. *x* atau lebih baru dari versi lebih awal dari 1.7. *x* tanpa upgrade terlebih dahulu ke yang terbaru 1. *x* versi (versi 1.7. *x* atau lebih baru), pertimbangkan untuk [memutar kembali](#migration-rollback) ke yang terbaru 1. *x* versi dan menyebarkan versi itu ke semua host sebelum memutakhirkan ke versi 2.0. *x* atau yang lebih baru. Untuk bantuan, lihat [Cara memigrasi dan menyebarkan AWS Encryption SDK](migration-guide.md).

## Validasi komitmen utama gagal
<a name="commitment-failed"></a>

Saat mendekripsi pesan yang dienkripsi dengan komitmen utama, Anda mungkin mendapatkan pesan galat gagal *validasi komitmen Kunci*. Ini menunjukkan bahwa panggilan dekripsi gagal karena kunci data dalam [pesan terenkripsi](concepts.md#DEK) tidak identik dengan kunci data unik untuk pesan tersebut. Dengan memvalidasi kunci data selama dekripsi, [komitmen kunci](concepts.md#key-commitment) melindungi Anda dari mendekripsi pesan yang mungkin menghasilkan lebih dari satu teks biasa. 

Kesalahan ini menunjukkan bahwa pesan terenkripsi yang Anda coba dekripsi tidak dikembalikan oleh. AWS Encryption SDK Ini mungkin pesan yang dibuat secara manual atau hasil dari korupsi data. Jika Anda mengalami kesalahan ini, aplikasi Anda dapat menolak pesan dan melanjutkan, atau berhenti memproses pesan baru.

## Kegagalan enkripsi lainnya
<a name="encrypt-failed"></a>

Enkripsi dapat gagal karena berbagai alasan. Anda tidak dapat menggunakan [keyring AWS KMS penemuan](use-kms-keyring.md#kms-keyring-discovery) atau [penyedia kunci utama dalam mode penemuan](migrate-mkps-v2.md) untuk mengenkripsi pesan. 

Pastikan Anda menentukan keyring atau penyedia kunci master dengan kunci pembungkus yang memiliki [izin untuk digunakan untuk enkripsi](use-kms-keyring.md#kms-keyring-permissions). Untuk bantuan terkait izin AWS KMS keys, lihat [Melihat kebijakan utama](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-viewing.html) dan [Menentukan akses ke AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/determining-access.html) dalam *Panduan AWS Key Management Service Pengembang*.

## Kegagalan dekripsi lainnya
<a name="decrypt-failed"></a>

Jika upaya Anda untuk mendekripsi pesan terenkripsi gagal, itu berarti bahwa tidak AWS Encryption SDK dapat (atau tidak akan) mendekripsi salah satu kunci data terenkripsi dalam pesan. 

Jika Anda menggunakan keyring atau penyedia kunci master yang menentukan kunci pembungkus, hanya AWS Encryption SDK menggunakan kunci pembungkus yang Anda tentukan. Verifikasi bahwa Anda menggunakan kunci pembungkus yang Anda inginkan dan bahwa Anda memiliki `kms:Decrypt` izin pada setidaknya satu dari kunci pembungkus. Jika Anda menggunakan AWS KMS keys, sebagai fallback, Anda dapat mencoba mendekripsi pesan dengan [keyring AWS KMS penemuan](use-kms-keyring.md#kms-keyring-discovery) atau penyedia kunci [utama](migrate-mkps-v2.md) dalam mode penemuan. Jika operasi berhasil, sebelum mengembalikan plaintext, verifikasi bahwa kunci yang digunakan untuk mendekripsi pesan adalah kunci yang Anda percayai. 

## Pertimbangan rollback
<a name="migration-rollback"></a>

[Jika aplikasi Anda gagal mengenkripsi atau mendekripsi data, Anda biasanya dapat menyelesaikan masalah dengan memperbarui simbol kode, keyrings, penyedia kunci master, atau kebijakan komitmen.](concepts.md#commitment-policy) Namun, dalam beberapa kasus, Anda mungkin memutuskan bahwa yang terbaik adalah memutar kembali aplikasi Anda ke versi sebelumnya AWS Encryption SDK.

Jika Anda harus memutar kembali, lakukan dengan hati-hati. Versi AWS Encryption SDK sebelum 1.7. *x* [tidak dapat mendekripsi ciphertext yang dienkripsi dengan komitmen utama.](concepts.md#key-commitment)
+ Bergulir kembali dari yang terbaru 1. versi *x* ke versi sebelumnya AWS Encryption SDK umumnya aman. Anda mungkin harus membatalkan perubahan yang Anda buat pada kode Anda untuk menggunakan simbol dan objek yang tidak didukung di versi sebelumnya. 
+ Setelah Anda mulai mengenkripsi dengan komitmen utama (menetapkan kebijakan komitmen Anda`RequireEncryptAllowDecrypt`) di versi 2.0. *x* atau yang lebih baru, Anda dapat memutar kembali ke versi 1.7. *x*, tetapi tidak ke versi sebelumnya. Versi AWS Encryption SDK sebelum 1.7. *x* [tidak dapat mendekripsi ciphertext yang dienkripsi dengan komitmen utama.](concepts.md#key-commitment)

Jika Anda secara tidak sengaja mengaktifkan enkripsi dengan komitmen utama sebelum semua host dapat mendekripsi dengan komitmen utama, mungkin yang terbaik adalah melanjutkan peluncuran daripada memutar kembali. Jika pesan bersifat sementara atau dapat dijatuhkan dengan aman, maka Anda dapat mempertimbangkan rollback dengan hilangnya pesan. Jika rollback diperlukan, Anda dapat mempertimbangkan untuk menulis alat yang mendekripsi dan mengenkripsi ulang semua pesan.