Learning Platform
Глоссарий Troubleshooting
Урок 15.04 · 23 мин
Средний
securityauthorizationaccess-control

Авторизация: file-based access control, Ranger, OPA

В прошлом уроке кластер научился отвечать на вопрос «кто ты» — аутентификация установила личность клиента. Теперь — второй вопрос: «что тебе можно». Установленному пользователю нужно разрешить читать одни таблицы и запретить другие, дать или не дать создавать схемы, ограничить доступ к каталогам. Это и есть авторизация — access control.

Trino не навязывает один способ авторизации. Есть встроенный system access control, есть file-based правила, есть интеграция с Apache Ranger и с Open Policy Agent. Этот урок разбирает все варианты и показывает, когда какой выбрать.


System access control: точка решения

Авторизацию в Trino выполняет компонент system access control. Каждый раз, когда запрос пытается что-то сделать — прочитать таблицу, создать схему, обратиться к каталогу, — координатор спрашивает system access control: «пользователю X можно это действие?». Ответ да или нет определяет, продолжится операция или будет отклонена.

System access control: каждое действие проходит проверку
Запрос пользователяАутентифицированный пользователь хочет действие: SELECT из таблицы, CREATE SCHEMA, доступ к каталогу
запрос разрешения
System access controlКомпонент авторизации. Получив действие и личность пользователя, выносит вердикт по своей политике
разрешено / отклонено
Выполнить или отказатьДа — операция продолжается. Нет — запрос отклоняется с ошибкой доступа

System access control — это интерфейс с несколькими реализациями. Какая реализация подключена, такая политика и действует. Выбор реализации — и есть выбор модели авторизации кластера.


Встроенный system access control

Из коробки Trino предлагает встроенный system access control с тремя базовыми режимами:

РежимЧто делает
ALLOW_ALLразрешает всё всем — авторизации фактически нет
READ_ONLYразрешает только чтение; любые операции записи и изменения запрещены
FILEрешения по правилам из конфигурационного файла (file-based access control)

ALLOW_ALL — режим по умолчанию в простейшей установке; для продакшена он непригоден, потому что не ограничивает никого. READ_ONLY — грубый, но иногда полезный режим: кластер только для аналитики-чтения, никакого DML и DDL. А вот FILE — это уже настоящая, гранулярная авторизация.

WARNING

ALLOW_ALL означает отсутствие авторизации: любой аутентифицированный пользователь может всё. Это приемлемо для локального эксперимента, но недопустимо для продакшена. Прод-кластер обязан иметь осмысленный access control — как минимум FILE, а в зрелых окружениях Ranger или OPA.


File-based access control

File-based access control — режим FILE встроенного system access control — задаёт правила доступа в конфигурационном файле, обычно JSON.

Файл описывает набор правил: какие пользователи к каким каталогам, схемам и таблицам и с каким уровнем доступа допущены. Правила сопоставляются с действием запроса, и решение выносится по совпавшему правилу. Можно разрешить пользователю analyst только чтение каталога iceberg, дать команде etl полный доступ к определённым схемам, закрыть всё остальное.

Подключается через свойство в etc/access-control.properties:

# etc/access-control.properties
access-control.name=file
security.config-file=etc/rules.json

Сильная сторона file-based — простота и автономность: правила прямо в файле, никаких внешних систем, всё видно в одном месте, легко версионировать в git. Слабая сторона — масштабируемость управления: на сотни пользователей, десятки команд и тысячи таблиц редактирование одного JSON вручную становится громоздким и хрупким, а централизованного аудита изменений нет.

Поэтому file-based access control хорош для небольших и средних установок и для команд, которым достаточно правил «в коде». Для крупных корпоративных окружений с централизованным управлением доступом существуют другие варианты — Ranger и OPA.


Apache Ranger plugin

Apache Ranger — отдельный продукт, платформа централизованного управления безопасностью данных, распространённая в enterprise-окружениях (исторически — мир Hadoop). У Trino есть plugin для интеграции с Ranger.

Идея: политики доступа задаются и хранятся в Ranger, в его собственном UI и репозитории политик. Trino через plugin обращается к Ranger за решениями по авторизации. Кластер Trino перестаёт быть владельцем политик — он становится одним из их потребителей.

Что это даёт. Ranger управляет доступом сразу ко многим системам — не только к Trino, но и к другим компонентам data-платформы. Политики, аудит доступа, администрирование — централизованы в одном месте. Для организации с большим парком data-систем это означает единую точку управления безопасностью вместо разрозненных конфигов в каждой системе.

File-based vs централизованный access control
File-based: политики внутри TrinoПравила в JSON-файле на кластере Trino. Просто, автономно, версионируется в git. Но управление не масштабируется на крупное окружение
масштаб растёт — нужна централизация
Ranger / OPA: политики во внешней системеПолитики живут во внешней системе (Ranger или OPA), Trino обращается к ней за решениями. Централизованное управление и аудит для большого окружения

Open Policy Agent (OPA)

Open Policy Agent (OPA) — ещё один способ внешней авторизации, по духу более «облачно-нативный». OPA — это универсальный движок политик: политики пишутся на специальном декларативном языке политик, а приложения спрашивают OPA «можно ли это действие» и получают вердикт.

У Trino есть OPA access control. Механика та же, что с Ranger по сути: Trino делегирует решение об авторизации внешнему движку — здесь OPA. Координатор отправляет OPA контекст (кто пользователь, что за действие, над каким объектом), OPA применяет политики и возвращает «разрешено» или «отклонено».

Чем OPA отличается по подходу. OPA — стандартный, не привязанный к data-миру движок политик: одним и тем же OPA организация авторизует доступ в Kubernetes, в микросервисах, в API — и в Trino заодно. Политики как код на едином языке политик, единый движок для всей инфраструктуры. Это близко командам с GitOps-культурой и желанием держать всю авторизацию в одном стиле.

Вариант авторизацииГде живут политикиКогда выбирать
ALLOW_ALLнигде, доступ открыттолько локальный эксперимент
READ_ONLYвстроенокластер строго для чтения
File-based (FILE)JSON-файл на кластеремалые и средние установки, правила «в коде»
Apache Ranger pluginв Rangerenterprise, централизация по парку data-систем
Open Policy Agentв OPA, на языке политикcloud-native, единый движок политик для всей инфраструктуры

Как выбрать модель авторизации

Выбор опирается на масштаб и контекст организации:

  1. Локальный эксперимент, песочницаALLOW_ALL сойдёт, но это не продакшен.
  2. Кластер строго для аналитики-чтенияREAD_ONLY грубо отрезает любую запись.
  3. Малая или средняя установка, хочется правила в git — file-based (FILE). Просто, автономно, прозрачно.
  4. Enterprise с большим парком data-систем, нужна централизация и аудит — Apache Ranger plugin: единое управление доступом ко многим системам.
  5. Cloud-native окружение, культура policy-as-code — Open Policy Agent: один движок политик на Kubernetes, микросервисы и Trino разом.

Общий принцип — чем крупнее окружение и чем важнее централизованный аудит, тем сильнее выбор смещается от file-based к Ranger или OPA. А ALLOW_ALL в продакшене недопустим при любом масштабе.

NOTE

Аутентификация и авторизация — два независимых выбора. Можно сочетать любой механизм аутентификации из прошлого урока с любой моделью авторизации из этого: например, OAUTH2 для аутентификации плюс OPA для авторизации, или LDAP плюс Ranger. Сначала кластер устанавливает «кто ты» (аутентификация), затем — «что тебе можно» (авторизация); это разные слои, и настраиваются они порознь.


Попробуй сам

Поэкспериментируй с file-based access control на тестовом Trino.

  1. Подними Trino и убедись, что по умолчанию доступ ничем не ограничен (ALLOW_ALL): любой запрос проходит.
  2. Включи file-based access control: создай JSON-файл правил, дай некоему пользователю только чтение одного каталога (например, tpch), пропиши access-control.name=file и путь к файлу в etc/access-control.properties. Перезапусти Trino.
  3. Проверь правила в деле: под разрешённым пользователем SELECT из tpch проходит, а попытка записи или обращения к закрытому каталогу отклоняется с ошибкой доступа. Прочитай тексты ошибок.
  4. Поразмышляй: на сколько примерно пользователей и таблиц редактировать этот JSON вручную ещё комфортно, и в какой момент окружения ты бы перешёл на Ranger или OPA и почему.

Цель — увидеть, что авторизация проверяет каждое действие, и прочувствовать, где проходит граница между file-based и централизованными моделями.


Проверка знанийKnowledge check
Чем file-based access control принципиально отличается от авторизации через Apache Ranger или OPA, и почему с ростом окружения выбор смещается в сторону Ranger/OPA?
ОтветAnswer
Принципиальное отличие — в том, где живут политики доступа и кто ими владеет. При file-based access control (режим FILE встроенного system access control) правила доступа задаются в конфигурационном файле, обычно JSON, прямо на кластере Trino: кластер сам владеет политиками. Это просто и автономно — никаких внешних систем, всё видно в одном месте, файл легко версионировать в git. При авторизации через Apache Ranger или Open Policy Agent политики живут во внешней системе: в Ranger с его собственным UI и репозиторием политик, или в OPA на декларативном языке политик. Trino через соответствующий plugin или access control обращается к этой внешней системе за решениями — кластер перестаёт быть владельцем политик и становится их потребителем. Механика для Ranger и OPA по сути одна: координатор отправляет внешнему движку контекст (кто пользователь, что за действие, над каким объектом), движок применяет политики и возвращает разрешено или отклонено. С ростом окружения выбор смещается к Ranger или OPA, потому что у file-based слабая сторона — масштабируемость управления: на сотни пользователей, десятки команд и тысячи таблиц редактирование одного JSON вручную становится громоздким и хрупким, а централизованного аудита изменений нет. Ranger даёт централизованное управление доступом сразу ко многим системам data-платформы с единым аудитом — это ценно для enterprise с большим парком систем. OPA даёт единый, не привязанный к data-миру движок политик, которым организация авторизует и Kubernetes, и микросервисы, и Trino разом — это близко cloud-native командам с культурой policy-as-code. Чем крупнее окружение и чем важнее централизованный аудит, тем сильнее перевешивают Ranger и OPA; file-based остаётся оптимальным для малых и средних установок, которым достаточно правил в коде.

Проверьте понимание

Результат: 0 из 0
Концептуальный
Вопрос 1 из 4. В чём разница между аутентификацией и авторизацией в Trino?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 7