XP Boost

Written By Rania Naura

Published on

Kubernetes 101: Role-Based Access Control

Kubernetes 101: Role-Based Access Control

Role-Based Access Control (RBAC) itu kayak sistem buat ngatur siapa yang bisa ngapain di dalam suatu aplikasi atau sistem. Jadi, dia bakal bantu nentuin apa aja yang boleh dan nggak boleh dilakuin sama user yang udah login.

Pengenalan

Role-Based Access Control (RBAC) itu bagian penting dari sistem keamanan di aplikasi atau sistem yang canggih. RBAC ini bikin cara buat ngatur apa aja yang boleh dan nggak boleh dilakuin setelah user login.

Caranya gimana? RBAC ini pake konsep role atau peran. Tiap peran punya izin atau permission yang beda-beda, dan peran-peran ini yang nantinya diberikan ke para pengguna.

Jadi, misalnya ada role admin, editor, dan viewer. Admin bisa lakuin banyak hal, editor bisa ngedit, dan viewer cuma bisa lihat. Gitu deh cara RBAC ngatur apa yang boleh dan nggak boleh dilakuin sama user di dalam sistem.

Apa Itu RBAC?

RBAC di Kubernetes itu dasarnya punya empat komponen utama, yaitu: Role, ClusterRole, RoleBinding, dan ClusterRoleBinding.

Role

Jadi, Role ini ibarat daftar izin yang berlaku di suatu namespace tertentu. Ini yang nentuin apa aja yang bisa dilakuin di resource di dalam namespace itu. Izin-izin ini ada di dalam yang namanya policy rules. Contohnya, ini ada Role yang bisa dibuat buat baca ConfigMaps di namespace default:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: configmap-reader
rules:
- apiGroups: [""]
  resources: ["configmaps"]
  verbs: ["get", "watch", "list"]

ClusterRole

Jadi, ClusterRole itu mirip kayak Role, yang isinya itu aturan-aturan buat ngatur akses ke berbagai resource. Bedanya, kalo Role cuma berlaku di satu namespace doang, sedangkan ClusterRole ini berlaku di seluruh cluster, bahkan bisa dipake di banyak namespace sekaligus.

ClusterRole itu kayak semacam tiket akses yang punya wewenang buat ngelakuin banyak hal di seluruh cluster, bukan cuma di satu tempat aja. Contohnya, kalo mau bikin ClusterRole yang bisa ngatur resource di level cluster, ini salah satu contohnya:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: secret-reader
rules:
- apiGroups: [""]
  resources: ["secrets"]
verbs: ["get", "watch", "list"]

RoleBinding

RoleBinding itu fungsinya kayak jembatan yang nyambungin Role ke user atau sekelompok user. RoleBinding ini yang bikin aturan-aturan dari Role itu bisa diterapin ke orang-orang yang kamu pilih.

Gampangnya, RoleBinding itu yang ngatur siapa aja yang boleh ngelakuin apa, berdasarkan aturan-aturan dari Role yang udah ada. Contoh RoleBinding:

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-configmaps
  namespace: default
subjects:
- kind: User
  name: john
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: configmap-reader
  apiGroup: rbac.authorization.k8s.io

ClusterRoleBinding

Mirip kayak RoleBinding tapi buat ClusterRoles. Ini ngaitin ClusterRole ke satu user atau beberapa user sekaligus. Nih, contoh sederhana dari ClusterRoleBinding:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: read-secrets-global
subjects:
- kind: Group
  name: managers
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: secret-reader
  apiGroup: rbac.authorization.k8s.io

Peran dan Hubungan RBAC dengan Sumber Daya Lainnya

Peran dan Hubungan RBAC dengan Sumber Daya Lainnya - onxp blog

Integrasi RBAC ke strategi manajemen sumber daya yang lebih luas bikin kontrol detail tentang siapa yang bisa akses dan manipulasi berbagai sumber daya Kubernetes. Bayangin kamu punya resource Deployment yang mengatur sekumpulan Pod.

Buat ngatur siapa yang bisa update Deployment, yang nantinya juga ngontrol konfigurasi Pod, kamu bisa bikin Role yang cuma ngizinin operasi tertentu di resource Deployment dalam namespace spesifik.

Role ini bisa kamu kasih ke user atau grup user lewat RoleBinding. Contohnya, begini cara kamu bisa nentuin Role yang cuma bisa get, list, dan watch Deployments di namespace default:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: deployment-reader
rules:
- apiGroups: ["apps"]
  resources: ["deployments"]
  verbs: ["get", "watch", "list"]

Terus kamu bisa bikin RoleBinding buat ngasih John, misalnya, izin dari Role deployment-reader:

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-deployments
  namespace: default
subjects:
- kind: User
  name: john
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: deployment-reader
  apiGroup: rbac.authorization.k8s.io

Bikin RBAC Sendiri

Nerapin Role-Based Access Control (RBAC) versi kamu sendiri berarti kamu harus ngerti kebutuhan spesifik-mu dulu, nentuin role yang sesuai, dan ngaitin role ini ke user, grup, atau service account yang pas. Ini langkah- langkah buat bikin dan nerapin RBAC:

Pahami Kebutuhan

Pahami dulu kebutuhan akses dari user atau service kamu. Misalnya, sekelompok developer mungkin butuh akses baca dan tulis ke ConfigMaps dan Secrets di namespace tertentu, sementara grup lain cuma perlu akses baca aja ke resource yang sama.

Tentukan Role

Berdasarkan kebutuhan yang udah lo identifikasi, bikin Role atau ClusterRole yang nyertain izin-izin tersebut. Nih contohnya Role yang ngasih izin baca dan tulis ke ConfigMaps dan Secrets di namespace default:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: config-secret-manager
rules:
- apiGroups: [""]
  resources: ["configmaps", "secrets"]
  verbs: ["get", "watch", "list", "create", "update", "delete"]

Tentukan RoleBindings atau ClusterRoleBindings

Selanjutnya, kaitin role yang udah dibikin ke user, grup, atau service account yang sesuai pake RoleBindings atau ClusterRoleBindings. Ini contoh RoleBinding yang ngasih role config-secret-manager ke user john di namespace default:

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: config-secret-manager-binding
  namespace: default
subjects:
- kind: User
  name: john
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: config-secret-manager
  apiGroup: rbac.authorization.k8s.io

Terapkan Roles dan RoleBindings

Sekarang, pake kubectl apply buat bikin resource-resource ini di cluster Kubernetes kamu:

~$ kubectl apply -f role.yaml kubectl apply -f rolebinding.yaml

Verifikasi Akses

Kamu bisa verifikasi akses dengan nyamar jadi user dan coba lakuin operasi yang seharusnya diizinkan oleh role. Misalnya, sebagai john, sekarang kamu harusnya bisa nge-list ConfigMaps di namespace default:

Kamu bisa verifikasi apakah akses udah diberikan dengan benar dengan cara menyamar sebagai user dan coba lakuin operasi yang seharusnya diizinkan oleh role. Misalnya, sebagai john, sekarang kamu harusnya bisa nge-list ConfigMaps di namespace default:

~$ kubectl --as=john get configmaps -n default

Monitor dan Update Akses Terus-Menerus

Pastiin kamu punya sistem buat audit role dan binding secara rutin. Kamu bisa lakuin manual (review berkala semua role dan binding) atau otomatis (pake tools atau script). Selalu update sesuai kebutuhan pas fungsi pekerjaan berubah, atau pas ada user yang ditambah atau dihapus.

Dengan ngikutin langkah-langkah ini, kamu bisa bikin dan nerapan kebijakan RBAC kamu sendiri di Kubernetes dengan efektif. Ingat prinsip least privilege – cuma kasih akses yang bener-bener diperluin buat user atau service biar bisa jalan.

Baca artikel Kubernetes Service Account buat pelajarin lebih awal

Baca di sini

Dalam misi menyediakan akses pendidikan berkualitas dan inklusif

Tentang

OnXP Logo

OnXP menyediakan tempat belajar teknologi dengan biaya terjangkau dan cocok buat pemula. Kurikulum kami dirancang khusus untuk pemula, dengan materi yang mudah dipahami dan dukungan penuh dari para fasilitator.