8.1 KiB
Kubernetes Rolgebaseerde Toegangbeheer (RBAC)
{{#include ../../banners/hacktricks-training.md}}
Rolgebaseerde Toegangbeheer (RBAC)
Kubernetes het 'n autorisatiemodule genaamd Rolgebaseerde Toegangbeheer (RBAC) wat help om gebruiksregte aan die API-bediener toe te ken.
RBAC se toestemmingsmodel is gebou uit drie individuele dele:
- Rol\ClusterRol – Die werklike toestemming. Dit bevat reëls wat 'n stel toestemmings verteenwoordig. Elke reël bevat hulpbronne en werkwoorde. Die werkwoord is die aksie wat op die hulpbron toegepas sal word.
- Onderwerp (Gebruiker, Groep of Diensrekening) – Die objek wat die toestemmings sal ontvang.
- Rolbinding\ClusterRolbinding – Die verbinding tussen Rol\ClusterRol en die onderwerp.
Die verskil tussen “Rolle” en “ClusterRolle” is net waar die rol toegepas sal word – 'n “Rol” sal toegang tot slegs een spesifieke naamruimte verleen, terwyl 'n “ClusterRol” in alle naamruimtes in die kluster gebruik kan word. Boonop kan ClusterRolle ook toegang verleen tot:
- kluster-geskepte hulpbronne (soos knope).
- nie-hulpbron eindpunte (soos /healthz).
- naamruimte-hulpbronne (soos Pods), oor alle naamruimtes.
Vanaf Kubernetes 1.6 en later, is RBAC beleide standaard geaktiveer. Maar om RBAC te aktiveer kan jy iets soos gebruik:
kube-apiserver --authorization-mode=Example,RBAC --other-options --more-options
Templates
In die sjabloon van 'n Rol of 'n ClusterRol moet jy die naam van die rol, die namespace (in rolle) en dan die apiGroups, hulpbronne en werkwoorde van die rol aandui:
- Die apiGroups is 'n array wat die verskillende API namespaces bevat waartoe hierdie reël van toepassing is. Byvoorbeeld, 'n Pod-definisie gebruik apiVersion: v1. Dit kan waardes hê soos rbac.authorization.k8s.io of [*].
- Die hulpbronne is 'n array wat definieer watter hulpbronne hierdie reël van toepassing is. Jy kan al die hulpbronne vind met:
kubectl api-resources --namespaced=true - Die werkwoorde is 'n array wat die toegelate werkwoorde bevat. Die werkwoord in Kubernetes definieer die soort aksie wat jy op die hulpbron moet toepas. Byvoorbeeld, die lys werkwoord word teenoor versamelings gebruik terwyl "get" teenoor 'n enkele hulpbron gebruik word.
Rules Verbs
(Hierdie inligting is geneem van the docs)
| HTTP werkwoord | versoek werkwoord |
|---|---|
| POST | create |
| GET, HEAD | get (vir individuele hulpbronne), list (vir versamelings, insluitend volledige objekinhoud), watch (vir die kyk na 'n individuele hulpbron of versameling hulpbronne) |
| PUT | update |
| PATCH | patch |
| DELETE | delete (vir individuele hulpbronne), deletecollection (vir versamelings) |
Kubernetes kontroleer soms magtiging vir addisionele toestemmings met behulp van gespesialiseerde werkwoorde. Byvoorbeeld:
- PodSecurityPolicy
usewerkwoord oppodsecuritypolicieshulpbronne in diepolicyAPI-groep.- RBAC
bindenescalatewerkwoorde oprolesenclusterroleshulpbronne in dierbac.authorization.k8s.ioAPI-groep.- Authentication
impersonatewerkwoord opusers,groups, enserviceaccountsin die kern API-groep, en dieuserextrasin dieauthentication.k8s.ioAPI-groep.
Warning
Jy kan alle werkwoorde wat elke hulpbron ondersteun vind deur
kubectl api-resources --sort-by name -o wideuit te voer.
Examples
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"]
Byvoorbeeld, jy kan 'n ClusterRole gebruik om 'n spesifieke gebruiker toe te laat om te loop:
kubectl get pods --all-namespaces
Rolbinding en Klasrolbinding
Uit die dokumentasie: 'n Rolbinding gee die toestemmings wat in 'n rol gedefinieer is aan 'n gebruiker of stel gebruikers. Dit hou 'n lys van onderwerpe (gebruikers, groepe, of diensrekeninge), en 'n verwysing na die rol wat toegeken word. 'n Rolbinding gee toestemmings binne 'n spesifieke naamruimte terwyl 'n Klasrolbinding daardie toegang kluster-wyd gee.
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
Toestemmings is additief so as jy 'n clusterRole het met “lys” en “verwyder” geheime kan jy dit byvoeg met 'n Rol met “kry”. Wees dus bewus en toets altyd jou rolle en toestemmings en specifiseer wat TOEGESTAAN is, want alles is standaard VERWEERD.
Opname van 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 Privilege Escalation
{{#ref}} abusing-roles-clusterroles-in-kubernetes/ {{#endref}}
{{#include ../../banners/hacktricks-training.md}}
