Access Control
Ограничение прав на копирование/перемещение данных между каталогами, схемами и таблицами является важным и необходимым для защиты конфиденциальности данных и может быть полезно иметь контроль, какие версии данных доступны для использования.
Для этого используется плагины:
- file-based access control
Поставляется вместе с trino, file-based access control.
В запросе от пользователя проверяется возможность предоставить доступ к каталогу.
В видимом каталоге отсутствуют какие-либо ограничения.
Список доступов берётся из сервиса Rules Generator.
- system-access-control
Собственная разработка.
В пользовательском запросе проверяется сама возможность копирование/перемещения данных.
По условию: если операция INSERT или CREATE TABLE AS SELECT(CTAS) и если больше 1-го каталога принимается решение о доступности операции.
Список разрешённых каталогов, схем, таблиц учётной записи пользователя получаем из базы данных.
Установка
file-based access control
Находится в директории <path_to_trino>/plugin.
system-access-control
Устанавливается через pipeline кластера.
Расположен в директории <path_to_trino>/plugin.
Настройка
Пользовательский запрос этими плагинами обрабатывается последовательно.
В <path_to_trino_conf>/config.properties указываем файлы с их настройками.
access-control.config-files=<path_to_trino_conf>/access-control.properties,<path_to_trino_conf>/access-control-whitelists.properties
file-based access control
Настройки в файле <path_to_trino_conf>/access-control.properties
access-control.name=file
security.config-file=https://rules-generator.example.com/rules
security.refresh-period=1m
system-access-control
Настройки в файле <path_to_trino_conf>/access-control-whitelists.properties
trino.whitelist.log4j2.configLocation=<path_to_trino_conf>/access_control_whitelists-log4j2.xml
trino.accessControl.host=<DATABASE_ADDRESS>
trino.accessControl.port=<DATABASE_PORT>
trino.accessControl.database=<DATABASE_NAME>
trino.accessControl.schema=<SCHEMA_NAME>
trino.accessControl.username=<USERNAME>
trino.accessControl.password=<PASSWORD>
trino.accessControl.cacheRefreshIntervalMinutes=5
trino.accessControl.exceptionMessage=Data movement between catalogs is forbidden
Логирование
Пример параметров access_control_whitelists-log4j2.xml
<Configuration status="warn" name="WhitelistLogging">
<Appenders>
<RollingFile name="JsonRollingFile"
fileName="<path_to_trino_logs>/accessControl.log"
filePattern="<path_to_trino_logs>/%d{yyyy-MM-dd-hh}-%i.log">
<PatternLayout pattern='{"timestamp":"%d{yyyy-MM-dd HH:mm:ss.SSSZ}","level":"%p","thread":"%t","loggerName":"%c","message":"%m"}%n'/>
<Policies>
<SizeBasedTriggeringPolicy size="10 MB"/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="JsonRollingFile"/>
</Root>
</Loggers>
</Configuration>
