Kubernetes Role-Based Access Control(RBAC)

Μάθετε το hacking στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Έλεγχος Πρόσβασης με Βάση τον Ρόλο (RBAC)

Το Kubernetes διαθέτει ένα μοντέλο εξουσιοδότησης με όνομα Έλεγχος Πρόσβασης με Βάση τον Ρόλο (RBAC) που βοηθά στον καθορισμό των δικαιωμάτων χρήσης του διακομιστή API.

Το μοντέλο εξουσιοδότησης RBAC αποτελείται από τρία μεμονωμένα μέρη:

  1. Ρόλος/Ρόλος Συστήματος (Role/ClusterRole) ­– Το πραγματικό δικαίωμα. Περιέχει κανόνες που αντιπροσωπεύουν ένα σύνολο δικαιωμάτων. Κάθε κανόνας περιέχει πόρους και ρήματα. Το ρήμα είναι η ενέργεια που θα εφαρμοστεί στον πόρο.

  2. Υποκείμενο (Χρήστης, Ομάδα ή Λογαριασμός Υπηρεσίας) – Το αντικείμενο που θα λάβει τα δικαιώματα.

  3. Σύνδεση Ρόλου/Ρόλου Συστήματος (RoleBinding/ClusterRoleBinding) – Η σύνδεση μεταξύ του Ρόλου/Ρόλου Συστήματος και του υποκειμένου.

Η διαφορά μεταξύ των "Ρόλων" (Roles) και των "Ρόλων Συστήματος" (ClusterRoles) είναι απλώς ότι ο ρόλος θα εφαρμοστεί σε ένα συγκεκριμένο περιοχή ονομάτων, ενώ ο "Ρόλος Συστήματος" μπορεί να χρησιμοποιηθεί σε όλες τις περιοχές ονομάτων στο cluster. Επιπλέον, οι "Ρόλοι Συστήματος" μπορούν επίσης να παρέχουν πρόσβαση σε:

  • πόρους που καλύπτουν ολόκληρο το cluster (όπως οι κόμβοι).

  • μη-πόρους (όπως /healthz).

  • πόρους που καλύπτουν μια συγκεκριμένη περιοχή ονομάτων (όπως οι Pods), σε όλες τις περιοχές ονομάτων.

Από την έκδοση Kubernetes 1.6 και μετά, οι πολιτικές RBAC είναι ενεργοποιημένες από προεπιλογή. Ωστόσο, για να ενεργοποιήσετε το RBAC μπορείτε να χρησιμοποιήσετε κάτι όπως:

kube-apiserver --authorization-mode=Example,RBAC --other-options --more-options

Πρότυπα

Στο πρότυπο ενός Ρόλου (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 ελέγχει μερικές φορές την εξουσιοδότηση για επιπλέον δικαιώματα χρησιμοποιώντας εξειδικευμένα ρήματα. Για παράδειγμα:

Μπορείτε να βρείτε όλα τα ρήματα που υποστηρίζει κάθε πόρος εκτελώντας την εντολή kubectl api-resources --sort-by name -o wide

Παραδείγματα

Ρόλος (Role)
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"]
ClusterRole
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
ClusterRoleBinding
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 για Ανέλιξη Προνομίων

pageAbusing Roles/ClusterRoles in Kubernetes
Μάθετε το hacking στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Last updated