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)
Po defaultu, zahtevi ka kubelet-ovom HTTPS kraju koji nisu odbijeni od strane drugih konfigurisanih metoda autentifikacije tretiraju se kao anonimni zahtevi, i dodeljuju im se korisničko ime system:anonymous
i grupa system:unauthenticated
.
3 metode autentifikacije su:
Anonimna (podrazumevano): Koristite postavku postavljanjem parametra --anonymous-auth=true
ili konfiguracije:
Webhook: Ovo će omogućiti kubectl API bearer tokene kao autorizaciju (bilo koji validan token će biti validan). Dozvolite to sa:
osigurajte da je authentication.k8s.io/v1beta1
API grupa omogućena na API serveru
pokrenite kubelet sa --authentication-token-webhook
i --kubeconfig
zastavicama ili koristite sledeću postavku:
Kubelet poziva TokenReview
API na konfigurisanom API serveru da utvrdi informacije o korisniku iz bearer tokena
X509 klijentski sertifikati: Omogućavaju autentifikaciju putem X509 klijentskih sertifikata
pogledajte dokumentaciju o autentifikaciji apiservera za više detalja
pokrenite kubelet sa --client-ca-file
flagom, pružajući CA paket za verifikaciju klijentskih sertifikata. Ili sa konfiguracijom:
Svaki zahtev koji je uspešno autentifikovan (uključujući anonimni zahtev) zatim se autorizuje. Podrazumevani način autorizacije je AlwaysAllow
, koji dozvoljava sve zahteve.
Međutim, druga moguća vrednost je webhook
(što je ono što ćete najčešće pronaći napolju). Ovaj način će proveriti dozvole autentifikovanog korisnika da bi dozvolio ili zabranio neku akciju.
Imajte na umu da čak i ako je anonimna autentifikacija omogućena, anonimni pristup možda nema nikakve dozvole da izvrši bilo koju akciju.
Autorizacija putem webhook-a može se konfigurisati koristeći parametar --authorization-mode=Webhook
ili putem konfiguracione datoteke sa:
Kubelet poziva SubjectAccessReview
API na konfigurisanom API serveru da odredi da li je svaki zahtev ovlašćen.
Kubelet ovlašćuje API zahteve koristeći isti pristup atributima zahteva kao apiserver:
Akcija
POST
kreirati
GET, HEAD
dobiti (za pojedinačne resurse), lista (za kolekcije, uključujući puni sadržaj objekta), posmatrati (za posmatranje pojedinačnog resursa ili kolekcije resursa)
PUT
ažurirati
PATCH
zakrpa
DELETE
obrisati (za pojedinačne resurse), obrisati kolekciju (za kolekcije)
Resurs koji komunicira sa Kubelet API je uvek čvorovi, a podresurs se određuje iz putanje dolaznog zahteva:
/stats/*
čvorovi
statistika
/metrics/*
čvorovi
metrički
/logs/*
čvorovi
log
/spec/*
čvorovi
specifikacija
svi ostali
čvorovi
proxy
Na primer, sledeći zahtev je pokušao da pristupi informacijama o podovima kubeleta bez dozvole:
Dobijamo Zabranjeno, tako da je zahtev prošao proveru autentifikacije. Da nije, dobili bismo samo poruku Neautorizovano
.
Možemo videti korisničko ime (u ovom slučaju iz tokena)
Proverite kako je resurs bio čvorovi i podresurs proxy (što ima smisla sa prethodnim informacijama)
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)