Kubernetes Role-Based Access Control(RBAC)
Έλεγχος Πρόσβασης με Βάση τον Ρόλο (RBAC)
Το Kubernetes διαθέτει ένα μοντέλο εξουσιοδότησης με όνομα Έλεγχος Πρόσβασης με Βάση τον Ρόλο (RBAC) που βοηθά στον καθορισμό των δικαιωμάτων χρήσης του διακομιστή API.
Το μοντέλο εξουσιοδότησης RBAC αποτελείται από τρία μεμονωμένα μέρη:
Υποκείμενο (Χρήστης, Ομάδα ή Λογαριασμός Υπηρεσίας) – Το αντικείμενο που θα λάβει τα δικαιώματα.
Σύνδεση Ρόλου/Ρόλου Συστήματος (RoleBinding/ClusterRoleBinding) – Η σύνδεση μεταξύ του Ρόλου/Ρόλου Συστήματος και του υποκειμένου.
Η διαφορά μεταξύ των "Ρόλων" (Roles) και των "Ρόλων Συστήματος" (ClusterRoles) είναι απλώς ότι ο ρόλος θα εφαρμοστεί σε ένα συγκεκριμένο περιοχή ονομάτων, ενώ ο "Ρόλος Συστήματος" μπορεί να χρησιμοποιηθεί σε όλες τις περιοχές ονομάτων στο cluster. Επιπλέον, οι "Ρόλοι Συστήματος" μπορούν επίσης να παρέχουν πρόσβαση σε:
πόρους που καλύπτουν ολόκληρο το cluster (όπως οι κόμβοι).
μη-πόρους (όπως /healthz).
πόρους που καλύπτουν μια συγκεκριμένη περιοχή ονομάτων (όπως οι Pods), σε όλες τις περιοχές ονομάτων.
Από την έκδοση Kubernetes 1.6 και μετά, οι πολιτικές RBAC είναι ενεργοποιημένες από προεπιλογή. Ωστόσο, για να ενεργοποιήσετε το RBAC μπορείτε να χρησιμοποιήσετε κάτι όπως:
Πρότυπα
Στο πρότυπο ενός Ρόλου (Role) ή ενός Ρόλου Συστήματος (ClusterRole) θα πρέπει να δηλώσετε το όνομα του ρόλου, το namespace (στους ρόλους) και στη συνέχεια τα apiGroups, resources και verbs του ρόλου:
Το apiGroups είναι ένας πίνακας που περιέχει τα διάφορα API namespaces στα οποία εφαρμόζονται αυτοί οι κανόνες. Για παράδειγμα, μια ορισμένη Προδιαγραφή (Pod definition) χρησιμοποιεί 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 ελέγχει μερικές φορές την εξουσιοδότηση για επιπλέον δικαιώματα χρησιμοποιώντας εξειδικευμένα ρήματα. Για παράδειγμα:
Το ρήμα
use
στους πόρουςpodsecuritypolicies
στον ομάδα πόρωνpolicy
.Τα ρήματα
bind
καιescalate
στους πόρουςroles
καιclusterroles
στην ομάδα πόρωνrbac.authorization.k8s.io
.Το ρήμα
impersonate
στους πόρουςusers
,groups
καιserviceaccounts
στην πυρήνα ομάδα πόρων, καθώς και τοuserextras
στην ομάδα πόρωνauthentication.k8s.io
.
Μπορείτε να βρείτε όλα τα ρήματα που υποστηρίζει κάθε πόρος εκτελώντας την εντολή kubectl api-resources --sort-by name -o wide
Παραδείγματα
Για παράδειγμα, μπορείτε να χρησιμοποιήσετε ένα ClusterRole για να επιτρέψετε σε έναν συγκεκριμένο χρήστη να εκτελέσει:
RoleBinding και ClusterRoleBinding
Από τα έγγραφα: Ένα role binding παρέχει τα δικαιώματα που ορίζονται σε έναν ρόλο σε έναν χρήστη ή ομάδα χρηστών. Περιέχει μια λίστα από θέματα (χρήστες, ομάδες ή λογαριασμούς υπηρεσίας) και μια αναφορά στον ρόλο που παρέχεται. Ένα RoleBinding παρέχει δικαιώματα εντός ενός συγκεκριμένου namespace, ενώ ένα ClusterRoleBinding παρέχει πρόσβαση σε όλο το cluster.
Οι άδειες είναι προσθετικές, οπότε αν έχετε ένα clusterRole με "list" και "delete" μυστικά, μπορείτε να το προσθέσετε με ένα Role με "get". Επομένως, να είστε προσεκτικοί και να ελέγχετε πάντα τους ρόλους και τις άδειες σας και να καθορίζετε τι επιτρέπεται, επειδή από προεπιλογή όλα απορρίπτονται.
Απαρίθμηση RBAC
Κατάχρηση Ρόλων/ClusterRoles για Ανέλιξη Προνομίων
Abusing Roles/ClusterRoles in KubernetesLast updated