Membangun keamanan sebagai bagian bawaan platform: policy-as-code tingkat lanjut, security gates di pipeline, audit terpusat yang immutable, dan baseline keamanan yang bisa diverifikasi otomatis

Di episode 5 kita memperkenalkan policy-as-code sebagai penjaga konfigurasi, dan di episode 15 kita memperluasnya ke seluruh fleet cluster. Episode ini menaikkan posisinya: bukan sekadar "policy untuk mencegah misconfig", tetapi platform security & compliance — sistem yang memastikan keamanan adalah bagian bawaan setiap langkah, bukan lapisan yang ditambahkan belakangan.
Mengapa sekarang? Ketika platform tumbuh (multi-cluster, banyak tenant, data di mana-mana), "percaya pada disiplin tim" tidak lagi cukup. Perusahaan yang harus menjawab audit (SOC 2, ISO 27001) atau regulasi (GDPR, HIPAA) butuh bukti yang bisa ditunjukkan, bukan janji. Platform security adalah jawaban dua arah: melindungi dari serangan, dan menghasilkan bukti kepatuhan secara otomatis.
Policy yang baik punya siklus hidup seperti kode:
Tim platform tidak menulis semua policy dari nol. Gunakan policy library (Kyverno Policies, Gatekeeper Library) sebagai titik awal, lalu sesuaikan. Yang lebih penting: sediakan jalur exception yang tercatat. Policy yang tidak punya jalur pengecualian akan dilawan developer dengan cara-cara di luar platform. Exception harus lewat PR, punya tanggal kadaluarsa, dan terlihat oleh semua.
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: require-storage-encryption
spec:
validationFailureAction: Enforce
background: false
rules:
- name: pvc-encrypted
match:
any:
- resources:
kinds: [PersistentVolumeClaim]
validate:
message: "StorageClass harus encrypted=true (lihat exception policy)"
pattern:
spec:
storageClassName: "*-encrypted"CI/CD (episode 7) adalah gerbang keamanan paling efektif karena setiap perubahan lewat sini. Standarkan gate berikut di setiap pipeline:
| Gate | Alat contoh | Menolak jika |
|---|---|---|
| Image vulnerability scan | Trivy/Grype | Ada CVE kritis/fixable yang belum diterima |
| Secret scanning | Gitleaks/TruffleHog | Ada secret bocor ke git |
| SAST (static analysis) | Semgrep/CodeQL | Temuan kritis pada kode |
| Dependency/license check | osv-scanner, license-check | Dependency rentan atau lisensi bermasalah |
| Build provenance & SBOM | cosign + syft | Image tidak bertanda tangan (detail ep. 19) |
Kuncinya: gate harus memblokir, bukan sekadar memberi laporan. Pipeline yang melaporkan tapi tetap lanjut adalah dashboard yang menenangkan, bukan kontrol keamanan.
Semua aksi penting platform — siapa mengakses cluster, siapa approve, siapa buat secret, siapa ekspos service — harus mengalir ke audit log terpusat yang immutable (write-only, tanpa akses edit, retensi sesuai kebutuhan compliance). Di Kubernetes, aktifkan Kubernetes Audit Policy dan kirim ke sistem log terpusat:
kubectl logs -n kube-system audit-log-collector --tail=20Audit yang baik menjawab tiga pertanyaan: siapa, kapan, dan apa yang diubah. Ini bahan utama menjawab audit pihak eksternal.
Jangan biarkan akses menumpuk. Jadwalkan access review (misalnya kuartalan): siapakah yang masih punya akses ke production, dan apakah alasannya masih valid? Lakukan via PR ke repo RBAC — tercatat di git (episode 12).
Baseline adalah standar minimum yang wajib dipenuhi setiap workload dan diverifikasi otomatis oleh policy:
Baseline ini ditegakkan di tiga titik: CI (gate), admission (policy), dan runtime (monitoring). Satu lapisan boleh lolos, dua lainnya menjaganya.
Important
Compliance bukan sekadar dokumen — ia adalah bukti. Setiap kontrol (policy, gate, audit log) harus menghasilkan jejak yang bisa diverifikasi kapan saja. Jika sebuah kontrol tidak punya bukti otomatis, anggap kontrol itu tidak ada di mata auditor.
Inti yang harus dibawa pulang:
Di episode 17 selanjutnya kita membangun ketahanan platform itu sendiri: platform reliability & SLO — bagaimana menetapkan SLO untuk platform (bukan hanya aplikasi), mengelola error budget, dan mendesain availability yang benar!