Enkripsi secret lapisan aplikasi menambahkan lapisan perlindungan yang dapat dikonfigurasi untuk data sensitif di Google Kubernetes Engine (GKE), seperti kredensial dan kunci. Masalah dengan konfigurasi ini dapat mencegah lapisan keamanan tambahan ini berfungsi dengan benar.
Gunakan dokumen ini untuk memecahkan masalah enkripsi secret lapisan aplikasi dengan memeriksa kolom proses debug yang tersedia di objek Cluster GKE API. Kolom ini membantu Anda mendiagnosis penyebab utama error umum, seperti update yang gagal atau masalah dengan kunci Cloud KMS Anda.
Informasi ini penting bagi admin dan operator Platform serta Engineer keamanan yang bertanggung jawab untuk melindungi informasi sensitif yang disimpan di cluster GKE. Untuk mengetahui informasi selengkapnya tentang peran umum dan contoh tugas yang kami referensikan dalam Google Cloud konten, lihat Peran dan tugas pengguna GKE umum.
Update gagal
Saat Anda memperbarui konfigurasi enkripsi secret lapisan aplikasi, GKE harus menulis ulang semua Secret objek di cluster Kubernetes. GKE melakukan hal ini untuk membantu memastikan bahwa semua Secret dienkripsi oleh Kunci Cloud KMS baru, atau ditulis tanpa dienkripsi jika itulah yang Anda konfigurasi.
Operasi update ini dapat gagal karena salah satu kondisi berikut:
- Panel kontrol Kubernetes tidak tersedia untuk sementara saat update sedang berlangsung.
AdmissionWebhookyang ditentukan pengguna mencegah GKE dapat memperbarui objek Secret.- Kunci Cloud KMS yang diperbarui atau sebelumnya dinonaktifkan sebelum operasi update selesai.
Hingga operasi update berhasil, jangan berinteraksi dengan kunci Cloud KMS yang diperbarui atau sebelumnya.
Kolom proses debug
Cluster GKE baru yang menjalankan versi 1.29 dan yang lebih baru berisi kolom tambahan yang membantu Anda melacak update ke Cluster.DatabaseEncryption dan membantu Anda pulih dari kegagalan.
Langkah-langkah berikut hanya berlaku untuk cluster yang kolom DatabaseEncryption.CurrentState-nya tidak kosong. Jika kolom CurrentState kosong, fitur ini belum diaktifkan pada versi cluster ini.
Batas berikut berlaku untuk kolom ini:
- Adalah hanya output, yang berarti Anda tidak dapat menetapkannya selama permintaan pembuatan cluster atau update.
Kolom CurrentState
Anda dapat memeriksa status operasi update DatabaseEncryption saat ini
dengan memeriksa kolom CurrentState di Cluster.DatabaseEncryption.
Nilai CurrentState |
Deskripsi |
|---|---|
|
|
Operasi update terbaru berhasil. Tidak ada tindakan lebih lanjut yang diperlukan. Anda dapat menghapus kunci yang sebelumnya digunakan. |
|
|
Update sedang berlangsung. |
|
|
Terjadi error pada update terbaru. Jangan nonaktifkan atau hapus kunci Cloud KMS yang sebelumnya digunakan, karena kunci tersebut mungkin masih digunakan oleh GKE.
Lihat kolom |
Kolom LastOperationErrors
Jika operasi update gagal, error yang mendasarinya dari panel kontrol GKE akan ditampilkan dalam output gcloud container clusters update.
Pesan error dari dua operasi update terbaru yang gagal juga tersedia di Cluster.DatabaseEncryption.LastOperationErrors.
Kolom DecryptionKeys
Kunci Cloud KMS yang digunakan untuk operasi enkripsi baru ditampilkan di DatabaseEncryption.KeyName. Biasanya, kunci ini adalah satu-satunya kunci yang digunakan oleh cluster.
Namun, DatabaseEncryption.DecryptionKeys berisi kunci tambahan yang juga digunakan oleh cluster jika update sedang berlangsung atau setelah kegagalan.
Memulihkan dari update yang gagal
Untuk memulihkan dari update yang gagal, lakukan hal berikut:
- Periksa pesan error dan atasi masalah yang ditunjukkan.
- Coba lagi permintaan update dengan menjalankan perintah yang gagal, seperti
gcloud container clusters update ... --database-encryption-key. Sebaiknya coba lagi dengan permintaan update yang sama yang Anda keluarkan awalnya, atau update cluster kembali ke status sebelumnya. GKE mungkin tidak dapat bertransisi ke kunci atau status enkripsi yang berbeda jika tidak dapat membaca satu atau beberapa Secret.
Bagian berikut mencantumkan alasan umum terjadinya error.
Error kunci Cloud KMS
Jika pesan error berisi referensi ke satu atau beberapa kunci Cloud KMS, periksa konfigurasi kunci Cloud KMS Anda untuk memastikan versi kunci yang relevan dapat digunakan.
Jika error menunjukkan bahwa kunci Cloud KMS telah dinonaktifkan atau dihapus, aktifkan kembali kunci atau versi kunci.
Error: Tidak dapat menggunakan kunci CloudKMS yang dikonfigurasi untuk enkripsi Tingkat Aplikasi
Pesan error berikut terjadi jika akun layanan default GKE tidak dapat mengakses kunci Cloud KMS:
Cluster problem detected (Kubernetes Engine Service Agent account unable to use CloudKMS key configured for Application Level encryption).
Untuk menyelesaikan masalah ini, aktifkan kembali kunci yang dinonaktifkan.
Tidak dapat memperbarui Secret
Error berikut mungkin terjadi jika Kubernetes API menolak permintaan update karena webhook penerimaan:
error admission webhook WEBHOOK_NAME denied the request
Untuk mengatasi error ini, hapus webhook atau ubah sehingga GKE dapat memperbarui Secret di semua namespace selama update kunci.
Error: namespace dikelola
Error berikut terjadi saat Anda mencoba mengenkripsi ulang Secret yang berada di namespace yang dikelola GKE, seperti kube-system, di cluster Autopilot. Pesan errornya mirip dengan yang berikut ini:
Error from server (Forbidden): secrets "alertmanager" is
forbidden: User cannot patch resource "secrets" in API group "" in the namespace "gke-gmp-system":
GKE Warden authz [denied by managed-namespaces-limitation]: the namespace "gke-gmp-system"
is managed and the request's verb "patch" is denied'
Cluster GKE Autopilot tidak memungkinkan Anda mengubah resource Kubernetes, termasuk Secret, di namespace terkelola.
Untuk mengatasi error ini, lakukan hal berikut:
- Jika Anda menggunakan perintah
kubectluntuk mengenkripsi ulang Secret, gunakan flag--namespaceuntuk mencakup perintah ke namespace yang Anda kelola. - Jika Anda menggunakan CronJob untuk mengenkripsi ulang Secret, deploy hanya di namespace yang Anda kelola.
Panel kontrol tidak responsif setelah menonaktifkan enkripsi
Menonaktifkan enkripsi secret lapisan aplikasi terlalu cepat setelah Anda mengaktifkannya dapat mengganggu tugas enkripsi awal, yang dapat menyebabkan panel kontrol kube-apiserver cluster Anda menjadi tidak responsif.
Berikut adalah gejala masalah ini:
- Operasi cluster seperti
list node,list pods, danget apiserver readinessgagal dengan kode error 13 dan pesanInternal Server Error. - Pengontrol Kube tidak berfungsi, dan Pod yang dihapus dari StatefulSet atau ReplicaSet tidak dibuat ulang.
- Panggilan webhook gagal karena koneksi ditolak.
Untuk mengurangi masalah ini, lakukan hal berikut:
- Aktifkan kembali enkripsi secret lapisan aplikasi menggunakan kunci Cloud KMS yang sama yang sebelumnya Anda gunakan untuk mengaktifkan enkripsi.
Untuk mencegah masalah ini, pastikan hal berikut:
- Setelah Anda mengaktifkan enkripsi secret lapisan aplikasi, pastikan cluster telah stabil selama beberapa jam sebelum Anda menonaktifkan enkripsi.
Langkah berikutnya
Jika Anda tidak dapat menemukan solusi untuk masalah Anda dalam dokumentasi, lihat Mendapatkan dukungan untuk bantuan lebih lanjut, termasuk saran tentang topik berikut:
- Membuka kasus dukungan dengan menghubungi Dukungan Pelanggan Cloud.
- Mendapatkan dukungan dari komunitas dengan
mengajukan pertanyaan di StackOverflow
dan menggunakan tag
google-kubernetes-engineuntuk menelusuri masalah serupa. Anda juga dapat bergabung ke saluran Slack untuk mendapatkan dukungan komunitas lebih lanjut.#kubernetes-engine - Membuka masalah atau permintaan fitur menggunakan issue tracker publik.