Управління правами доступу для SQL-сховища

Цей документ надає рекомендації користувачам щодо налаштування та управління правами доступу при використанні SQL-сховища.

Вступ

Для керування правами доступу Helm використовує функцію RBAC (Role-Based Access Control) Kubernetes. Проте, коли використовується SQL-сховище, ролі Kubernetes не можуть бути використані для визначення, чи може користувач отримати доступ до певного ресурсу. У цьому документі описано, як створювати та керувати такими правами доступу.

Ініціалізація

При першому підключенні CLI Helm до вашої бази даних клієнт перевірить, чи було її попередньо ініціалізовано. Якщо ні, клієнт автоматично подбає про необхідне налаштування. Для цього ініціалізація потребує адміністративних привілеїв у схемі public або принаймні можливості:

  • створення таблиці;
  • надання привілеїв на схему public.

Після виконання міграції в базі даних всі інші ролі зможуть використовувати клієнт.

Надання привілеїв неадміністративному користувачеві в PostgreSQL

Для керування правами доступу драйвер SQL-сховища використовує функцію RLS (Row-Level Security) PostgreSQL. RLS дозволяє всім користувачам читати/записувати в одну й ту ж таблицю, але без можливості маніпулювати однаковими рядками, якщо їм це не було явно дозволено. Стандартно будь-яка роль, яка не отримала відповідних привілеїв, завжди отримуватиме порожній список при виконанні команди helm list і не матиме змоги отримати або змінити будь-який ресурс у кластері.

Розглянемо, як надати певній ролі доступ до конкретних просторів імен:

CREATE POLICY <назва> ON releases_v1 FOR ALL TO <роль> USING (namespace = 'default');

Ця команда надасть дозволи на читання та запис всіх ресурсів, які відповідають умові namespace = 'default', для ролі role. Після створення цієї політики користувач, підключений до бази даних від імені ролі role, зможе бачити всі випуски в просторі імен default при виконанні команди helm list, а також змінювати та видаляти їх.

Привілеї можна керувати детально за допомогою RLS, і можливо буде корисним обмежити доступ, залежно від різних стовпців таблиці:

  • key
  • type
  • body
  • name
  • namespace
  • version
  • status
  • owner
  • createdAt
  • modifiedAt