Kubernetes Role-Based Access Control(RBAC)
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Role-Based Access Control (RBAC)
Το Kubernetes έχει ένα module εξουσιοδότησης που ονομάζεται Role-Based Access Control (RBAC) που βοηθά στη ρύθμιση των δικαιωμάτων χρήσης στον API server.
Το μοντέλο δικαιωμάτων του RBAC είναι δομημένο από τρία ξεχωριστά μέρη:
- Role\ClusterRole – Το πραγματικό δικαίωμα. Περιέχει κανόνες που αντιπροσωπεύουν ένα σύνολο δικαιωμάτων. Κάθε κανόνας περιέχει πόρους και ρήματα. Το ρήμα είναι η ενέργεια που θα εφαρμοστεί στον πόρο.
- Subject (Χρήστης, Ομάδα ή ServiceAccount) – Το αντικείμενο που θα λάβει τα δικαιώματα.
- RoleBinding\ClusterRoleBinding – Η σύνδεση μεταξύ Role\ClusterRole και του υποκειμένου.

Η διαφορά μεταξύ “Roles” και “ClusterRoles” είναι απλώς το πού θα εφαρμοστεί ο ρόλος – μια “Role” θα παραχωρήσει πρόσβαση μόνο σε μία συγκεκριμένη namespace, ενώ μια “ClusterRole” μπορεί να χρησιμοποιηθεί σε όλες τις namespaces στο cluster. Επιπλέον, οι ClusterRoles μπορούν επίσης να παραχωρήσουν πρόσβαση σε:
- cluster-scoped πόρους (όπως οι κόμβοι).
- non-resource endpoints (όπως το /healthz).
- namespaced πόρους (όπως τα Pods), σε όλες τις namespaces.
Από το Kubernetes 1.6 και μετά, οι πολιτικές RBAC είναι ενεργοποιημένες από προεπιλογή. Αλλά για να ενεργοποιήσετε το RBAC μπορείτε να χρησιμοποιήσετε κάτι όπως:
kube-apiserver --authorization-mode=Example,RBAC --other-options --more-options
Πρότυπα
Στο πρότυπο ενός Ρόλου ή ενός ClusterRole θα χρειαστεί να υποδείξετε το όνομα του ρόλου, το namespace (στους ρόλους) και στη συνέχεια τις apiGroups, resources και verbs του ρόλου:
- Οι apiGroups είναι ένας πίνακας που περιέχει τα διάφορα API namespaces στα οποία ισχύει αυτός ο κανόνας. Για παράδειγμα, μια ορισμός Pod χρησιμοποιεί apiVersion: v1. Μπορεί να έχει τιμές όπως rbac.authorization.k8s.io ή [*].
- Οι resources είναι ένας πίνακας που ορίζει ποιοι πόροι ισχύουν για αυτόν τον κανόνα. Μπορείτε να βρείτε όλους τους πόρους με:
kubectl api-resources --namespaced=true - Οι verbs είναι ένας πίνακας που περιέχει τα επιτρεπόμενα ρήματα. Το ρήμα στο Kubernetes ορίζει τον τύπο ενέργειας που πρέπει να εφαρμόσετε στον πόρο. Για παράδειγμα, το ρήμα list χρησιμοποιείται κατά συλλογών ενώ το “get” χρησιμοποιείται κατά ενός μεμονωμένου πόρου.
Ρήματα Κανόνων
(Αυτές οι πληροφορίες ελήφθησαν από τα έγγραφα)
| HTTP ρήμα | ρήμα αιτήματος |
|---|---|
| POST | create |
| GET, HEAD | get (για μεμονωμένους πόρους), list (για συλλογές, συμπεριλαμβανομένου του πλήρους περιεχομένου αντικειμένων), watch (για παρακολούθηση ενός μεμονωμένου πόρου ή συλλογής πόρων) |
| PUT | update |
| PATCH | patch |
| DELETE | delete (για μεμονωμένους πόρους), deletecollection (για συλλογές) |
Το Kubernetes μερικές φορές ελέγχει την εξουσιοδότηση για πρόσθετες άδειες χρησιμοποιώντας εξειδικευμένα ρήματα. Για παράδειγμα:
- PodSecurityPolicy
- ρήμα
useσε πόρουςpodsecuritypoliciesστην ομάδα APIpolicy. - RBAC
- ρήματα
bindκαιescalateσε πόρουςrolesκαιclusterrolesστην ομάδα APIrbac.authorization.k8s.io. - Authentication
- ρήμα
impersonateσεusers,groups, καιserviceaccountsστην κύρια ομάδα API, και τοuserextrasστην ομάδα APIauthentication.k8s.io.
Warning
Μπορείτε να βρείτε όλα τα ρήματα που υποστηρίζει κάθε πόρος εκτελώντας
kubectl api-resources --sort-by name -o wide
Παραδείγματα
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: defaultGreen
name: pod-and-pod-logs-reader
rules:
- apiGroups: [""]
resources: ["pods", "pods/log"]
verbs: ["get", "list", "watch"]
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
# "namespace" omitted since ClusterRoles are not namespaced
name: secret-reader
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "watch", "list"]
Για παράδειγμα, μπορείτε να χρησιμοποιήσετε ένα ClusterRole για να επιτρέψετε σε έναν συγκεκριμένο χρήστη να εκτελεί:
kubectl get pods --all-namespaces
RoleBinding και ClusterRoleBinding
Από τα έγγραφα: Ένα role binding παραχωρεί τις άδειες που ορίζονται σε έναν ρόλο σε έναν χρήστη ή σε ένα σύνολο χρηστών. Περιέχει μια λίστα υποκειμένων (χρηστών, ομάδων ή λογαριασμών υπηρεσιών) και μια αναφορά στον ρόλο που παραχωρείται. Ένα RoleBinding παραχωρεί άδειες εντός ενός συγκεκριμένου namespace ενώ ένα ClusterRoleBinding παραχωρεί αυτή την πρόσβαση σε όλο το cluster.
piVersion: 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: RoleBinding
metadata:
name: read-pods
namespace: default
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: Role #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
apiVersion: rbac.authorization.k8s.io/v1
# This cluster role binding allows anyone in the "manager" group to read secrets in any namespace.
kind: ClusterRoleBinding
metadata:
name: read-secrets-global
subjects:
- kind: Group
name: manager # Name is case sensitive
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: secret-reader
apiGroup: rbac.authorization.k8s.io
Οι άδειες είναι προσθετικές οπότε αν έχετε ένα clusterRole με “list” και “delete” μυστικά μπορείτε να το προσθέσετε με ένα Role με “get”. Οπότε να είστε προσεκτικοί και να δοκιμάζετε πάντα τους ρόλους και τις άδειές σας και να καθορίζετε τι είναι ΕΠΙΤΡΕΠΤΟ, γιατί τα πάντα είναι ΑΠΑΓΟΡΕΥΜΕΝΑ από προεπιλογή.
Απαρίθμηση RBAC
# Get current privileges
kubectl auth can-i --list
# use `--as=system:serviceaccount:<namespace>:<sa_name>` to impersonate a service account
# List Cluster Roles
kubectl get clusterroles
kubectl describe clusterroles
# List Cluster Roles Bindings
kubectl get clusterrolebindings
kubectl describe clusterrolebindings
# List Roles
kubectl get roles
kubectl describe roles
# List Roles Bindings
kubectl get rolebindings
kubectl describe rolebindings
Κατάχρηση Ρόλων/ClusterRoles για Κλιμάκωση Προνομίων
Abusing Roles/ClusterRoles in Kubernetes
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
HackTricks Cloud

