Управление правами доступа для SQL-хранилища
Этот документ содержит руководство по настройке и управлению правами доступа при использовании SQL в качестве хранилища данных.
Введение
Для управления правами доступа Helm использует функциональность RBAC в Kubernetes. При использовании SQL-хранилища роли Kubernetes не могут использоваться для определения того, имеет ли пользователь доступ к конкретному ресурсу. В этом документе описывается, как создавать и управлять такими правами.
Инициализация
При первом подключении Helm CLI к вашей базе данных клиент проверяет, была ли она ранее инициализирована. Если нет, необходимая настройка выполняется автоматически. Для этой инициализации требуются права администратора на схему public или, как минимум, возможность:
- создавать таблицы
- назначать привилегии на схему public
После выполнения миграции в вашей базе данных все остальные роли смогут использовать клиент.
Предоставление привилегий пользователю без прав администратора в PostgreSQL
Для управления правами доступа драйвер SQL-хранилища использует функцию RLS (Row Level Security — безопасность на уровне строк) в PostgreSQL. RLS позволяет всем пользователям читать и записывать данные в одну и ту же таблицу, не имея при этом возможности манипулировать строками, к которым им явно не предоставлен доступ.
По умолчанию любая роль без соответствующих привилегий будет получать пустой список при выполнении helm list и не сможет получить или изменить какой-либо ресурс в кластере.
Рассмотрим, как предоставить роли доступ к определённым namespace:
CREATE POLICY <name> ON releases_v1 FOR ALL TO <role> USING (namespace = 'default');
Эта команда предоставляет роли role права на чтение и запись всех ресурсов, соответствующих условию namespace = 'default'. После создания этой политики пользователь, подключённый к базе данных от имени роли role, сможет видеть все релизы в namespace default при выполнении helm list, а также изменять и удалять их.
С помощью RLS привилегии можно настраивать детально. Вы можете ограничивать доступ на основе различных столбцов таблицы:
- key
- type
- body
- name
- namespace
- version
- status
- owner
- createdAt
- modifiedAt