Kubernetes Role-Based Access Control(RBAC)
Last updated
Last updated
Το 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 για να επιτρέψετε σε έναν συγκεκριμένο χρήστη να εκτελέσει:
Από τα έγγραφα: Ένα role binding παρέχει τα δικαιώματα που ορίζονται σε έναν ρόλο σε έναν χρήστη ή ομάδα χρηστών. Περιέχει μια λίστα από θέματα (χρήστες, ομάδες ή λογαριασμούς υπηρεσίας) και μια αναφορά στον ρόλο που παρέχεται. Ένα RoleBinding παρέχει δικαιώματα εντός ενός συγκεκριμένου namespace, ενώ ένα ClusterRoleBinding παρέχει πρόσβαση σε όλο το cluster.
Οι άδειες είναι προσθετικές, οπότε αν έχετε ένα clusterRole με "list" και "delete" μυστικά, μπορείτε να το προσθέσετε με ένα Role με "get". Επομένως, να είστε προσεκτικοί και να ελέγχετε πάντα τους ρόλους και τις άδειες σας και να καθορίζετε τι επιτρέπεται, επειδή από προεπιλογή όλα απορρίπτονται.