Senario
Dalam kluster Kubernetes multi-penyewa, pasukan pembangunan menggunakan beban kerja, tetapi pasukan keselamatan perlu menguatkuasakan keselamatan pod tanpa menjejaskan aplikasi sedia ada. Banyak pod berjalan sebagai root, menggunakan bekas istimewa, atau menambah keupayaan berbahaya. Audit keselamatan mendedahkan banyak pelanggaran, dan semakan manual ditentang.
Gejala
- Laporan audit keselamatan: banyak pod berjalan sebagai root, dengan akses istimewa, atau dengan keupayaan berbahaya.
- Pembangun menentang semakan keselamatan manual; PodSecurityPolicy (PSP) telah usang dan kekurangan automasi.
Diagnosis
Gunakan kubectl untuk memeriksa konteks keselamatan pod:
kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{.metadata.namespace} {.metadata.name} {.spec.containers[*].securityContext.privileged}{.spec.containers[*].securityContext.runAsUser}{.spec.containers[*].securityContext.capabilities.add}{"\n"}{end}' | head -20
Periksa pod istimewa:
kubectl get pods --all-namespaces -o json | jq '.items[] | select(.spec.containers[].securityContext.privileged == true) | {namespace: .metadata.namespace, name: .metadata.name}'
Kenal pasti ruang nama yang perlu diperkukuhkan.
Perintah (Pelaksanaan)
- Pasang OPA Gatekeeper:
kubectl apply -f https://raw.githubusercontent.com/open-policy-agent/gatekeeper/master/deploy/gatekeeper.yaml
- Gunakan templat kekangan Standard Keselamatan Pod (Baseline dan Restricted):
apiVersion: templates.gatekeeper.sh/v1beta1
kind: ConstraintTemplate
metadata:
name: k8spspbaseline
spec:
crd:
spec:
names:
kind: K8sPSPBaseline
targets:
- target: admission.k8s.gatekeeper.sh
rego: |
package k8spspbaseline
violation[{"msg": msg}] {
# Laksanakan logik kekangan Baseline
msg := sprintf("Pod %v dalam ruang nama %v melanggar Standard Keselamatan Pod Baseline", [input.review.object.metadata.name, input.review.object.metadata.namespace])
}
- Gunakan kekangan dalam mod audit:
kubectl apply -f constraint.yaml --dry-run=server
- Kuatkuasakan pada ruang nama tertentu:
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sPSPBaseline
metadata:
name: pod-security-baseline
spec:
match:
namespaces: ["prod", "staging"]
enforcementAction: dryrun
Kemudian tukar kepada warn atau deny.
Kawalan Risiko
- Gunakan mod
dryrunterlebih dahulu untuk mengumpul pelanggaran. - Kecualikan ruang nama yang menjalankan DaemonSet kritikal atau komponen sistem.
- Tambah label
security.opsglobal.io/exempt=trueuntuk melangkau pemeriksaan. - Uji sepenuhnya dalam persekitaran bukan pengeluaran.
Pengembalian
Padam templat kekangan dan contoh, atau kembali ke mod audit:
kubectl delete constrainttemplate k8spspbaseline
kubectl delete constraint pod-security-baseline
Pengesahan
Periksa status pelanggaran Gatekeeper:
kubectl get constrainttemplates
kubectl get K8sPSPBaseline -o yaml
Uji dengan pod contoh:
kubectl run nginx --image=nginx --restart=Never --dry-run=server -o yaml | kubectl apply -f -
Jika melanggar, ia sepatutnya ditolak atau diberi amaran.
Bila Serahkan Tiket OpsGlobal
- Perlukan penguatkuasaan konsisten merentasi pelbagai kluster.
- Pembangunan templat kekangan tersuai.
- Penalaan prestasi (latensi Gatekeeper).
- Mengendalikan pelanggaran berskala besar dengan pemulihan segera.
Senario Penggunaan
Sesuai untuk pasukan yang menyelesaikan isu Security dan memerlukan aliran kerja yang jelas.
Latar Belakang Masalah
Pelajari cara menguatkuasakan Standard Keselamatan Pod (PSS) menggunakan OPA Gatekeeper untuk mengeraskan kluster Kubernetes anda terhadap eksploitasi biasa. Panduan ini merangkumi senario, diagnosis, pelaksanaan, pengembalian, dan pengesahan.
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.