Kubernetes Role-Based Access Control(RBAC)

Jifunze na zoezi la Udukuzi wa AWS:Mafunzo ya HackTricks AWS Timu Nyekundu Mtaalam (ARTE) Jifunze na zoezi la Udukuzi wa GCP: Mafunzo ya HackTricks GCP Timu Nyekundu Mtaalam (GRTE)

unga mkono HackTricks

Udhibiti wa Upatikanaji kulingana na Majukumu (RBAC)

Kubernetes ina moduli ya idhini inayoitwa Udhibiti wa Upatikanaji kulingana na Majukumu (RBAC) ambayo husaidia kuweka ruhusa za matumizi kwa seva ya API.

Modeli ya ruhusa ya RBAC imejengwa kutoka kwa sehemu tatu tofauti:

  1. Jukumu/Jukumu la Kikundi - Ruhusa halisi. Ina mipangilio inayowakilisha seti ya ruhusa. Kila maelekezo yanajumuisha rasilimali na vitendo. Kitendo ni hatua itakayotekelezwa kwenye rasilimali.

  2. Mada (Mtumiaji, Kikundi au Akaunti ya Huduma) - Kitu ambacho kitapokea ruhusa.

  3. Kufunga Jukumu/Jukumu la Kikundi - Uunganisho kati ya Jukumu/Jukumu la Kikundi na mada.

Tofauti kati ya "Jukumu" na "Jukumu la Kikundi" ni mahali tu ambapo jukumu litatumika - "Jukumu" litatoa upatikanaji kwa eneo moja tu la kipekee, wakati "Jukumu la Kikundi" linaweza kutumika katika eneo zote katika kikundi. Zaidi ya hayo, Jukumu la Kikundi pia linaweza kutoa upatikanaji kwa:

  • rasilimali za kikundi-eneo (kama vile nodi).

  • vituo vya bila-rasilimali (kama vile /healthz).

  • rasilimali za eneo (kama vile Pods), katika maeneo yote.

Kuanzia Kubernetes 1.6 na kuendelea, sera za RBAC zime wezeshwa kwa chaguo-msingi. Lakini ili kuwezesha RBAC unaweza kutumia kitu kama:

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

Vielelezo

Katika kigezo cha Jukumu au Jukumu la Kikundi cha Kiklaster utahitaji kuonyesha jina la jukumu, eneo (katika majukumu) na kisha apiGroups, rasilimali na maneno ya jukumu:

  • apiGroups ni safu inayojumuisha nafasi za API tofauti ambazo sheria hii inatumika. Kwa mfano, ufafanuzi wa Pod hutumia apiVersion: v1. Inaweza kuwa na thamani kama rbac.authorization.k8s.io au [*].

  • Rasilimali ni safu inayoelezea ni rasilimali zipi sheria hii inatumika. Unaweza kupata rasilimali zote kwa: kubectl api-resources --namespaced=true

  • Maneno ni safu inayojumuisha maneno yanayoruhusiwa. Kitenzi katika Kubernetes hufafanua aina ya hatua unayohitaji kutumia kwa rasilimali. Kwa mfano, kitenzi cha orodha hutumiwa dhidi ya makusanyo wakati "pata" hutumiwa dhidi ya rasilimali moja.

Maneno ya Sheria

(Maelezo haya yalichukuliwa kutoka nyaraka)

Kitenzi cha HTTPkitenzi cha ombi

POST

umba

GET, HEAD

pata (kwa rasilimali binafsi), orodhesha (kwa makusanyo, ikiwa ni pamoja na maudhui kamili ya kitu), angalia (kwa kufuatilia rasilimali binafsi au mkusanyo wa rasilimali)

WEKA

sasisha

KITAMBUA

kipande

ONDOA

futa (kwa rasilimali binafsi), futa mkusanyo (kwa makusanyo)

Kubernetes mara nyingine hufanya uhakiki wa idhini kwa ruhusa za ziada kwa kutumia maneno maalum. Kwa mfano:

  • kitenzi cha tumia kwenye rasilimali za podsecuritypolicies katika kikundi cha API cha sera.

  • maneno ya unganisha na kukuza kwenye rasilimali za majukumu na majukumu ya kikundi katika kikundi cha API cha rbac.authorization.k8s.io.

  • kitenzi cha jitambulishe kwenye watumiaji, makundi, na akaunti za huduma katika kikundi cha API cha msingi, na userextras katika kikundi cha API cha authentication.k8s.io.

Unaweza kupata maneno yote ambayo kila rasilimali inasaidia kwa kutekeleza kubectl api-resources --sort-by name -o wide

Mifano

Jukumu
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"]
Jukumu la Kikundi cha Kikundi
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"]

Kwa mfano, unaweza kutumia ClusterRole kuruhusu mtumiaji fulani kuendesha:

kubectl get pods --all-namespaces

RoleBinding na ClusterRoleBinding

Kutoka kwa nyaraka: RoleBinding inatoa ruhusa zilizoelezwa katika jukumu kwa mtumiaji au kikundi cha watumiaji. Inashikilia orodha ya wahusika (watumiaji, vikundi, au akaunti za huduma), na marejeo kwa jukumu linalopewa. RoleBinding inatoa ruhusa ndani ya namespace maalum wakati ClusterRoleBinding inatoa ufikiaji huo kwa kiwango cha kikundi.

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

Ruhusa ni za kuongezeka kwa hivyo ikiwa una jukumu la kikundi na "orodha" na "futa" siri unaweza kuiongeza na Jukumu na "pata". Kwa hivyo kuwa makini na jaribu jukumu na ruhusa zako na eleza ni NINI KURUHUSIWA, kwa sababu kila kitu ni KUKATALIWA kwa chaguo-msingi.

Kuorodhesha 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

Matumizi ya Majukumu/ Majukumu ya Kikundi kwa Ajili ya Kuongeza Madaraka

Abusing Roles/ClusterRoles in Kubernetes

Jifunze na zoezi la Udukuzi wa AWS:Mafunzo ya HackTricks AWS Timu Nyekundu Mtaalam (ARTE) Jifunze na zoezi la Udukuzi wa GCP: Mafunzo ya HackTricks GCP Timu Nyekundu Mtaalam (GRTE)

unga mkono HackTricks

Last updated