Kubernetes Role-Based Access Control(RBAC)
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)
Kubernetes ima modul autorizacije nazvan Role-Based Access Control (RBAC) koji pomaže u postavljanju dozvola za korišćenje API servera.
RBAC-ov model dozvola se sastoji od tri pojedinačna dela:
Subject (Korisnik, Grupa ili ServiceAccount) – Objekat koji će primiti dozvole.
RoleBinding\ClusterRoleBinding – Povezivanje između Role\ClusterRole i subjekta.
Razlika između “Roles” i “ClusterRoles” je samo u tome gde će se uloga primeniti – “Role” će omogućiti pristup samo jednom specifičnom namespace-u, dok se “ClusterRole” može koristiti u svim namespace-ima u klasteru. Štaviše, ClusterRoles takođe mogu omogućiti pristup:
resursima sa opsegom klastera (kao što su čvorovi).
ne-resursnim krajnjim tačkama (kao što je /healthz).
resursima sa namespace-om (kao što su Pods), u svim namespace-ima.
Od Kubernetes 1.6 pa nadalje, RBAC politike su omogućene po defaultu. Ali da biste omogućili RBAC, možete koristiti nešto poput:
U šablonu Role ili ClusterRole potrebno je naznačiti ime uloge, namespace (u ulogama) i zatim apiGroups, resources i verbs uloge:
apiGroups je niz koji sadrži različite API namespace na koje se ova pravila primenjuju. Na primer, definicija Pod-a koristi apiVersion: v1. Može imati vrednosti kao što su rbac.authorization.k8s.io ili [*].
resources je niz koji definiše koji resursi se primenjuju na ovo pravilo. Sve resurse možete pronaći sa: kubectl api-resources --namespaced=true
verbs je niz koji sadrži dozvoljene glagole. Glagol u Kubernetes-u definiše tip akcije koju treba primeniti na resurs. Na primer, glagol list se koristi za kolekcije dok se "get" koristi za pojedinačni resurs.
(Ove informacije su preuzete iz dokumentacije)
POST
create
GET, HEAD
get (za pojedinačne resurse), list (za kolekcije, uključujući sadržaj celog objekta), watch (za praćenje pojedinačnog resursa ili kolekcije resursa)
PUT
update
PATCH
patch
DELETE
delete (za pojedinačne resurse), deletecollection (za kolekcije)
Kubernetes ponekad proverava autorizaciju za dodatne dozvole koristeći specijalizovane glagole. Na primer:
use
glagol na podsecuritypolicies
resursima u policy
API grupi.
bind
i escalate
glagoli na roles
i clusterroles
resursima u rbac.authorization.k8s.io
API grupi.
impersonate
glagol na users
, groups
, i serviceaccounts
u core API grupi, i userextras
u authentication.k8s.io
API grupi.
Možete pronaći sve glagole koje svaki resurs podržava izvršavanjem kubectl api-resources --sort-by name -o wide
Na primer, možete koristiti ClusterRole da omogućite određenom korisniku da pokrene:
Iz dokumenata: Role binding dodeljuje dozvole definisane u roli korisniku ili skupu korisnika. Sadrži listu subjekata (korisnici, grupe ili servisni nalozi) i referencu na rolu koja se dodeljuje. RoleBinding dodeljuje dozvole unutar specifičnog namespace-a, dok ClusterRoleBinding dodeljuje taj pristup na nivou klastera.
Dozvole su aditivne tako da ako imate clusterRole sa “list” i “delete” tajnama, možete ga dodati sa Role koja ima “get”. Zato budite svesni i uvek testirajte svoje uloge i dozvole i navedite šta je DOZVOLJENO, jer je sve po defaultu ZABRANJENO.
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)