Ringkasan

Roadmap belajar defensive Kubernetes yang paralel dengan kubernetes-roadmap (fungsional), tapi fokus di security layer-by-layer: image supply chain, runtime isolation, RBAC, network policy, secrets, admission control, sampai threat detection. Pelengkap langsung untuk container-kubernetes-security-deepdive dan cicd-shiftleft-shiftright.

Daftar Isi

  1. Mengapa Roadmap Ini Dipisah
  2. 5 Zona Pertahanan Kubernetes
  3. Zona 1 — Supply Chain (Image + Registry)
  4. Zona 2 — Cluster API & Control Plane
  5. Zona 3 — Workload Identity & Authorization (RBAC / PSA)
  6. Zona 4 — Runtime Isolation (Pod Security, Seccomp, NetworkPolicy)
  7. Zona 5 — Detection & Response (Falco, Tetragon, Audit Log)
  8. CIS Benchmark Mapping
  9. Urutan Implementasi Rekomendasi
  10. Latihan Praktis & Tool Latih
  11. Catatan Terkait

Mengapa Roadmap Ini Dipisah

kubernetes-roadmap fokus fungsional (cara deploy workload, persistent storage, service mesh, GitOps). Roadmap ini fokus defensif — pertanyaan “kalau adversary dapat foothold di pod, apa yang阻止 lateral movement-nya?”.

Pattern belajar paralel ini subject untuk:

  • Lulus CKS (Certified Kubernetes Security Specialist) — CNCF exam.
  • Hardening cluster production untuk multi-tenant SaaS (lihat cloud-security-posture-management).
  • Bekal audit CIS EKS Level 1/2 (EKS, GKE, AKS) yang demanded di enterprise.

5 Zona Pertahanan Kubernetes

┌──────────────────────────────────────────────────────────────────┐
│                    ATTACK SURFACE K8s                              │
├──────────────────────────────────────────────────────────────────┤
│ Zona 1: Supply Chain                                              │
│   Source → Dockerfile → Registry → Admission                     │
│              (cosign, Trivy, OPA, Kyverno)                        │
├──────────────────────────────────────────────────────────────────┤
│ Zona 2: Cluster API & Control Plane                              │
│   kube-apiserver → etcd → kubelet                                │
│              (TLS, RBAC, Audit, anonymous off)                     │
├──────────────────────────────────────────────────────────────────┤
│ Zona 3: Workload Identity & Authorization                        │
│   ServiceAccount → RBAC → PodSecurityAdmission                    │
│              (least-privilege, no defaults)                        │
├──────────────────────────────────────────────────────────────────┤
│ Zona 4: Runtime Isolation                                         │
│   Pod ↔ Pod, Pod ↔ Host, Pod ↔ Network                           │
│              (PodSecurity, NetworkPolicy, Seccomp, AppArmor)      │
├──────────────────────────────────────────────────────────────────┤
│ Zona 5: Detection & Response                                       │
│   Runtime events → eBPF → SIEM                                   │
│              (Falco, Tetragon, Audit-log analytics)               │
└──────────────────────────────────────────────────────────────────┘

Lima zona ini memetakan 1:1 ke CNCF CKS exam domains + CIS Kubernetes Benchmark.


Zona 1 — Supply Chain (Image + Registry)

TopikThreat VectorTool / Mitigation
Base image hygieneImage bloated → attack surface besardistroless, alpine, multi-stage
Image scanningCVE di layer OS / libraryTrivy, Snyk, Grype
Image signingTampered image di registryCosign (Sigstore), Notary
SLSA provenanceTidak tahu image siapa build-nyaSLSA Level 3+, in-toto, attestations
Admission controlImage unsigned / unsanitized masuk clusterKyverno / OPA Gatekeeper + Cosign verify
Registry RBACPull dari registry external / anonymousHarbor (private), deny-public-pull policy

Latihan: Build image Alpine, scan dengan Trivy, sign dengan Cosign, enforce signed-only admission di minikube.


Zona 2 — Cluster API & Control Plane

TopikBest Practice
API Server exposure--anonymous-auth=false, --insecure-port=0 di flag apiserver
etcd encryptionencryption-provider-config dengan AES-CBC atau AESCBC
TLS apiserver-ke-etcdMutual TLS dengan cert rotated
Kubelet authn--anonymous-auth=false, --authorization-mode=Webhook
Audit loggingaudit.log di /var/log/ + stream ke SIEM (Wazuh/Loki)
Default ServiceAccount tokenSet automountServiceAccountToken: false di pod default

Resource: Kubernetes Hardening Guide (resmi), CIS Benchmark 1.8+.


Zona 3 — Workload Identity & Authorization (RBAC / PSA)

# Contoh RBAC baik: least-privilege, role per namespace
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: payment-svc
  name: payment-reader
rules:
  - apiGroups: [""]
    resources: ["secrets"]
    resourceNames: ["stripe-key"] # Specific, not wildcard
    verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: payment-pod-rb
  namespace: payment-svc
subjects:
  - kind: ServiceAccount
    name: payment-sa
    namespace: payment-svc
roleRef:
  kind: Role
  name: payment-reader
  apiGroup: rbac.authorization.k8s.io

PSA (Pod Security Admission): Namespace label pod-security.kubernetes.io/enforce: restricted adalah baseline OPA-light untuk pod hardening.


Zona 4 — Runtime Isolation (Pod Security, Seccomp, NetworkPolicy)

Pod Security Standard — Restricted Profile

apiVersion: v1
kind: Pod
spec:
  securityContext:
    runAsNonRoot: true
    runAsUser: 1000
    seccompProfile:
      type: RuntimeDefault
    allowPrivilegeEscalation: false
    capabilities:
      drop: ["ALL"]
  containers:
    - name: app
      image: ghcr.io/org/app@sha256:...
      securityContext:
        readOnlyRootFilesystem: true
        capabilities:
          drop: ["ALL"]

Network Policy — Default Deny + Allowlist

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-all
  namespace: payment-svc
spec:
  podSelector: {}
  policyTypes: [Ingress, Egress]
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-payment-ingress
  namespace: payment-svc
spec:
  podSelector:
    matchLabels:
      app: payment
  policyTypes: [Ingress]
  ingress:
    - from:
        - namespaceSelector:
            matchLabels:
              name: ingress-nginx
      ports:
        - port: 8080

Gunakan Cilium atau Calico sebagai CNI untuk enforcement efektif.


Zona 5 — Detection & Response (Falco, Tetragon, Audit Log)

ToolLayerUse Case
Falcosyscall (kernel)Default rules: shell in container, write to /etc, network anomaly
TetragoneBPFLebih low-overhead, policy-aware
TraceeeBPFRuntime forensics, file access tracking
Kube-apiserver auditcontrol planeSIEM ingestion: кто создал pod, when, from where
kubelet auditnodePod start, exec, port-forward

Contoh Falco ruleset — detect crypto miner:

- rule: Crypto Miner Detection
  desc: Detect known crypto miner processes inside container
  condition: >
    spawned_process and container and
    proc.name in (xmrig, minerd, minergate)
  output: >
    Crypto miner detected
    (user=%user.name command=%proc.cmdline container=%container.name image=%container.image.repository:%container.image.tag)
  priority: CRITICAL
  tags: [process, mining, mitre_T1496]

Lihat ebpf-kernel-security untuk detail eBPF sebagai layer observability.


CIS Benchmark Mapping

CIS SectionZonaPenyelesaian di Vault
1.x — Control PlaneZ2Lihat kubernetes-roadmap, linux-hardening-cis
2.x — Worker NodeZ4container-kubernetes-security-deepdive § Seccomp/AppArmor
3.x — RBAC & ServiceAccountZ3Catatan ini (§ Zona 3)
4.x — Pod SecurityZ4Catatan ini (§ Zona 4) + pod-security-standards (planned)
5.x — NetworkPolicy / CNIZ4container-kubernetes-security-deepdive § NetworkPolicy
6.x — Secrets ManagementZ3sealed-secrets-vs-vault (planned)
7.x — Supply ChainZ1Catatan ini (§ Zona 1) + cosign-pipeline (planned)

Urutan Implementasi Rekomendasi

Untuk cluster production yang sudah jalan dan mau di-hardening:

  1. Z1 Supply Chain. Scan image existing, sign yang lolos. Set registry allow-list.
  2. Z2 Control Plane. Enable apiserver audit log → forward ke Loki/SIEM (lihat observability-stack-prometheus-grafana).
  3. Z3 RBAC baseline. Scan dengan rbac-tool, hapus cluster-admin yang tidak perlu. Tambah per-namespace Role.
  4. Z4 Pod Security. Apply restricted PSA di namespace prod via Kyverno policy (graceful rollout dulu warnauditenforce).
  5. Z5 Detection. Deploy Falco (DaemonSet), default rules + custom untuk crypto miner, exfil DNS. Pipe output ke Telegram alert (lihat SOP Notifiable Alerts kalau ada).

Latihan Praktis & Tool Latih

ToolURLFungsi
minikubekubernetes.io/docs/tutorialsSingle-node cluster untuk belajar
kindkind.sigs.k8s.ioMulti-node di Docker (test controllability)
KubeAcademykube.academyCourse gratis CKA/CKS-aligned
Kubernetes Goatgithub.com/amadalfalco/kubernetes-goatVulnerable-by-design cluster untuk exploit/hardening latihan
BadPodsgithub.com/BishopFox/badpodsPod manifest with anti-patterns
kube-benchgithub.com/aquasecurity/kube-benchCIS Benchmark automation
kubescapegithub.com/kubescape/kubescapeNSA-CISA hardening + CVE check
trivygithub.com/aquasecurity/trivyImage + IaC + k8s manifest scanner
Falcofalco.orgRuntime detection default ruleset

Pitfalls

  1. Cluster yang sudah prod jarang re-apply PSA restricted. Tanpa graceful rollout (audit dulu), enforcement langsung bisa break pod legacy yang runAsRoot: true.
  2. NetworkPolicy default-deny tanpa allowlist. Akan block DNS ke CoreDNS internal — pod jadi CrashLoopBackOff karena tidak resolve name.
  3. Falco ruleset noisy. Default rules trigger banyak false-positive (setiap exec di pod generates alert). Tune rule per-cluster, whitelist critical namespaces.
  4. Secrets di etcd tanpa encryption. Sangat umum di cluster EKS default. Setup encryption-provider-config dengan KMS — satu kali effort, audit nanti wajib.
  5. RBAC * verb atau * resource. Wildcard melumpuhkan least-privilege. Audit dengan kubectl api-resources --no-headers | awk '{print $3}' lalu sweeping semua clusterrolebindings yang punya verbs: ["*"].

Catatan Terkait