Senario
Pasukan SRE memerhatikan penciptaan pod yang luar biasa dan lonjakan trafik rangkaian keluar dari kluster Kubernetes. Penyiasatan awal menunjukkan kemungkinan pelanggaran keselamatan.
Gejala
- Pod tanpa kebenaran berjalan dalam namespace yang tidak dijangka
- Corak trafik egress yang tidak normal
- ClusterRoleBinding yang mencurigakan dalam kube-system
Diagnosis
- Semak RBAC:
kubectl get clusterrolebindings --all-namespaces
kubectl describe clusterrolebinding <nama-mencurigakan>
- Periksa Dasar Rangkaian:
kubectl get networkpolicies --all-namespaces
Ketiadaan dasar bermakna semua trafik dibenarkan secara lalai. 3. Semak Piawaian Keselamatan Pod:
kubectl get podsecuritypolicies
Jika kosong, tiada sekatan dikenakan.
Arahan Pengukuhan
RBAC Hak Minimum
- Buang ClusterRoleBinding yang tidak perlu:
kubectl delete clusterrolebinding <nama-mencurigakan>
- Guna Role dan RoleBinding yang terhad:
cat <<EOF | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods
namespace: default
subjects:
- kind: User
name: jane
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
EOF
Dasar Rangkaian
- Tolak semua trafik masuk dan keluar secara lalai:
cat <<EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-all
namespace: default
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
EOF
- Benarkan egress penting (contohnya DNS):
cat <<EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-dns
namespace: default
spec:
podSelector:
matchLabels:
app: myapp
policyTypes:
- Egress
egress:
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: kube-system
ports:
- protocol: UDP
port: 53
EOF
Piawaian Keselamatan Pod (melalui Pod Security Admission)
- Kuat kuasa mod restricted pada namespace:
kubectl label ns default pod-security.kubernetes.io/enforce=restricted
⚠️ Mungkin mengganggu pod sedia ada; uji dalam bukan produksi dahulu.
Kawalan Risiko
- Sandarkan semua RBAC dan dasar rangkaian semasa sebelum perubahan:
kubectl get clusterrolebindings -o yaml > backup-rbac.yaml
- Laksanakan perubahan secara berperingkat, mulakan dengan namespace pentas.
- Dayakan log audit untuk mengesan akses anomali.
Rollback
- Pulihkan RBAC dari sandaran:
kubectl apply -f backup-rbac.yaml
- Padam dasar rangkaian:
kubectl delete networkpolicy default-deny-all
- Buang label Pod Security Admission:
kubectl label ns default pod-security.kubernetes.io/enforce-
Pengesahan
- Uji RBAC:
kubectl auth can-i get pods --as=jane
- Sahkan dasar rangkaian aktif:
kubectl describe networkpolicy default-deny-all
- Uji penguatkuasaan Keselamatan Pod:
kubectl run test --image=busybox -- sleep 1
Mesti ditolak.
Bila Hantar Tiket OpsGlobal
- Jika anda mengesyaki pelanggaran aktif dan memerlukan respons insiden pantas.
- Apabila anda memerlukan bantuan pakar dengan reka bentuk dasar yang kompleks atau audit pematuhan.
- Jika pasukan anda kurang kepakaran keselamatan Kubernetes yang mendalam.
Senario Penggunaan
Sesuai untuk pasukan yang menyelesaikan isu Security dan memerlukan aliran kerja yang jelas.
Latar Belakang Masalah
Pos ini membentangkan senario realistik di mana kluster Kubernetes menunjukkan tanda-tanda kompromi, dan membimbing melalui diagnosis, arahan pengukuhan, kawalan risiko, rollback, 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.