Kubernetes Role-Based Access Control(RBAC)

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Andere manieren om HackTricks te ondersteunen:

Rolgebaseerde Toegangsbeheer (RBAC)

Kubernetes heeft een autoriseringsmodule genaamd Rolgebaseerde Toegangsbeheer (RBAC) die helpt bij het instellen van machtigingen voor de API-server.

Het machtigingsmodel van RBAC is opgebouwd uit drie afzonderlijke onderdelen:

  1. Rol/ClusterRol - De daadwerkelijke machtiging. Het bevat regels die een set machtigingen vertegenwoordigen. Elke regel bevat resources en werkwoorden. Het werkwoord is de actie die zal worden toegepast op de resource.

  2. Onderwerp (Gebruiker, Groep of ServiceAccount) - Het object dat de machtigingen zal ontvangen.

  3. RolBinding/ClusterRolBinding - De verbinding tussen Rol/ClusterRol en het onderwerp.

Het verschil tussen "Rollen" en "ClusterRollen" is alleen waar de rol zal worden toegepast - een "Rol" geeft toegang tot slechts één specifieke namespace, terwijl een "ClusterRol" kan worden gebruikt in alle namespaces in de cluster. Bovendien kunnen ClusterRollen ook toegang verlenen tot:

  • cluster-omvangrijke resources (zoals nodes).

  • niet-resource eindpunten (zoals /healthz).

  • resources met een namespace (zoals Pods), in alle namespaces.

Vanaf Kubernetes 1.6 zijn RBAC-beleidsregels standaard ingeschakeld. Maar om RBAC in te schakelen, kun je iets als het volgende gebruiken:

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

Templaat

In die templaat van 'n Rol of 'n ClusterRol moet jy die naam van die rol, die namespace (in rolle) en dan die apiGroups, resources en verbs van die rol aandui:

  • Die apiGroups is 'n reeks wat die verskillende API namespaces bevat waarop hierdie reël van toepassing is. Byvoorbeeld, 'n Pod-definisie gebruik apiVersion: v1. Dit kan waardes hê soos rbac.authorization.k8s.io of [*].

  • Die resources is 'n reeks wat bepaal op watter hulpbronne hierdie reël van toepassing is. Jy kan al die hulpbronne vind met: kubectl api-resources --namespaced=true

  • Die verbs is 'n reeks wat die toegelate werkwoorde bevat. Die werkwoord in Kubernetes definieer die tipe aksie wat jy op die hulpbron moet toepas. Byvoorbeeld, die lyswerkwoord word gebruik teenoor versamelings terwyl "kry" teenoor 'n enkele hulpbron gebruik word.

Reëlwerkwoorde

(Hierdie inligting is geneem van die dokumentasie)

HTTP-werkwoordversoekwerkwoord

POST

skep

GET, HEAD

kry (vir individuele hulpbronne), lys (vir versamelings, insluitend volledige objekinhoud), kyk (vir die kyk na 'n individuele hulpbron of versameling hulpbronne)

PUT

opdateer

PATCH

lap

DELETE

verwyder (vir individuele hulpbronne), deletecollection (vir versamelings)

Kubernetes kontroleer soms outorisasie vir addisionele toestemmings deur gespesialiseerde werkwoorde te gebruik. Byvoorbeeld:

  • use werkwoord op podsecuritypolicies hulpbronne in die policy API-groep.

  • bind en escalate werkwoorde op roles en clusterroles hulpbronne in die rbac.authorization.k8s.io API-groep.

  • impersonate werkwoord op users, groups, en serviceaccounts in die kern API-groep, en die userextras in die authentication.k8s.io API-groep.

Jy kan alle werkwoorde wat elke hulpbron ondersteun vind deur kubectl api-resources --sort-by name -o wide uit te voer.

Voorbeelde

Rol
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"]

Byvoorbeeld, jy kan 'n ClusterRole gebruik om 'n spesifieke gebruiker toe te laat om uit te voer:

kubectl get pods --all-namespaces

RoleBinding en ClusterRoleBinding

Van die dokumentasie: 'n role binding verleen die toestemmings wat in 'n rol gedefinieer is aan 'n gebruiker of 'n stel gebruikers. Dit bevat 'n lys van onderwerpe (gebruikers, groepe, of diensrekeninge), en 'n verwysing na die verleen rol. 'n RoleBinding verleen toestemmings binne 'n spesifieke namespace, terwyl 'n ClusterRoleBinding daardie toegang oor die hele kluster verleen.

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

Permissies is additief, so as jy 'n clusterRole het met "lys" en "verwyder" geheime, kan jy dit byvoeg met 'n Role met "kry". Wees dus bewus en toets altyd jou rolle en toestemmings en spesifiseer wat TOEGELAAT word, want alles is standaard VERBODEN.

Enumerating 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

Misbruik Rol/ClusterRoles vir Bevoorregte Escalasie

Abusing Roles/ClusterRoles in Kubernetes
Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Last updated