Kubernetes Role-Based Access Control(RBAC)
Керування доступом на основі ролей (RBAC)
У Kubernetes є модуль авторизації з ім'ям Role-Based Access Control (RBAC), який допомагає встановлювати дозволи використання для сервера API.
Модель дозволів RBAC складається з трьох окремих частин:
Суб'єкт (Користувач, Група або ServiceAccount) – Об'єкт, який отримає дозволи.
RoleBinding\ClusterRoleBinding – Зв'язок між Роллю\ClusterRole та суб'єктом.
Відмінність між "Ролями" та "ClusterRoles" полягає лише в тому, де буде застосована роль - "Роль" надасть доступ лише до одного конкретного простору імен, тоді як "ClusterRole" може бути використаний у всіх просторах імен в кластері. Більше того, ClusterRoles також можуть надавати доступ до:
ресурсів з областю кластера (наприклад, вузли).
не-ресурсних кінцевих точок (наприклад, /healthz).
ресурсів з областю імен (наприклад, Поди), у всіх просторах імен.
Починаючи з Kubernetes 1.6, політики RBAC включені за замовчуванням. Але для включення RBAC можна використовувати щось на зразок:
Шаблони
У шаблоні Ролі або Кластерної Ролі вам потрібно вказати ім'я ролі, простір імен (у ролях), а потім apiGroups, ресурси та дії ролі:
apiGroups - це масив, який містить різні простори імен API, до яких застосовується це правило. Наприклад, визначення Pod використовує apiVersion: v1. Він може мати значення, такі як rbac.authorization.k8s.io або [*].
ресурси - це масив, який визначає, до яких ресурсів застосовується це правило. Ви можете знайти всі ресурси за допомогою:
kubectl api-resources --namespaced=true
дії - це масив, який містить дозволені дії. Дія в Kubernetes визначає тип дії, яку потрібно застосувати до ресурсу. Наприклад, дія списку використовується проти колекцій, тоді як "get" використовується проти одного ресурсу.
Дії Правил
(Цю інформацію було взято з документації)
HTTP дія | запит дії |
---|---|
POST | створення |
GET, HEAD | отримати (для окремих ресурсів), список (для колекцій, включаючи повний вміст об'єкта), спостереження (для спостереження окремого ресурсу або колекції ресурсів) |
PUT | оновлення |
PATCH | патч |
DELETE | видалення (для окремих ресурсів), видалення колекції (для колекцій) |
Іноді Kubernetes перевіряє авторизацію для додаткових дозволів, використовуючи спеціалізовані дії. Наприклад:
дія
use
на ресурсиpodsecuritypolicies
в групі APIpolicy
.дії
bind
таescalate
на ресурсиroles
таclusterroles
в групі APIrbac.authorization.k8s.io
.дія
impersonate
накористувачів
,групи
таserviceaccounts
в основній групі API, таuserextras
в групі APIauthentication.k8s.io
.
Ви можете знайти всі дії, які підтримує кожен ресурс, виконавши kubectl api-resources --sort-by name -o wide
Приклади
Наприклад, ви можете використовувати ClusterRole, щоб дозволити певному користувачеві виконувати:
RoleBinding та ClusterRoleBinding
З документації: RoleBinding надає дозволи, визначені в ролі, користувачеві або групі користувачів. Він містить список суб'єктів (користувачів, груп або облікових записів служби) та посилання на роль, яка надається. RoleBinding надає дозволи в межах конкретного простору імен, тоді як ClusterRoleBinding надає доступ на рівні кластера.
Дозволи є додатковими, тому якщо у вас є clusterRole з "list" та "delete" секретами, ви можете додати його з Role з "get". Тому будьте обережні та завжди тестуйте свої ролі та дозволи та вказуйте, що ДОЗВОЛЕНО, оскільки за замовчуванням все ЗАБОРОНЕНО.
Перелік RBAC
Зловживання ролями/ClusterRoles для підвищення привілеїв
pageAbusing Roles/ClusterRoles in KubernetesLast updated