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