Kubernetes Role-Based Access Control(RBAC)
Kontrola dostępu oparta na rolach (RBAC)
Kubernetes posiada moduł autoryzacji o nazwie Kontrola dostępu oparta na rolach (RBAC), który pomaga ustawić uprawnienia do wykorzystania serwera API.
Model uprawnień RBAC składa się z trzech indywidualnych części:
Rola/ClusterRole – Faktyczne uprawnienie. Zawiera zasady, które reprezentują zestaw uprawnień. Każda zasada zawiera zasoby i czasowniki. Czasownik to działanie, które zostanie zastosowane do zasobu.
Podmiot (Użytkownik, Grupa lub ServiceAccount) – Obiekt, który otrzyma uprawnienia.
RoleBinding/ClusterRoleBinding – Połączenie między Rolą/ClusterRole a podmiotem.
![](https://cloud.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Fwww.cyberark.com%2Fwp-content%2Fuploads%2F2018%2F12%2Frolebiding_serviceaccount_and_role-1024x551.png&width=768&dpr=4&quality=100&sign=8a74ea80&sv=1)
Różnica między „Rolami” a „ClusterRoles” polega tylko na tym, gdzie rola zostanie zastosowana – „Rola” udzieli dostępu tylko do jednego konkretnego namespace, podczas gdy „ClusterRole” może być używany we wszystkich namespace'ach w klastrze. Ponadto ClusterRoles mogą również udzielać dostępu do:
zasobów o zasięgu klastra (np. węzły).
punktów końcowych bez zasobów (np. /healthz).
zasobów z przestrzeni nazw (np. Pody), we wszystkich namespace'ach.
Od wersji Kubernetes 1.6, polityki RBAC są domyślnie włączone. Aby jednak włączyć RBAC, można użyć czegoś w stylu:
Szablony
W szablonie Roli lub ClusterRole musisz wskazać nazwę roli, przestrzeń nazw (w rolach), a następnie apiGroups, zasoby i czasowniki 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 [*].
zasoby to tablica definiująca do jakich zasobów ma zastosowanie ta reguła. Możesz znaleźć wszystkie zasoby za pomocą:
kubectl api-resources --namespaced=true
czasowniki to tablica zawierająca dozwolone czasowniki. Czasownik w Kubernetes definiuje rodzaj działania, które trzeba zastosować do zasobu. Na przykład czasownik list jest używany wobec kolekcji, podczas gdy "get" jest używany wobec pojedynczego zasobu.
Czasowniki Reguł
(Te informacje zostały zaczerpnięte z dokumentacji)
Czasownik HTTP | czasownik żądania |
---|---|
POST | create |
GET, HEAD | get (dla poszczególnych 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 poszczególnych zasobów), deletecollection (dla kolekcji) |
Kubernetes czasami sprawdza autoryzację dla dodatkowych uprawnień, używając specjalizowanych czasowników. Na przykład:
czasownik
use
na zasobachpodsecuritypolicies
w grupie APIpolicy
.czasowniki
bind
iescalate
na zasobachroles
iclusterroles
w grupie APIrbac.authorization.k8s.io
.czasownik
impersonate
na zasobachusers
,groups
iserviceaccounts
w grupie APIcore
, orazuserextras
w grupie APIauthentication.k8s.io
.
Możesz znaleźć wszystkie czasowniki obsługiwane przez każdy zasób wykonując kubectl api-resources --sort-by name -o wide
Przykłady
Na przykład można użyć ClusterRole, aby umożliwić określonemu użytkownikowi uruchamianie:
RoleBinding i ClusterRoleBinding
Z dokumentacji: RoleBinding przyznaje uprawnienia zdefiniowane w roli użytkownikowi lub zestawowi użytkowników. Zawiera listę podmiotów (użytkowników, grup lub kont usług) oraz odwołanie do przyznanej roli. RoleBinding przyznaje uprawnienia w określonej przestrzeni nazw, podczas gdy ClusterRoleBinding przyznaje ten dostęp na poziomie klastra.
Uprawnienia są dodawane więc jeśli masz clusterRole z "list" i "delete" secrets, możesz dodać go z Role z "get". Bądź więc świadomy i zawsze testuj swoje role i uprawnienia i określ, co jest DOZWOLONE, ponieważ domyślnie WSZYSTKO jest ZABRONIONE.
Wyliczanie RBAC
Nadużywanie ról/ClusterRoles do eskalacji uprawnień
Abusing Roles/ClusterRoles in KubernetesLast updated