Senario: Panggilan API Tanpa Pengesahan dalam Kluster Anda
SIEM anda memberi amaran tentang panggilan API yang mencurigakan ke pelayan API Kubernetes. Log audit menunjukkan permintaan daripada system:anonymous dengan kata kerja seperti delete dan update terhadap deployment dan namespace. Lebih teruk, IP yang tidak dikenali didapati menarik data rahsia.
Gejala
kubectl get events --all-namespacesmenunjukkan pengubahsuaian tanpa kebenaran.- Log audit (jika diaktifkan) mendedahkan tindak balas berjaya untuk permintaan tanpa nama.
- Beberapa deployment pengeluaran telah diubah.
- Pasukan keselamatan anda mengesyaki pelanggaran data.
Diagnosis
Pertama, sahkan mod kebenaran dan tetapan tanpa nama pelayan API:
kubectl get --raw /api/v1/namespaces/kube-system/configmaps | grep -i anonymous
Jika log audit tidak tersedia, semak pengikatan:
kubectl get clusterrolebindings,rolebindings -A -o yaml | grep -B2 -A10 "system:anonymous"
Periksa apa yang boleh dilakukan oleh pengguna tanpa nama:
kubectl auth can-i --list --as system:anonymous
Arahan untuk Mengaudit dan Mengeras
Senaraikan semua pengikatan yang merujuk kepada tanpa nama:
kubectl get clusterrolebinding,rolebinding -A -o json | jq '.items[] | select(.subjects[]?.name=="system:anonymous")'
Padam pengikatan berbahaya (gantikan <binding-name>):
kubectl delete clusterrolebinding <binding-name> --dry-run=client -o yaml > backup.yaml
kubectl delete clusterrolebinding <binding-name>
Terapkan pengerasan tambahan:
# Aktifkan Keselamatan Pod Admission (contoh: kuatkuasa baseline/default)
kubectl label --overwrite ns --all pod-security.kubernetes.io/enforce=baseline
Kawalan Risiko
- Kuatkuasa RBAC Least Privilege: Buang pengikatan tanpa nama dan terlalu luas; gunakan kumpulan dan akaun perkhidmatan.
- Aktifkan Log Audit: Hantar ke SIEM.
- Gunakan NetworkPolicies: Sekat komunikasi pod-ke-pod dan laluan keluar.
- Lumpuhkan Akses Tanpa Nama: Tetapkan
--anonymous-auth=falsejika tiada titik akhir kesihatan tanpa pengesahan diperlukan. - Putarkan semua kredensial jika disyaki berkompromi.
Gulung Balik
Jika memadam pengikatan memecahkan sesuatu (contohnya, agen pemantauan kehilangan akses), guna semula daripada sandaran:
kubectl apply -f backup.yaml
Uji sambungan selepas gulung balik.
Pengesahan
Sahkan pengguna tanpa nama tidak boleh membaca rahsia:
kubectl auth can-i --list --as system:anonymous | grep -i secret
# sepatutnya menunjukkan tiada atau "no" untuk get/list secrets
Simulasikan permintaan tanpa nama:
curl -ks https://$(kubectl get svc kubernetes -n default -o jsonpath='{.spec.clusterIP}'):443/api/v1/secrets
# Jangkaan: 403 Forbidden
Bila Menghantar Tiket OpsGlobal
Jika anda tidak mempunyai masa atau kepakaran untuk menjalankan audit keselamatan penuh, tidak dapat mengenal pasti semua laluan yang terjejas, atau memerlukan analisis forensik, hantar tiket. Pakar keselamatan SRE OpsGlobal boleh membantu anda mengeraskan platform, melaksanakan RBAC amalan terbaik, dan menyediakan pemantauan keselamatan yang berterusan.
Senario Penggunaan
Sesuai untuk pasukan yang menyelesaikan isu Security dan memerlukan aliran kerja yang jelas.
Latar Belakang Masalah
Panduan praktikal untuk mengesan dan membaiki salah konfigurasi RBAC Kubernetes, dengan arahan untuk mengaudit kebenaran, menguatkuasakan prinsip hak akses paling rendah, dan mengesahkan pembaikan.
Langkah Penyelesaian
Sahkan impak dan perubahan terkini, kumpul log, konfigurasi dan metrik, kemudian baiki mengikut risiko.
Contoh Arahan
Gantikan contoh dengan nama sumber sebenar dan simpan kata laluan, token atau kunci dalam pembolehubah persekitaran.
Risiko
Sebelum operasi produksi, semak sandaran, akses, tetingkap perubahan dan pelan rollback.
Pelan Rollback
Simpan konfigurasi dan versi asal; rollback konfigurasi, imej atau perubahan pangkalan data jika metrik tidak normal.
Senarai Serahan
Rekod punca isu, arahan penting, langkah pembaikan, hasil pengesahan dan cadangan susulan.
Perlu bantuan isu teknikal serupa?
Jika pelayan, Kubernetes, Docker, CI/CD, pangkalan data atau pemantauan anda bermasalah, hantar log dan konfigurasi untuk diagnosis jauh.