# Pemeriksaan keamanan Kubernetes: akses, workload, dan jaringan

Sumber diperiksa. Metode: https://kompli.id/metodologi/.

Konfigurasi yang diterima API belum membuktikan pengamanan bekerja. Periksa izin, proses yang berjalan serta koneksi yang diizinkan dan ditolak, dengan versi cluster dan data uji yang jelas.

URL kanonis: https://kompli.id/panduan/keamanan/pemeriksaan-keamanan-kubernetes/
Sumber diakses: 2026-10-01
Diperbarui: 2026-10-02
Penulis: Kompli
Sumber diperiksa: 2026-10-02


## Mulai dari izin dan alur yang memang diperlukan

**Pemeriksaan Kubernetes perlu membuktikan bahwa pekerjaan yang sah tetap berjalan, sementara akses yang tidak diperlukan ditolak.** Kubernetes mengatur aplikasi dalam *pod*, yaitu unit yang berisi satu atau beberapa container. Pemeriksaan image tetap diperlukan, tetapi belum mencakup izin pengelolaan cluster dan hubungan antar-pod.

Catat versi server/client, node, plugin jaringan, namespace, image serta identitas penguji. Namespace memisahkan kelompok objek; jangan menganggap namanya saja sebagai batas keamanan lengkap. Sepakati siapa boleh membaca, membuat, mengubah atau menjalankan perintah pada workload, dan jalur jaringan apa yang diperlukan.

## Lingkungan contoh yang dijalankan

[Unduh source dan hasil lab infrastruktur 1.0](/unduhan/lab-infrastruktur-v1.zip). Pada **1 Oktober 2026**, contoh dijalankan memakai kind **0.33.0**, Kubernetes server/client **1.36.4**, Calico **3.32.2** dan BusyBox **1.37.0** dengan digest image. Host macOS arm64, Docker Engine 29.4.0; cluster memiliki satu node Linux.

API lab hanya mendengar di loopback, dengan kubeconfig terpisah. Namespace `kompli-demo` berisi tiga pod dan Secret berisi penanda buatan. Tidak menguji cluster atau data produksi. README menjelaskan pembuatan cluster, pemasangan plugin dan penghapusannya.

Jalankan runner setelah cluster khusus lab siap; jangan mengganti context dengan cluster kerja:

```sh
python3 kubernetes-checks.py --kubectl /path/to/kubectl --kubeconfig ./lab-kubeconfig --out kubernetes-results.json --confirm-disposable-cluster
```

## Batasi izin pengelolaan dan akses Secret

*Role-Based Access Control* atau RBAC menentukan tindakan yang boleh dilakukan identitas. Mulai dari kebutuhan pekerjaan, lalu periksa Role/RoleBinding yang memberinya izin. Wildcard dapat memberi akses lebih luas saat jenis objek baru ditambahkan. Izin membuat pod juga dapat membuka akses tidak langsung ke Secret pada namespace tersebut; jangan hanya memeriksa izin `get secrets`.

Contoh mengubah Role milik service account `reader` dari izin wildcard menjadi **get/list pods** saja. Berikut pemeriksaan baca yang dipakai pada lab:

```sh
kubectl --kubeconfig ./lab-kubeconfig --context kind-kompli-infrastructure-lab -n kompli-demo auth can-i get secrets --as=system:serviceaccount:kompli-demo:reader
```

Hasil sebelum pembatasan **yes**. Sesudah pembatasan: `get secrets` **no**, `create pods` **no**, sementara `get pods` tetap **yes**. Permintaan API membaca Secret buatan juga ditolak dengan **Forbidden**. Ini bukti untuk identitas dan namespace tersebut; belum menilai semua binding, kelompok, impersonation atau jalur peningkatan hak.

Pada pod contoh, `automountServiceAccountToken` dimatikan karena aplikasi tidak memakai API Kubernetes. Pemeriksaan runtime tidak menemukan file token pada path otomatis. Hal ini tidak membuktikan tidak ada token lain yang diberikan melalui Secret, file atau integrasi berbeda.

## Periksa admission dan keadaan proses

*Admission* adalah pemeriksaan API sebelum menerima objek. Label namespace lab memakai **Restricted dengan versi v1.36**. Konfigurasi pod privileged diterima pada **server dry run** sebelum pembatasan, lalu ditolak setelah label diterapkan. Pod privileged itu tidak benar-benar dijalankan.

Konfigurasi contoh yang sah tetap diterima: pengguna non-root, privilege escalation dimatikan, capabilities dihapus dan seccomp RuntimeDefault. Ketika server dijalankan, perintah `id` melaporkan **uid=10001**, dan layanan HTTP tetap berfungsi.

Simpan kedua jenis bukti: penolakan konfigurasi dan keadaan proses yang berjalan. Perubahan policy tidak otomatis memperbaiki seluruh workload lama. Rencanakan penerapan serta uji fungsi; jangan melabeli semua namespace produksi Restricted tanpa memeriksa ketergantungan dan jalur pemulihan.

## Buktikan aturan jaringan bekerja

NetworkPolicy membutuhkan plugin yang mendukung enforcement. Aturan bersifat aditif: policy lain yang mengizinkan jalur dapat membuatnya tetap terbuka. Periksa semua policy yang memilih pod; ingress dan egress memiliki pembatasan tersendiri.

Lab memakai HTTP pada IP pod server, TCP **8080**, agar pemeriksaan ini tidak bergantung pada DNS. Data sepenuhnya buatan; HTTP digunakan untuk menguji pembatasan koneksi, bukan pola transportasi produksi.

| Keadaan | Hasil yang tercatat |
| --- | --- |
| Belum ada pembatasan ingress | Client A dan B membaca `KUBERNETES_LAB_OK`. |
| Policy deny memilih server | Keduanya mengalami timeout; exit code 1. |
| Ditambahkan izin untuk label client A | A membaca penanda; B tetap timeout. |
| Uji ulang dengan koneksi baru | A tetap berhasil dan B tetap ditolak. |

Timeout saja tidak cukup membuktikan policy bekerja: server mati juga menimbulkannya. Kontrol positif A, hasil sebelum perubahan dan uji ulang membantu memperjelas penyebab pada lab ini. Buktikan juga egress serta ketergantungan DNS jika masuk lingkup lingkungan Anda.

## Catat bagian yang belum diperiksa

Contoh ini memeriksa satu Role namespace, admission satu konfigurasi, tiga pod Linux dan satu jalur ingress. Belum memeriksa multi-node, Windows, egress, DNS, akses metadata cloud, audit log lengkap, backup, enkripsi etcd, supply chain seluruh image atau kepatuhan cluster. Kubernetes Secret yang menggunakan base64 belum berarti terenkripsi; pengamanan penyimpanan perlu diperiksa terpisah.

Gunakan [catatan verifikasi](/template/catatan-verifikasi-keamanan-aplikasi/) untuk versi, kasus, hasil dan batas. Lengkapi dengan [pemeriksaan image/container](/panduan/keamanan/keamanan-container-dan-image/), [Infrastructure as Code](/panduan/keamanan/keamanan-infrastructure-as-code/) serta [identitas workload](/panduan/keamanan/akun-layanan-dan-identitas-workload/). Rujukan teknis ini bukan kewajiban hukum Indonesia dengan sendirinya.

## Rencana tambahan: egress, DNS dan beberapa workload

Bagian ini ditambahkan **2 Oktober 2026** berdasarkan dokumentasi NetworkPolicy. **Belum dijalankan pada cluster**; hasil ingress di atas tetap berasal dari lab 1 Oktober. Tidak ada simulator, VM atau cluster baru yang dijalankan pada batch ini.

Untuk lingkungan uji yang diizinkan, petakan frontend, API, database dan resolver. Periksa dukungan enforcement plugin dan seluruh policy yang memilih masing-masing pod. Jika sumber diisolasi untuk egress dan tujuan diisolasi untuk ingress, koneksi perlu diizinkan pada kedua sisi. Namespace saja tidak menutup koneksi.

Contoh objek berikut **hanya acuan yang belum diterapkan**. Objek memilih seluruh pod pada namespace buatan dan tidak memberi pengecualian; bukan konfigurasi siap pakai. Jangan memasangnya di namespace kerja.

```yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: lab-deny-egress
  namespace: kompli-demo
spec:
  podSelector: {}
  policyTypes: [Egress]
  egress: []
```

Policy lain yang mengizinkan egress tetap dapat membuka jalur karena aturan aditif. Tambahkan izin yang telah ditinjau untuk resolver dan tujuan aplikasi pada lingkungan uji, lalu periksa kasus berikut. Tidak ada hasil aktual untuk tabel ini.

| Kasus yang direncanakan | Bukti yang dicari |
| --- | --- |
| Frontend → API; API → database | Jalur sah bekerja, layanan tak terkait ditolak. |
| API → DNS yang dipilih | Resolusi berjalan pada UDP dan TCP yang diperlukan; periksa resolver lokal bila dipakai. |
| API → tujuan luar yang diizinkan/tidak diizinkan | Koneksi baru sesuai aturan; tujuan kontrol positif tetap hidup. |
| Client dengan label/namespace berbeda | Uji gabungan namespaceSelector dan podSelector; label dapat diubah oleh pihak berizin. |
| Workload pada beberapa node | Catat penempatan pod dan hasil lintas-node, bukan hanya satu node. |
| Policy tambahan membuka akses | Uji ulang izin efektif dari seluruh policy, bukan hanya berkas yang baru ditambahkan. |

Core NetworkPolicy tidak memilih tujuan memakai FQDN dan tidak memeriksa izin akun aplikasi atau TLS. Perilaku NAT serta koneksi yang sudah terbentuk dapat bergantung implementasi. Catat versi plugin, sumber/tujuan dan batasnya di [catatan verifikasi](/template/catatan-verifikasi-keamanan-aplikasi/). Peta alur lintas-platform tetap di [segmentasi jaringan layanan](/panduan/keamanan/segmentasi-jaringan-layanan/).
## Sumber rujukan

- [Kubernetes — Security Checklist](https://kubernetes.io/docs/concepts/security/security-checklist/) — Batas checklist, akses API, pod, jaringan dan image; bukan bukti kepatuhan seluruh cluster.
- [Kubernetes — Role Based Access Control Good Practices](https://kubernetes.io/docs/concepts/security/rbac-good-practices/) — Izin namespace, wildcard, akses Secret dan kewenangan membuat workload.
- [Kubernetes — Pod Security Standards](https://kubernetes.io/docs/concepts/security/pod-security-standards/) — Profil Restricted: non-root, capabilities, seccomp dan privilege escalation.
- [Kubernetes — Network Policies](https://kubernetes.io/docs/concepts/services-networking/network-policies/) — Dukungan plugin, pemilihan pod, ingress/egress dan sifat aturan yang aditif.
- [Kubernetes — Secrets](https://kubernetes.io/docs/concepts/configuration/secret/) — Encoding bukan enkripsi; lindungi penyimpanan dan akses rahasia.

## Perlu membahas kebutuhan tim Anda?

Ceritakan sistem yang dikelola dan kebutuhan pengamanan tim Anda.

[Konsultasikan kebutuhan Anda](https://kompli.id/konsultasi/?topik=keamanan)

## Bacaan terkait

- [Keamanan container dan image sebelum dijalankan di produksi](https://kompli.id/panduan/keamanan/keamanan-container-dan-image/)
- [Keamanan infrastructure as code: tinjau perubahan sebelum deploy](https://kompli.id/panduan/keamanan/keamanan-infrastructure-as-code/)
- [Akun layanan dan identitas workload: izin untuk proses otomatis](https://kompli.id/panduan/keamanan/akun-layanan-dan-identitas-workload/)
- [Catatan verifikasi keamanan aplikasi](https://kompli.id/template/catatan-verifikasi-keamanan-aplikasi/)

