Kubernetes Role-Based Access Control(RBAC)

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Kontrola pristupa na osnovu uloga (RBAC)

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:

  1. Uloga/ClusterUloga ­– 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 dobiti dozvole.

  3. 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:

kube-apiserver --authorization-mode=Example,RBAC --other-options --more-options

Šabloni

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.

Glagoli pravila

(Ove informacije su preuzete sa dokumentacije)

HTTP glagolglagol 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

Primeri

Uloga
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 biste omogućili određenom korisniku da pokrene:

kubectl get pods --all-namespaces

RoleBinding i ClusterRoleBinding

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.

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 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.

Nabrajanje RBAC-a

# 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 uloga/klaster uloga za eskalaciju privilegija

pageAbusing Roles/ClusterRoles in Kubernetes
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Last updated