Управление доступом в Managed Service for Trino
Managed Service for Trino предоставляет унифицированный доступ к данным из множества источников: хранилищ, баз данных и внешних сервисов. Один кластер Managed Service for Trino может обслуживать множество разных пользователей и рабочих нагрузок. Управление доступом в Managed Service for Trino позволяет:
- Разграничить доступ к объектам кластера для пользователей и групп с разными ролями и задачами.
- Предотвратить несанкционированные операции с данными.
- Избежать злоупотребления системными ресурсами со стороны пользователей.
Вы можете управлять доступом в Managed Service for Trino при помощи правил доступа — декларативных описаний, которые определяют разрешенные и запрещенные операции над объектами кластера для пользователей и групп.
Структура правил
Доступ пользователей к объектам кластера Managed Service for Trino определяется комбинацией двух видов правил:
- Правила верхнего уровня — контролируют доступ ко всем объектам каталога.
- Детализированные правила — контролируют доступ к отдельным схемам, таблицам и представлениям, функциям, процедурам, запросам, системным свойствам сессии или свойствам сессии каталога.
Правило доступа описывает:
- Пользователей, к которым применяется правило.
- Объекты кластера Managed Service for Trino, к которым применяется правило.
- Привилегии пользователей — какие действия разрешено выполнять пользователям над объектами.
В параметре users указываются идентификаторы пользователей Identity and Access Management, а в параметре groups — идентификаторы групп, а не логины пользователей или названия групп. Получить эти значения можно с помощью SQL-запросов.
Объекты можно задавать в виде списка или через регулярное выражение, которому должно удовлетворять имя объекта.
Примечание
Действие правил распространяется на объекты, которые были созданы как до, так и после задания правила.
При обращении пользователя к объекту проверяются все правила для объектов этого типа. Правила проверяются в порядке их объявления. Применяется первое найденное правило, которое соответствует паре пользователь-объект.
Подробнее в разделе Управление доступом в Managed Service for Trino.
Доступ к представлениям
Представление (VIEW) — виртуальная таблица, определяемая сохраненным SQL-запросом. Данные из представления можно запрашивать так же, как из обычной таблицы.
Правила доступа к таблицам распространяются и на представления. Чтобы правило применялось к представлению, укажите его имя в поле имени таблицы, а также соответствующие каталог и схему.
Для создания представления пользователю нужны привилегия OWNERSHIP на создаваемое представление и уровень доступа ALL к каталогу, в котором оно будет находиться. Для чтения данных, на которых основано представление, нужны привилегия SELECT на таблицы-источники и доступ к их каталогам.
Режим проверки прав на таблицы-источники задается в команде CREATE VIEW
SECURITY DEFINER— используется по умолчанию. При чтении представления доступ к таблицам-источникам проверяется от имени владельца представления. Если запрос выполняет другой пользователь, у владельца также проверяются привилегииSELECTиGRANT_SELECTна таблицы-источники и уровень доступаALLк их каталогам. Пользователю, который выполняет запрос, нужны привилегияSELECTна само представление и доступ к его каталогу.SECURITY INVOKER— доступ к таблицам-источникам проверяется от имени пользователя, который выполняет запрос. Каждому пользователю нужны права на чтение как самого представления, так и таблиц-источников.
Важно
В Managed Service for Trino при проверке доступа к таблицам-источникам в режиме SECURITY DEFINER группы владельца представления не учитываются. Если доступ выдан владельцу только через группы, чтение представления может завершиться ошибкой Access Denied, в том числе при запросе от самого владельца.
Чтобы использовать SECURITY DEFINER, задайте необходимые правила доступа к источникам непосредственно для владельца: укажите его идентификатор в параметре users и не задавайте groups в этих правилах. Учитывайте порядок правил: применяется первое подходящее правило для каждого типа объектов.
Если пользователи должны читать данные с собственными правами доступа, создайте или пересоздайте представление с SECURITY INVOKER.
Узнать режим существующего представления можно с помощью команды:
SHOW CREATE VIEW <имя_каталога>.<имя_схемы>.<имя_представления>;
Команда SHOW CREATE VIEW доступна только владельцу представления.
Пример создания представления с проверкой прав пользователя, выполняющего запрос:
CREATE VIEW <имя_каталога>.<имя_схемы>.<имя_представления>
SECURITY INVOKER
AS SELECT * FROM <имя_каталога_источника>.<имя_схемы_источника>.<имя_таблицы_источника>;
Для представлений, созданных в Hive, действуют дополнительные настройки Hive-коннектора. Особенности параметра hive.hive-views.run-as-invoker описаны в разделе Создание каталога Hive.
Проверка пользователя и групп
Чтобы узнать, какие идентификаторы Trino использует при проверке правил доступа, в сессии с ошибкой выполните запросы:
SELECT current_user;
SELECT current_groups();
current_user возвращает идентификатор пользователя, выполняющего запрос, а current_groups() — список идентификаторов его групп. Используйте эти значения в параметрах users и groups правил доступа.
Проверьте в правилах доступа кластера, что пользователю разрешены нужные действия с объектом. Чтобы определить, применяется ли правило к пользователю, проверьте условия users и groups по полученным идентификаторам.
Например, для чтения таблицы hive.sales.orders нужны уровень доступа READ_ONLY или ALL к каталогу hive и привилегия SELECT на таблицу orders в схеме sales этого каталога.
Для каждого типа объектов действует первое подходящее правило: привилегии из нескольких подходящих правил одного типа не суммируются. При чтении представления с SECURITY DEFINER дополнительно проверьте правила, заданные для его владельца.
Управление правилами
В Managed Service for Trino правила доступа являются управляемым ресурсом кластера. Это позволяет управлять правилами при помощи Yandex Cloud CLI, Terraform и gRPC API. Вы можете задать правила доступа при создании нового кластера или изменении существующего кластера.
Изменение правил доступа не требует перезапуска узлов кластера Managed Service for Trino.
Автоматическая актуализация правил
Managed Service for Trino поддерживает актуальность правил доступа при переименовании или удалении каталогов:
- Имена и идентификаторы каталогов проверяются на валидность. Если каталог с указанным именем или идентификатором не существует, правило не будет создано.
- При переименовании каталога его имя автоматически изменится во всех правилах, в которых оно указано.
- При удалении каталога его имя и идентификатор автоматически удалятся из всех правил, в которых они указаны. При удалении единственного указанного в правиле каталога само правило автоматически удалится.