Kubernetes Role-Based Access Control(RBAC)
Last updated
Last updated
Kubernetes ima modul za autorizaciju nazvan Kontrola pristupa na osnovu uloga (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 dobiti dozvole.
RoleBinding/ClusterRoleBinding – Veza između Uloge/ClusterUloge i subjekta.
Razlika između "Uloga" i "ClusterUloga" je samo gde će se uloga primeniti - "Uloga" će omogućiti pristup samo jednom specifičnom namespace-u, dok se "ClusterUloga" može koristiti u svim namespace-ima u klasteru. Osim toga, ClusterUloge takođe mogu omogućiti pristup:
klasterom obuhvaćenim resursima (kao što su čvorovi).
non-resource endpointima (kao što je /healthz).
resursima u namespace-u (kao što su Podovi), u svim namespace-ima.
Od verzije Kubernetes-a 1.6 nadalje, RBAC politike su podrazumevano omogućene. Ali da biste omogućili RBAC, možete koristiti nešto poput:
U šablonu Uloge ili ClusterRole-a treba navesti ime uloge, prostor imena (u ulogama) i zatim apiGroups, resources i verbs uloge:
apiGroups je niz koji sadrži različite API prostore imena na koje se ova pravila odnose. 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 na koje resurse se primenjuju ova pravila. 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 vrstu radnje koju treba primeniti na resurs. Na primer, glagol "list" se koristi za kolekcije, dok se "get" koristi za pojedinačne resurse.
(Ove informacije su preuzete sa dokumentacije)
HTTP glagol | glagol zahteva |
---|---|
POST | create |
GET, HEAD | get (za pojedinačne resurse), list (za kolekcije, uključujući pun sadržaj 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:
glagol use
na resursima podsecuritypolicies
u API grupi policy
.
glagoli bind
i escalate
na resursima roles
i clusterroles
u API grupi rbac.authorization.k8s.io
.
glagol impersonate
na resursima users
, groups
i serviceaccounts
u osnovnoj API grupi, i userextras
u API grupi authentication.k8s.io
.
Možete pronaći sve glagole koje podržava svaki resurs izvršavanjem kubectl api-resources --sort-by name -o wide
Na primer, možete koristiti ClusterRole da biste omogućili određenom korisniku da pokrene:
Iz dokumentacije: RoleBinding dodeljuje dozvole definisane u ulozi korisniku ili grupi korisnika. On sadrži listu subjekata (korisnika, grupa ili servisnih naloga) i referencu na dodeljenu ulogu. RoleBinding dodeljuje dozvole unutar određenog namespace-a, dok ClusterRoleBinding dodeljuje pristup na nivou celog klastera.
Dozvole se sabiraju, pa ako imate clusterRole sa "list" i "delete" tajnama, možete ga dodati sa Role sa "get". Zato budite oprezni i uvek testirajte svoje uloge i dozvole i navedite šta je DOZVOLJENO, jer je sve ZABRANJENO prema podrazumevanim postavkama.