Kubernetes Role-Based Access Control(RBAC)

Dowiedz się, jak hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Kontrola dostępu oparta na rolach (RBAC)

Kubernetes posiada moduł autoryzacji o nazwie Kontrola dostępu oparta na rolach (RBAC), który pomaga w ustawianiu uprawnień do serwera API.

Model uprawnień RBAC składa się z trzech części:

  1. Rola/Rola klastra ­– Faktyczne uprawnienie. Zawiera reguły, które reprezentują zestaw uprawnień. Każda reguła zawiera zasoby i czasowniki. Czasownik to działanie, które zostanie zastosowane do zasobu.

  2. Podmiot (Użytkownik, Grupa lub Konto usługi) – Obiekt, który otrzyma uprawnienia.

  3. RoleBinding/Rola klastra i powiązanie – Połączenie między Rolą/Rolą klastra a podmiotem.

Różnica między "Rolami" a "Rolami klastra" polega tylko na tym, gdzie rola zostanie zastosowana - "Rola" przyznaje dostęp tylko do jednego konkretnego namespace, podczas gdy "Rola klastra" może być używana we wszystkich namespace'ach w klastrze. Ponadto, Role klastra mogą również przyznawać dostęp do:

  • zasobów o zasięgu klastra (takich jak węzły).

  • punktów końcowych bez zasobów (takich jak /healthz).

  • zasobów z przestrzeni nazw (takich jak Pod), we wszystkich namespace'ach.

Od wersji Kubernetes 1.6, polityki RBACdomyślnie włączone. Ale aby włączyć RBAC, można użyć czegoś takiego jak:

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

Szablony

W szablonie Role lub ClusterRole musisz podać nazwę roli, przestrzeń nazw (w przypadku ról) oraz apiGroups, resources i verbs roli:

  • apiGroups to tablica zawierająca różne przestrzenie nazw API, do których ma zastosowanie ta reguła. Na przykład, definicja Pod używa apiVersion: v1. Może mieć wartości takie jak rbac.authorization.k8s.io lub [*].

  • resources to tablica definiująca, do jakich zasobów ma zastosowanie ta reguła. Możesz znaleźć wszystkie zasoby za pomocą polecenia: kubectl api-resources --namespaced=true

  • verbs to tablica zawierająca dozwolone czasowniki. Czasownik w Kubernetes definiuje rodzaj działania, które musisz zastosować do zasobu. Na przykład, czasownik list jest używany dla kolekcji, podczas gdy "get" jest używany dla pojedynczego zasobu.

Czasowniki reguł

(Te informacje zostały zaczerpnięte z dokumentacji)

Czasownik HTTPCzasownik żądania

POST

create

GET, HEAD

get (dla pojedynczych zasobów), list (dla kolekcji, w tym pełnej zawartości obiektu), watch (do obserwowania pojedynczego zasobu lub kolekcji zasobów)

PUT

update

PATCH

patch

DELETE

delete (dla pojedynczych zasobów), deletecollection (dla kolekcji)

Kubernetes czasami sprawdza autoryzację dla dodatkowych uprawnień za pomocą specjalnych czasowników. Na przykład:

  • czasownik use dla zasobów podsecuritypolicies w grupie API policy.

  • czasowniki bind i escalate dla zasobów roles i clusterroles w grupie API rbac.authorization.k8s.io.

  • czasownik impersonate dla zasobów users, groups i serviceaccounts w grupie API core, oraz userextras w grupie API authentication.k8s.io.

Możesz znaleźć wszystkie czasowniki obsługiwane przez każdy zasób wykonując polecenie kubectl api-resources --sort-by name -o wide

Przykłady

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 przykład, możesz użyć ClusterRole, aby umożliwić określonemu użytkownikowi uruchamianie:

kubectl get pods --all-namespaces

RoleBinding i ClusterRoleBinding

Z dokumentacji: RoleBinding przyznaje uprawnienia zdefiniowane w roli użytkownikowi lub grupie użytkowników. Przechowuje listę podmiotów (użytkowników, grup lub kont usług) oraz odwołanie do przyznanej roli. RoleBinding przyznaje uprawnienia w określonym namespace, podczas gdy ClusterRoleBinding przyznaje dostęp na poziomie całego klastra.

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

Uprawnienia są dodawane, więc jeśli masz clusterRole z uprawnieniami "list" i "delete" dla sekretów, możesz dodać go z Role z uprawnieniem "get". Bądź świadomy i zawsze testuj swoje role i uprawnienia oraz określ, co jest DOZWOLONE, ponieważ domyślnie wszystko jest ZABRONIONE.

Wyliczanie 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

Wykorzystywanie ról/ClusterRoles do eskalacji uprawnień

pageAbusing Roles/ClusterRoles in Kubernetes
Dowiedz się, jak hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated