Memecahkan 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.

Memecahkan masalah migrasi ke versi terbaru

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, lihatMigrasi Anda AWS Encryption SDK.

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 yang relevan di aws-encryption-sdk-clirepositori di. GitHub

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

Objek yang tidak digunakan lagi atau dihapus

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 untuk bahasa pemrograman Anda, dan ganti simbol warisan dengan simbol yang direkomendasikan changelog.

Konflik konfigurasi: Kebijakan komitmen dan rangkaian algoritme

Jika Anda menentukan rangkaian algoritme yang bertentangan dengan kebijakan komitmen 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_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

Setiap rangkaian algoritma dengan komitmen 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 algoritme, rangkaian algoritme yang bertentangan mungkin telah dipilih oleh pengelola bahan kriptografi (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

Kebijakan RequireEncryptRequireDecrypt komitmen tidak mengizinkan AWS Encryption SDK untuk mendekripsi pesan yang dienkripsi tanpa komitmen utama. 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 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.

Validasi komitmen utama gagal

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 tidak identik dengan kunci data unik untuk pesan tersebut. Dengan memvalidasi kunci data selama dekripsi, komitmen kunci 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

Enkripsi dapat gagal karena berbagai alasan. Anda tidak dapat menggunakan keyring AWS KMS penemuan atau penyedia kunci utama dalam mode penemuan untuk mengenkripsi pesan.

Pastikan Anda menentukan keyring atau penyedia kunci master dengan kunci pembungkus yang memiliki izin untuk digunakan untuk enkripsi. Untuk bantuan terkait izin AWS KMS keys, lihat Melihat kebijakan utama dan Menentukan akses ke AWS KMS key dalam Panduan AWS Key Management Service Pengembang.

Kegagalan dekripsi lainnya

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 atau penyedia 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, keyrings, penyedia kunci master, atau kebijakan komitmen. 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.

  • 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 AndaRequireEncryptAllowDecrypt) 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.

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.