Semua artikel
// Artikel

Review RBAC dan NetworkPolicy Kubernetes

Dipublikasikan 21 Juli 2026

RBAC Kubernetes mengatur request ke API Kubernetes. NetworkPolicy memilih trafik Pod, tetapi hanya bekerja bila CNI yang terpasang menegakkannya. Review keduanya bersama: workload yang disusupi dengan token API luas dan egress terbuka dapat melintasi batas berbeda dari workload dengan Role minimum serta trafik terbatas. Kedua kontrol tidak membuktikan otorisasi aplikasi atau hardening node.

Mulai dari identitas dan binding

Ekspor ServiceAccount, Role, ClusterRole, RoleBinding, ClusterRoleBinding, label namespace, dan manifest workload aktif. Panduan Kubernetes menganjurkan least privilege, menghindari izin wildcard, dan meminimalkan distribusi token istimewa. Identifikasi setiap cluster-admin, wildcard verb, wildcard resource, impersonate, akses Secret, pod exec, serta binding ke grup luas.

BatasArtefak selesaiUji buktiOwnerPass / fail
Service accountpeta workload-ke-SAdefault SA tidak diberi privilegeowner workloadtiap workload punya identitas yang dimaksud
Akses namespaceekspor Role dan RoleBindingkubectl auth can-i menolak verb tak perluowner namespaceleast privilege terbukti
Akses clusterregister ClusterRoleBindingscope beralasan, subject luas tidak tak sengajaowner clusterbinding direview
Ingressdefault-deny dan alur yang diizinkanjalur Pod tak disetujui diblokirowner jaringanhanya caller yang dimaksud
Egressdefault-deny serta aturan DNS/servicetujuan tak terduga diblokirowner jaringanalur diperlukan bekerja

Gunakan Role dan RoleBinding untuk kerja dalam namespace. ClusterRole dapat diikat lewat RoleBinding hanya pada namespace target; ClusterRoleBinding memberi izin ke seluruh cluster. Jangan mengikat service account aplikasi ke cluster-admin untuk mengatasi error deployment. Ganti dengan API group, resource, verb, dan nama yang tepat bila nama resource stabil.

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata: { name: report-reader, namespace: payments }
rules:
  - apiGroups: [""]
    resources: ["configmaps"]
    verbs: ["get"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata: { name: report-reader, namespace: payments }
subjects:
  - kind: ServiceAccount
    name: reports
    namespace: payments
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: report-reader

Catat perintah, identitas, namespace, hasil yang diharapkan, hasil aktual, dan timestamp untuk uji otorisasi. Contoh fail: service account dapat me-list Secret padahal workload tidak membutuhkannya. Perbaikan berarti manifest direvisi, ekspor objek setelah diterapkan, retest yang ditolak, dan owner—bukan “RBAC diperketat.”

Default deny harus tetap mendukung dependency

NetworkPolicy yang memilih Pod dan menyatakan policyTypes: [Ingress, Egress] tanpa allow rule akan menolak ingress dan egress untuk Pod terpilih. Pastikan CNI mendukung NetworkPolicy; objek diterima API bukan bukti enforcement. Inventaris namespace, label Pod, resolver DNS, dependency, endpoint eksternal, port, dan protokol sebelum rollout.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata: { name: default-deny, namespace: payments }
spec:
  podSelector: {}
  policyTypes: [Ingress, Egress]

Tambahkan policy sempit untuk caller service yang diketahui dan DNS. Uji dari Pod yang cocok dan tidak cocok, lalu simpan output uji. NetworkPolicy menggabungkan semua policy yang berlaku; ia bukan firewall rule berurutan. Default-deny ingress tanpa policy frontend yang dibutuhkan akan merusak caller. Default-deny egress tanpa izin DNS dapat merusak discovery. Jangan menjadikan 0.0.0.0/0 jalan keluar rutin; catat alasan akses eksternal dan persempit bila provider serta arsitektur memungkinkan.

Rollout dan bukti

Terapkan policy lebih dahulu pada namespace representatif yang tidak kritis bila arsitektur memungkinkan. Tangkap uji koneksi sebelum/sesudah untuk API caller, worker, metrics, DNS, dan dependency eksternal yang dimaksud. Dependency gagal adalah bukti untuk menyempurnakan allow rule eksplisit, bukan alasan mencabut seluruh kontrol egress. Catat Pod yang dipilih, label, namespace, versi CNI, perintah uji, hasil aktual, dan reviewer. Ulangi setelah label, service, atau CNI berubah karena seleksi dapat berubah tanpa YAML policy berubah.

Gunakan token service account projected yang berumur pendek bila workload memerlukan akses API Kubernetes dan nonaktifkan token automount untuk workload yang tidak memerlukannya. Konfirmasi workload merujuk service account yang dimaksud, bukan default implisit. Review Pod dan Job yang dibuat controller juga; keduanya dapat mewarisi default yang istimewa tanpa disadari. API audit log dapat menguatkan penggunaan izin, tetapi ketiadaan event bukan bukti izin tidak diperlukan tanpa memahami scope pengumpulan.

Pengecualian dan deliverable

Pengecualian memerlukan namespace/workload terdampak, izin berlebih atau alur yang diizinkan secara tepat, alasan, kontrol kompensasi, owner, approver, expiry, perbaikan, dan tanggal retest. Pengecualian kedaluwarsa adalah fail. Deliver peta identitas, review binding, matriks alur jaringan, manifest, bukti enforcement CNI, register pass/fail, pengecualian, dan pelacak perbaikan. Pengujian infrastruktur dapat memvalidasi scope cluster yang disepakati.

Kasus kerja: service account namespace

Deploy workload uji di bawah service account bernama lalu minta hanya objek API yang tercantum di namespace-nya. Output yang diharapkan mengizinkan tindakan baca yang dideklarasikan serta menolak baca secret, tulis cluster-scoped, dan tindakan sama di namespace sebelah. Tangkap hasil audit API serta RoleBinding efektif, lalu hapus binding dan pastikan akses hilang. Untuk NetworkPolicy, uji jalur aplikasi diizinkan dan jalur lintas namespace ditolak dari pod berlabel nyata; review policy harus menyebut dependensi DNS atau egress, bukan menganggap perilaku deny menutup semuanya.

Uji label drift, penggunaan default service account, pembuatan ulang pod, dan masa berlaku binding darurat. Catatan penutupan berisi manifest, policy yang dirender, identitas pod uji, output command, referensi audit, dan reviewer. Pengecualian menyebut namespace, verb, resource, peer traffic, masa berlaku, serta pemeriksaan penghapusan independen. Jangan tutup hanya dari membaca YAML; perilaku di bawah admission dan identitas runtime adalah bukti.

Serah-terima operasional: owner platform menginventaris add-on cluster yang memerlukan egress serta label namespace. Owner aplikasi memverifikasi nama service account pada pod terdeploy, bukan asumsi manifest. Jalankan ulang uji deny setelah perubahan chart atau admission controller. Lampirkan hasil pada catatan rilis.

Sources

Punya sistem yang perlu diuji?