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 w ustawianiu uprawnień do serwera API.
Model uprawnień RBAC składa się z trzech części:
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.
Podmiot (Użytkownik, Grupa lub Konto usługi) – Obiekt, który otrzyma uprawnienia.
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 RBAC są domyślnie włączone. Ale aby włączyć RBAC, można użyć czegoś takiego jak:
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 HTTP | Czasownik żą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ówpodsecuritypolicies
w grupie APIpolicy
.czasowniki
bind
iescalate
dla zasobówroles
iclusterroles
w grupie APIrbac.authorization.k8s.io
.czasownik
impersonate
dla zasobówusers
,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 polecenie kubectl api-resources --sort-by name -o wide
Przykłady
Na przykład, możesz 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 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.
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
Wykorzystywanie ról/ClusterRoles do eskalacji uprawnień
pageAbusing Roles/ClusterRoles in KubernetesLast updated