Pemecahan masalah migrasi ke versi terbaru - AWS Encryption SDK

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

Pemecahan masalah migrasi ke versi terbaru

Sebelum memperbarui aplikasi Anda ke versi 2.0.xatau nantiAWS Encryption SDK, perbarui ke 1 terbaru.xversiAWS Encryption SDKdan menyebarkannya sepenuhnya. Itu akan membantu Anda menghindari sebagian besar kesalahan yang mungkin Anda temui saat memperbarui ke versi 2.0.xdan nantinya. Untuk panduan terperinci, termasuk contoh, lihatMigrasiAWS Encryption SDK.

penting

Verifikasi bahwa 1 terbaru Anda.xversi 1.7.xatau nantiAWS Encryption SDK.

catatan

AWSEnkripsi CLI: Referensi dalam panduan ini ke versi 1.7.xdariAWS Encryption SDKberlaku untuk versi 1.8.xdariAWSEnkripsi CLI. Referensi dalam panduan ini untuk versi 2.0.xdariAWS Encryption SDKberlaku untuk 2.1.xdariAWSEnkripsi CLI.

Fitur keamanan baru awalnya dirilis diAWSEnkripsi CLI versi 1.7.xdan 2.0.x. Namun,AWSEnkripsi CLI versi 1.8.xmenggantikan versi 1.7.xdanAWSEnkripsi CLI 2.1.xmenggantikan 2.0.x. Untuk detailnya, lihat yang relevanpenasehat keamanandi dalamaws-encryption-sdk-clirepositori pada GitHub.

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

Objek usang atau dihapus

Versi 2.0.xmencakup beberapa perubahan yang melanggar, termasuk menghapus konstruktor lama, metode, fungsi, dan kelas yang tidak digunakan lagi di versi 1.7.x. Untuk menghindari kesalahan compiler, kesalahan impor, kesalahan sintaks, dan simbol tidak ditemukan kesalahan (tergantung pada bahasa pemrograman Anda), upgrade pertama ke terbaru 1.xversiAWS Encryption SDKuntuk bahasa pemrograman Anda. (Ini harus versi 1.7.xatau yang lebih baru. Saat menggunakan 1 terbaru.xversi, Anda dapat mulai menggunakan elemen pengganti sebelum simbol asli dihapus.

Jika Anda perlu meng-upgrade ke versi 2.0.xatau nanti segera,konsultasikan changeloguntuk bahasa pemrograman Anda, dan ganti simbol warisan dengan simbol yang direkomendasikan oleh changelog.

Konflik konfigurasi: Kebijakan komitmen dan rangkaian algoritma

Jika Anda menentukan rangkaian algoritma yang bertentangan denganKebijakan Komitmen, panggilan untuk mengenkripsi gagal denganKonflik konfigurasikesalahan.

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

Kebijakan Komitmen Suite algoritma yang kompatibel
ForbidEncryptAllowDecrypt

Suite algoritma apa puntanpakomitmen utama, seperti:

AES_256_GCM_IV12_TAG16_HKDF_SHA384_ECDSA_P384(03 78) (dengan penandatanganan)

AES_256_GCM_IV12_TAG16_HKDF_SHA256(01 78) (tanpa penandatanganan)

RequireEncryptAllowDecrypt

RequireEncryptRequireDecrypt

Suite algoritma apa punbersamakomitmen utama, seperti:

AES_256_GCM_HKDF_SHA512_COMMIT_KEY_ECDSA_P384(05 78) (dengan penandatanganan)

AES_256_GCM_HKDF_SHA512_COMMIT_KEY(04 78) (tanpa penandatanganan)

Jika Anda mengalami kesalahan ini ketika Anda belum menentukan rangkaian algoritma, rangkaian algoritma yang bertentangan mungkin telah dipilih oleh Andamanajer bahan kriptografi(CMM). Default CMM tidak akan memilih rangkaian algoritma yang bertentangan, tetapi CMM kustom mungkin. Untuk bantuan, lihat dokumentasi untuk CMM khusus Anda.

Konflik konfigurasi: Kebijakan komitmen dan ciphertext

KlasterRequireEncryptRequireDecrypt Kebijakan Komitmentidak mengizinkanAWS Encryption SDKuntuk mendekripsi pesan yang dienkripsi tanpaKomitmen utama. Jika Anda bertanyaAWS Encryption SDKuntuk mendekripsi pesan tanpa komitmen kunci, ia mengembalikanKonflik konfigurasikesalahan.

Untuk menghindari kesalahan ini, sebelum menyetelRequireEncryptRequireDecryptkebijakan komitmen, pastikan bahwa semua ciphertext yang dienkripsi tanpa komitmen kunci didekripsi dan dienkripsi ulang dengan komitmen kunci, 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 sementaraRequireEncryptAllowDecrypt.

Jika Anda mengalami kesalahan ini karena Anda memutakhirkan ke versi 2.0.xatau yang lebih baru dari versi lebih awal dari 1.7.xtanpa memutakhirkan terlebih dahulu ke 1 terbaru.xversi (versi 1.7.xatau nanti), pertimbangkanbergulir kembalike 1 terbaru.xversi dan menyebarkan versi itu ke semua host sebelum memutakhirkan ke versi 2.0.xatau yang lebih baru. Untuk bantuan, lihat Cara memigrasi dan menyebarkanAWS Encryption SDK.

Validasi komitmen kunci gagal

Saat mendekripsi pesan yang dienkripsi dengan komitmen kunci, Anda mungkin mendapatkanValidasi komitmen kunci gagalpesan kesalahan. Hal ini menunjukkan bahwa panggilan dekripsi gagal karena kunci data dalampesan terenkripsitidak identik dengan kunci data unik untuk pesan. Dengan memvalidasi kunci data selama dekripsi,Komitmen utamamelindungi Anda dari mendekripsi pesan yang mungkin menghasilkan lebih dari satu plaintext.

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

Kegagalan enkripsi lainnya

Enkripsi dapat gagal karena berbagai alasan. Anda tidak dapat menggunakanAWS KMSkeyringataupenyedia kunci utama dalam mode penemuanuntuk mengenkripsi pesan.

Pastikan Anda menentukan keyring atau penyedia kunci master dengan kunci pembungkus yang Anda milikiizin untuk menggunakanuntuk enkripsi. Untuk bantuan dengan izinAWS KMS keys, lihatMelihat kebijakan kuncidanMenentukan akses keAWS KMS keydi dalamAWS Key Management ServicePanduan Pengembang.

Kegagalan dekripsi lainnya

Jika upaya Anda untuk mendekripsi pesan terenkripsi gagal, itu berarti bahwaAWS Encryption SDKtidak dapat (atau tidak) mendekripsi salah satu kunci data terenkripsi dalam pesan.

Jika Anda menggunakan keyring atau penyedia kunci master yang menentukan kunci pembungkus,AWS Encryption SDKhanya menggunakan kunci pembungkus yang Anda tentukan. Verifikasi bahwa Anda menggunakan kunci pembungkus yang Anda inginkan dan yang Anda milikikms:Decryptizin pada setidaknya salah satu kunci pembungkus. Jika Anda menggunakanAWS KMS keys, sebagai fallback, Anda dapat mencoba mendekripsi pesan denganAWS KMSkeyringataupenyedia kunci utama dalam mode penemuan. Jika operasi berhasil, sebelum mengembalikan plaintext, verifikasi bahwa kunci yang digunakan untuk mendekripsi pesan adalah kunci yang Anda percayai.

Pertimbangan rollback

Jika aplikasi Anda gagal mengenkripsi atau mendekripsi data, Anda biasanya dapat menyelesaikan masalah dengan memperbarui simbol kode, gantungan kunci, penyedia kunci utama, atauKebijakan Komitmen. Namun, dalam beberapa kasus, Anda mungkin memutuskan bahwa yang terbaik adalah memutar kembali aplikasi Anda ke versi sebelumnyaAWS Encryption SDK.

Jika Anda harus memutar kembali, lakukan dengan hati-hati. Versi dariAWS Encryption SDKsebelum 1.7.xtidak dapat mendekripsi ciphertext yang dienkripsi denganKomitmen utama.

  • Bergulir kembali dari yang terbaru 1.xversi ke versi sebelumnyaAWS Encryption SDKumumnya 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 AndaRequireEncryptAllowDecrypt) dalam versi 2.0.xatau yang lebih baru, Anda dapat memutar kembali ke versi 1.7.x, tetapi tidak untuk versi sebelumnya. Versi dariAWS Encryption SDKsebelum 1.7.xtidak dapat mendekripsi ciphertext yang dienkripsi denganKomitmen utama.

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 mungkin mempertimbangkan rollback dengan hilangnya pesan. Jika rollback diperlukan, Anda dapat mempertimbangkan untuk menulis alat yang mendekripsi dan mengenkripsi ulang semua pesan.