Kubelet Authentication & Authorization
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Από προεπιλογή, τα αιτήματα προς το HTTPS endpoint του kubelet που δεν απορρίπτονται από άλλες ρυθμισμένες μεθόδους αυθεντικοποίησης θεωρούνται ανώνυμα αιτήματα και τους δίνεται ένα όνομα χρήστη system:anonymous
και μια ομάδα system:unauthenticated
.
Οι 3 μέθοδοι αυθεντικοποίησης είναι:
Ανώνυμη (προεπιλογή): Χρησιμοποιήστε τη ρύθμιση ορίζοντας την παράμετρο --anonymous-auth=true
ή τη ρύθμιση:
Webhook: Αυτό θα επιτρέψει τα API bearer tokens του kubectl ως εξουσιοδότηση (οποιοδήποτε έγκυρο token θα είναι έγκυρο). Επιτρέψτε το με:
βεβαιωθείτε ότι η ομάδα API authentication.k8s.io/v1beta1
είναι ενεργοποιημένη στον διακομιστή API
ξεκινήστε το kubelet με τις σημαίες --authentication-token-webhook
και --kubeconfig
ή χρησιμοποιήστε την παρακάτω ρύθμιση:
Ο kubelet καλεί το TokenReview
API στον ρυθμισμένο API server για να καθορίσει πληροφορίες χρήστη από τα bearer tokens
Πιστοποιητικά πελάτη X509: Επιτρέπουν την αυθεντικοποίηση μέσω πιστοποιητικών πελάτη X509
δείτε την τεκμηρίωση αυθεντικοποίησης apiserver για περισσότερες λεπτομέρειες
ξεκινήστε τον kubelet με την επιλογή --client-ca-file
, παρέχοντας ένα CA bundle για να επαληθεύσετε τα πιστοποιητικά πελάτη. Ή με τη ρύθμιση:
Οποιοδήποτε αίτημα που έχει αυθεντικοποιηθεί επιτυχώς (συμπεριλαμβανομένου ενός ανώνυμου αιτήματος) στη συνέχεια εξουσιοδοτείται. Η προεπιλεγμένη μέθοδος εξουσιοδότησης είναι AlwaysAllow
, η οποία επιτρέπει όλα τα αιτήματα.
Ωστόσο, η άλλη δυνατή τιμή είναι webhook
(η οποία είναι αυτή που θα βρείτε κυρίως εκεί έξω). Αυτή η μέθοδος θα ελέγξει τα δικαιώματα του αυθεντικοποιημένου χρήστη για να επιτρέψει ή να απαγορεύσει μια ενέργεια.
Σημειώστε ότι ακόμη και αν η ανώνυμη αυθεντικοποίηση είναι ενεργοποιημένη, η ανώνυμη πρόσβαση μπορεί να μην έχει κανένα δικαίωμα για να εκτελέσει οποιαδήποτε ενέργεια.
Η εξουσιοδότηση μέσω webhook μπορεί να ρυθμιστεί χρησιμοποιώντας την παράμετρο --authorization-mode=Webhook
ή μέσω του αρχείου ρύθμισης με:
Ο kubelet καλεί το SubjectAccessReview
API στον διαμορφωμένο API server για να καθορίσει αν κάθε αίτηση είναι εξουσιοδοτημένη.
Ο kubelet εξουσιοδοτεί τις API αιτήσεις χρησιμοποιώντας την ίδια προσέγγιση χαρακτηριστικών αιτήσεων όπως ο apiserver:
Δράση
POST
create
GET, HEAD
get (για μεμονωμένους πόρους), list (για συλλογές, συμπεριλαμβανομένου του πλήρους περιεχομένου αντικειμένων), watch (για παρακολούθηση ενός μεμονωμένου πόρου ή συλλογής πόρων)
PUT
update
PATCH
patch
DELETE
delete (για μεμονωμένους πόρους), deletecollection (για συλλογές)
Ο πόρος που επικοινωνεί με το Kubelet api είναι πάντα nodes και ο υποπόρος καθορίζεται από τη διαδρομή της εισερχόμενης αίτησης:
/stats/*
nodes
stats
/metrics/*
nodes
metrics
/logs/*
nodes
log
/spec/*
nodes
spec
όλοι οι άλλοι
nodes
proxy
Για παράδειγμα, η ακόλουθη αίτηση προσπάθησε να αποκτήσει πρόσβαση στις πληροφορίες pods του kubelet χωρίς άδεια:
Είχαμε ένα Απαγορευμένο, οπότε το αίτημα πέρασε τον έλεγχο Ταυτοποίησης. Αν όχι, θα είχαμε λάβει απλώς ένα μήνυμα Μη Εξουσιοδοτημένο
.
Μπορούμε να δούμε το όνομα χρήστη (σε αυτή την περίπτωση από το token)
Ελέγξτε πώς ο πόρος ήταν nodes και ο υποπόρος proxy (που έχει νόημα με τις προηγούμενες πληροφορίες)
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)