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

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:

  1. 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.
  2. Subject (Korisnik, Grupa ili ServiceAccount) – Objekat koji će primiti dozvole.
  3. 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 glagolglagol zahteva
POSTcreate
GET, HEADget (za pojedinačne resurse), list (za kolekcije, uključujući sadržaj celog objekta), watch (za praćenje pojedinačnog resursa ili kolekcije resursa)
PUTupdate
PATCHpatch
DELETEdelete (za pojedinačne resurse), deletecollection (za kolekcije)

Kubernetes ponekad proverava autorizaciju za dodatne dozvole koristeći specijalizovane glagole. Na primer:

  • PodSecurityPolicy
  • glagol use na podsecuritypolicies resursima u policy API grupi.
  • RBAC
  • glagoli bind i escalate na roles i clusterroles resursima u rbac.authorization.k8s.io API grupi.
  • Autentifikacija
  • glagol impersonate na users, groups, i serviceaccounts u osnovnoj API grupi, i userextras u authentication.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

Role
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"]
ClusterRole
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.

RoleBinding
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
ClusterRoleBinding
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

bash
# 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