Skip to content

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>

Структурная схема

access_control