Senario
Pasukan SRE menguruskan beberapa kluster Kubernetes. Seorang pemaju secara tidak sengaja memadamkan semua pod dalam ruang nama pengeluaran kerana mempunyai keistimewaan cluster-admin, menyebabkan gangguan perkhidmatan. Penyiasatan mendedahkan keizinan yang berlebihan dan kekurangan prinsip keistimewaan minimum.
Gejala
- Pod pengeluaran dipadam tanpa diduga
- Log audit menunjukkan
kubectl delete pods --alldilaksanakan oleh pengguna - Pengguna mempunyai ClusterRoleBinding cluster-admin
Diagnosis
- Periksa ikatan pengguna:
kubectl get clusterrolebinding <user-binding> -o yaml - Senarai keizinan pengguna:
kubectl auth can-i --list --as=<user> - Semak log API server:
kubectl logs -n kube-system <apiserver-pod> --tail=100 | grep <user>
Perintah (Pengukuhan)
1. RBAC Keistimewaan Minimum
# Buat peranan kluster baca sahaja
kubectl create clusterrole readonly --verb=get,list,watch --resource=pods,services,deployments
# Ikat kepada pengguna di peringkat ruang nama
kubectl create rolebinding readonly-binding --clusterrole=readonly --user=<user> --namespace=<namespace>
# Padam ikatan cluster-admin lama
kubectl delete clusterrolebinding <old-binding>
2. Piawaian Keselamatan Pod
# Dayakan pengawal kemasukan PodSecurity (dalam argumen kube-apiserver)
--enable-admission-plugins=PodSecurity
# Guna dasar garis dasar pada ruang nama
kubectl label ns <namespace> pod-security.kubernetes.io/enforce=baseline
3. Dasar Rangkaian
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
4. Pengurusan Rahsia dengan External Secrets Operator (ESO)
# Pasang ESO
helm repo add external-secrets https://charts.external-secrets.io
helm install external-secrets external-secrets/external-secrets -n external-secrets --create-namespace
# Buat SecretStore (contoh: Vault)
kubectl apply -f secretstore.yaml
# Buat ExternalSecret
kubectl apply -f externalsecret.yaml
Kawalan Risiko
- Sandarkan RBAC sedia ada:
kubectl get clusterrolebinding -o yaml > backup-rbac.yaml - Uji perubahan dengan pengguna canary
- Dayakan log audit (
--audit-log-path=/var/log/kube-apiserver-audit.log)
Pengembalian
# Pulihkan ikatan RBAC
kubectl apply -f backup-rbac.yaml
# Buang label Pod Security
kubectl label ns <namespace> pod-security.kubernetes.io/enforce-
# Padam dasar rangkaian
kubectl delete networkpolicy deny-all
Pengesahan
# Sahkan pengguna tidak boleh memadam pod
kubectl auth can-i delete pod --as=<user> -n <namespace>
# Periksa status segerak rahsia
kubectl get externalsecret -n <namespace>
# Uji pengasingan rangkaian
kubectl exec -it <pod> -- curl <other-pod-ip> # Sepatutnya tamat masa
Bila Hantar Tiket OpsGlobal
- Perlu audit dan ubah suai keizinan RBAC seluruh kluster
- Integrasi dengan stor rahsia luaran (Vault, AWS Secrets Manager, dll.)
- Tindak balas insiden memerlukan analisis forensik dan pemulihan
- Memenuhi keperluan pematuhan (PCI-DSS, SOC2) untuk keselamatan rangkaian dan pod
Senario Penggunaan
Sesuai untuk pasukan yang menyelesaikan isu Security dan memerlukan aliran kerja yang jelas.
Latar Belakang Masalah
Panduan praktikal untuk mengukuhkan akses kluster Kubernetes dengan prinsip keistimewaan minimum RBAC, Piawaian Keselamatan Pod, dasar rangkaian, dan pengurusan rahsia menggunakan External Secrets Operator.
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.