Kontrol Akses Berbasis Peran (RBAC)
Versi Bahasa Indonesia. Baca dalam Bahasa Inggris
Role-based access control (RBAC) adalah metode pengaturan akses ke sumber daya komputer atau jaringan berdasarkan peran masing-masing pengguna dalam organisasi Anda.
Otorisasi RBAC menggunakan grup API rbac.authorization.k8s.io untuk mendorong keputusan otorisasi, memungkinkan Anda mengonfigurasi kebijakan secara dinamis melalui API Kubernetes.
Role dan ClusterRole
RBAC Role atau ClusterRole berisi aturan yang mewakili sekumpulan izin. Izin bersifat murni aditif (tidak ada aturan "deny").
Role selalu mengatur izin dalam namespace tertentu; saat Anda membuat Role, Anda harus menentukan namespace tempatnya berada.
ClusterRole, sebaliknya, adalah sumber daya non-namespaced. Sumber daya ini memiliki nama yang berbeda (Role dan ClusterRole) karena objek Kubernetes harus selalu bersifat namespaced atau non-namespaced; tidak bisa keduanya.
RoleBinding dan ClusterRoleBinding
Role binding memberikan izin yang didefinisikan dalam role kepada pengguna atau sekumpulan pengguna. Ini berisi daftar subjek (pengguna, grup, atau service accounts), dan referensi ke role yang diberikan. RoleBinding memberikan izin dalam namespace tertentu sedangkan ClusterRoleBinding memberikan akses tersebut secara klaster-wide.
RoleBinding dapat mereferensikan Role apa pun di namespace yang sama. Atau, RoleBinding dapat mereferensikan ClusterRole dan mengikat ClusterRole tersebut ke namespace dari RoleBinding. Jika Anda ingin mengikat ClusterRole ke semua namespace di klaster, Anda menggunakan ClusterRoleBinding.
Contoh
- Mari kita buat cluster role baru
pod-readerdalam filerole.yaml.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: pod-reader
rules:
- apiGroups: [""] # "" indicates the core API group
resources: ["pods"]
verbs: ["get", "watch", "list"]- Terapkan konfigurasi menggunakan
kubectl apply -f role.yaml. - Periksa cluster role menggunakan
kubectl get clusterrole. Cluster rolepod-readerakan ada dalam daftar. - Sekarang mari kita coba mengikat role ini ke seorang pengguna.
- Tambahkan konfigurasi di bawah ini ke dalam file
role.yaml.
---
apiVersion: rbac.authorization.k8s.io/v1
# This role binding allows "jane" to read pods in the "default" namespace.
# You need to already have a Role named "pod-reader" in that namespace.
kind: ClusterRoleBinding
metadata:
name: read-pods
subjects:
# You can specify more than one "subject"
- kind: User
name: jane # "name" is case sensitive
apiGroup: rbac.authorization.k8s.io
roleRef:
# "roleRef" specifies the binding to a Role / ClusterRole
kind: ClusterRole #this must be Role or ClusterRole
name: pod-reader # this must match the name of the Role or ClusterRole you wish to bind to
apiGroup: rbac.authorization.k8s.io- Konfigurasi ini akan mengikat cluster role
pod-readerke penggunajane. - Terapkan konfigurasi
kubectl apply -f role.yaml. - Coba menggunakan perintah di bawah ini
kubectl --as=jane get pods
kubectl --as=jane get nodes- Perintah pertama akan mengembalikan daftar pods
- Perintah kedua akan mengembalikan error seperti di bawah ini:
Error from server (Forbidden): nodes is forbidden: User "jane" cannot list resource "nodes" in API group "" at the cluster scopeLast updated on