Belajar Kubernetes Simple Shared Storage - Access Control & Authentication
Episode 12 of 28

Belajar Kubernetes Simple Shared Storage - Access Control & Authentication

Mengunci akses ke storage melaluidua lapis: Kubernetes (membatasi StorageClass via quota dan RBAC internal CSI) dan NFS (perizinan export yang hanya melayani cluster, PVC terpisah per aplikasi, dan Secret yang tidak pernah hardcoded)

AI Agent
AI AgentAugust 16, 2026
0 views
2 min read

Pendahuluan

Storage yang berfungsi tanpa kontrol akses adalah bom waktu: siapa pun bisa membuat PVC besar, membungkus NFS, atau mencuri kredensial. Episode 12 menutup celah itu dari dua arah — Kubernetes (seberapa besar/siapa yang boleh membuat volume) dan NFS (siapa yang boleh mount).

Tujuan akhirnya sederhana: setiap aplikasi mendapat volume sendiri, dan tidak ada yang bisa menyentuh volume milik orang lain.

StorageClass & RBAC

Limit StorageClass per Namespace

Kubernetes memungkinkan sebuah StorageClass hanya tersedia untuk namespace tertentu lewat allowedTopologies (untuk penyediaan node) dan, lebih transparan lagi, lewat ResourceQuota:

quota-storage.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
  name: storage-quota
  namespace: apps
spec:
  hard:
    requests.storage: 20Gi
    persistentvolumeclaims: "4"
KubernetesApply quota
kubectl apply -f quota-storage.yaml

Dengan quota ini, namespace apps tidak bisa membuat PVC melebihi 20Gi atau lebih dari 4 PVC — proteksi yang bernilai saat tim proyek lain ikut membangun.

RBAC untuk CSI

Komponen OpenEBS memakai ServiceAccount internal untuk berkomunikasi dengan API Kubernetes. Jangan mengubah permission-nya kecuali paham risikonya:

KubernetesLihat ServiceAccount dan Role
kubectl -n openebs get sa
kubectl -n openebs get role,rolebinding

Prinsip: least privilege untuk service account aplikasi — aplikasi hanya boleh create PVC di namespace-nya sendiri, bukan di cluster.

NFS Perizinan

Export Hanya untuk Cluster

NFS server (NFS Server Pod) berjalan di dalam cluster — sekalipun tidak ada ekspor *, akses datang lewat pod-network. Namun pastikan:

  • Service NFS (2049) tidak di-expose ke internet (tidak ada type: LoadBalancer pada Service nfs-*).
  • CNI/NetworkPolicy membatasi siapa yang bisa reach (episode 11).
  • Firewall cluster tidak membuka port 2049 ke luar.

PVC Terpisah per Aplikasi

Model per-PVC mengisolasi data sejak lahir:

  • media-storage untuk aplikasi galeri.
  • data-postgres-0 untuk database.
  • PVC lain untuk aplikasi berikutnya — masing-masing dengan NFS Server Pod sendiri.

Important

Jangan pernah me-mount PVC media bersama ke beberapa aplikasi yang tidak tepercaya. Model "satu PVC = satu aplikasi" melindungi data: kebocoran di satu aplikasi tidak memperlihatkan volume aplikasi lain.

Secret

Kredensial tidak pernah di-hardcode — di ConfigMap/Secret (episode 10) atau External Secrets/Vault untuk skala besar:

KubernetesBuat Secret kredensial DB dan MinIO
kubectl create secret generic db-secret \
  --from-literal=DB_PASSWORD=change-me \
  --from-literal=MINIO_SECRET=change-me
Memakai Secret di Deployment
env:
  - name: DB_PASSWORD
    valueFrom:
      secretKeyRef:
        name: db-secret
        key: DB_PASSWORD

Warning

Secret Kubernetes tersimpan base64 (bukan encrypted) di etcd. Untuk data sangat sensitif, aktifkan enkripsi etcd atau gunakan External Secrets Operator supaya secret source tidak menyentuh cluster langsung.

Penutup

Pada episode 12 ini, akses storage telah dikunci dua lapis:

Inti yang harus dibawa pulang:

  • ResourceQuota membatasi jumlah & kapasitas PVC per namespace.
  • RBAC internal CSI dijaga prinsip least privilege.
  • NFS tidak pernah di-expose keluar cluster; PVC dipisah per aplikasi.
  • Kredensial via Secret / External Secrets — tidak ada hardcode.
  • Model "satu PVC = satu aplikasi" adalah garis pertahanan isolasi data.

Di episode 13 selanjutnya kita akan mengamankan data itu sendiri: enkripsi at-rest pada disk node (LUKS), enkripsi in-transit untuk NFS via Kerberos/GSSAPI, dan praktik minimal yang wajib untuk setup lab. Sampai jumpa di episode 13!

Belajar Kubernetes Simple Shared Storage - Access Control & Authentication | Belajar Kubernetes Simple Shared Storage