Kubernetes Role-Based Access Control(RBAC)
Reading time: 6 minutes
tip
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)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Role-Based Access Control (RBAC)
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:
- Role\ClusterRole – Stvarna dozvola. Sadrži pravila koja predstavljaju skup dozvola. Svako pravilo sadrži resurse i glagole. Glagol je akcija koja će se primeniti na resurs.
- 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 u namespace-u (kao što su Pods), u svim namespace-ima.
Od Kubernetes 1.6 pa nadalje, RBAC politike su omogućene po default-u. Ali da biste omogućili RBAC, možete koristiti nešto poput:
kube-apiserver --authorization-mode=Example,RBAC --other-options --more-options
Šabloni
U šablonu Role ili ClusterRole potrebno je navesti 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 koristi apiVersion: v1. Može imati vrednosti kao što su rbac.authorization.k8s.io ili [*].
- resources je niz koji definiše koje resurse se ova pravila primenjuju. Sve resurse možete pronaći sa:
kubectl api-resources --namespaced=true
- verbs je niz koji sadrži dozvoljene glagole. Glagol u Kubernetes 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.
Pravila Glagoli
(Ove informacije su preuzete iz dokumentacije)
HTTP glagol | glagol zahteva |
---|---|
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:
- PodSecurityPolicy
- glagol
use
napodsecuritypolicies
resursima upolicy
API grupi. - RBAC
- glagoli
bind
iescalate
naroles
iclusterroles
resursima urbac.authorization.k8s.io
API grupi. - Autentifikacija
- glagol
impersonate
nausers
,groups
, iserviceaccounts
u osnovnoj API grupi, iuserextras
uauthentication.k8s.io
API grupi.
warning
Možete pronaći sve glagole koje svaki resurs podržava izvršavanjem kubectl api-resources --sort-by name -o wide
Primeri
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"]
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"]
Na primer, možete koristiti ClusterRole da omogućite određenom korisniku da pokrene:
kubectl get pods --all-namespaces
RoleBinding i ClusterRoleBinding
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.
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
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
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.
Enumeracija 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
Zloupotreba Role/ClusterRoles za Eskalaciju Privilegija
Abusing Roles/ClusterRoles in Kubernetes
tip
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)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.