Назначение правил доступа к таблицам в Managed Service for Trino
Правила доступа к таблицам определяют, какие действия пользователи могут совершать над таблицами в кластере Managed Service for Trino.
Для каждой пары «пользователь–таблица» правила применяются следующим образом:
- Правила проверяются в порядке их объявления. Применяется первое найденное правило, которое соответствует паре «пользователь–таблица».
- Если ни одно из заданных правил не соответствует паре «пользователь–таблица», пользователю запрещаются любые действия над таблицей.
- Если не задано ни одно правило доступа к таблицам, каждый пользователь может выполнять любые действия над любой таблицей.
- Правила доступа к таблицам применяются совместно с общими правилами доступа к объектам каталогов.
Назначить правила при создании кластера
Правила доступа к таблицам можно назначить одновременно с созданием кластера Managed Service for Trino.
Важно
Указанные в правилах имена таблиц и схем не проверяются на валидность. Ошибка в имени таблицы или схемы приведет к некорректной работе правила.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Чтобы задать правила доступа к таблицам:
-
Создайте файл
access_control.yamlи добавьте в него следующее содержимое:tables: # Правило 1 - privileges: [<список_разрешений>] table: names: any: [<список_имен_таблиц>] name_regexp: <регулярное_выражение> schema: names: any: [<список_имен_схем>] name_regexp: <регулярное_выражение> catalog: name_regexp: <регулярное_выражение> columns: # Правило доступа к столбцу 1 - name: <имя_столбца> access: <доступность_столбца> mask: <SQL-выражение> # Правило доступа к столбцу 2 - <Параметры_доступа_к_столбцу_2> ... # Правило доступа к столбцу N - <Параметры_доступа_к_столбцу_N> filter: <SQL-выражение> groups: [<список_идентификаторов_групп>] users: [<список_идентификаторов_пользователей>] description: <описание_правила> # Правило 2 - <Параметры_правила_2> ... # Правило N - <Параметры_правила_N>Где:
-
tables— список правил для таблиц. Все параметры правила являются опциональными:privileges,table,schema,catalog,columns,filter,groups,usersиdescription. -
privileges— список разрешенных действий над таблицами:SELECT— чтение данных.INSERT— вставка данных.DELETE— удаление данных.UPDATE— обновление данных.OWNERSHIP— создание и удаление таблицы, изменение состава столбцов, добавление к ней комментариев.GRANT_SELECT— созданиеVIEWc чтением данных из таблицы.
Если параметр
privilegesне указан, правило запрещает выполнение любых действий над таблицами.Примечание
Чтобы воспользоваться правом
OWNERSHIPна таблицу, требуется уровень доступаALLк каталогу, в котором находится таблица. -
table— таблицы, на которые распространяется правило. Если параметрtableне указан, правило распространяется на все таблицы.names— список имен таблиц.name_regexp— регулярное выражение. Правило распространяется на таблицы, имена которых соответствуют регулярному выражению.
Вы можете указать только один из параметров:
namesилиname_regexp. -
schema— схемы, на которые распространяется правило. Если параметрschemaне указан, правило распространяется на все схемы.names— список имен схем.name_regexp— регулярное выражение. Правило распространяется на схемы, имена которых соответствуют регулярному выражению.
Вы можете указать только один из параметров:
namesилиname_regexp. -
catalog— каталоги кластера, на которые распространяется правило. Если параметрcatalogне указан, правило распространяется на все каталоги кластера.name_regexp— регулярное выражение. Правило распространяется на каталоги, имена которых соответствуют регулярному выражению.
-
columns— список правил, определяющих доступ пользователей к столбцам таблицы. Каждое правило включает в себя обязательные параметрыnameиaccess, а также опциональный параметрmask.name— имя столбца.access— доступность столбца:ALL— столбец доступен.NONE— столбец недоступен.
mask— SQL-выражение для маскирования столбца. При чтении пользователь получит результат выражения вместо значения в этом столбце. SQL-выражение должно иметь тип, совпадающий с типом маскируемой колонки. Если параметрmaskне указан или содержит пустую строку, для этого столбца маскирование не будет использоваться.
Если для столбца таблицы не указано правило доступа, этот столбец доступен.
-
filter— булево SQL-выражение, определяющее доступ пользователей к строкам таблицы. Пользователь получит доступ к строке, только если выражение вернетTRUE. Вычисление SQL-выражения происходит от имени пользователя, выполняющего запрос. Если параметрfilterне указан или содержит пустую строку, пользователям доступны все строки таблицы.
-
groups— список идентификаторов групп, на которые распространяется правило. Если параметрgroupsне указан, правило распространяется на все группы пользователей. -
users— список идентификаторов пользователей, на которых распространяется правило. Если параметрusersне указан, правило распространяется на всех пользователей. -
description— описание правила.
-
-
Посмотрите описание команды CLI для создания кластера:
yc managed-trino cluster create --help -
Выполните команду:
yc managed-trino cluster create \ ... --access-control-from-file access_control.yamlДоступные параметры кластера и их описания см. в инструкции.
-
Создайте конфигурационный файл Terraform с планом инфраструктуры.
-
Добавьте в конфигурационный файл ресурс
yandex_trino_access_control, содержащий список правилtables.resource "yandex_trino_cluster" "<имя_кластера>" { ... } resource "yandex_trino_catalog" "<имя_каталога_1>" { ... } resource "yandex_trino_catalog" "<имя_каталога_2>" { ... } ... resource "yandex_trino_catalog" "<имя_каталога_N>" { ... } resource "yandex_trino_access_control" "trino_access_control" { ... cluster_id = yandex_trino_cluster.<имя_кластера>.id tables = [ # Правило 1 { privileges = ["<список_разрешений>"] table = { names = ["<список_имен_таблиц>"] name_regexp = "<регулярное_выражение>" } schema = { names = ["<список_имен_схем>"] name_regexp = "<регулярное_выражение>" } catalog = { ids = [ yandex_trino_catalog.<имя_каталога_1>.id, yandex_trino_catalog.<имя_каталога_2>.id, ... yandex_trino_catalog.<имя_каталога_N>.id ] name_regexp = "<регулярное_выражение>" } columns = [ # Правило доступа к столбцу 1 { name = "<имя_столбца>" access = "<доступность_столбца>" mask = "<SQL-выражение>" }, # Правило доступа к столбцу 2 { ... }, ... # Правило доступа к столбцу N { ... } ] filter = "<SQL-выражение>" users = ["<список_идентификаторов_пользователей>"] groups = ["<список_идентификаторов_групп>"] description = "<описание_правила>" }, # Правило 2 { ... }, ... # Правило N { ... } ] ... }Где:
-
tables— список блоков правил для таблиц. Все параметры правила являются опциональными:privileges,table,schema,catalog,columns,filter,groups,usersиdescription. -
privileges— список разрешенных действий над таблицами:SELECT— чтение данных.INSERT— вставка данных.DELETE— удаление данных.UPDATE— обновление данных.OWNERSHIP— создание и удаление таблицы, изменение состава столбцов, добавление к ней комментариев.GRANT_SELECT— созданиеVIEWc чтением данных из таблицы.
Если параметр
privilegesне указан, правило запрещает выполнение любых действий над таблицами.Примечание
Чтобы воспользоваться правом
OWNERSHIPна таблицу, требуется уровень доступаALLк каталогу, в котором находится таблица. -
table— таблицы, на которые распространяется правило. Если параметрtableне указан, правило распространяется на все таблицы.names— список имен таблиц.name_regexp— регулярное выражение. Правило распространяется на таблицы, имена которых соответствуют регулярному выражению.
Вы можете указать только один из параметров:
namesилиname_regexp. -
schema— схемы, на которые распространяется правило. Если параметрschemaне указан, правило распространяется на все схемы.names— список имен схем.name_regexp— регулярное выражение. Правило распространяется на схемы, имена которых соответствуют регулярному выражению.
Вы можете указать только один из параметров:
namesилиname_regexp. -
catalog— каталоги кластера, на которые распространяется правило. Если блокcatalogне указан, правило распространяется на все каталоги кластера.ids— список идентификаторов каталогов. Указанные каталоги должны создаваться в том же манифесте.name_regexp— регулярное выражение. Правило распространяется на каталоги, имена которых соответствуют регулярному выражению.
Вы можете указать только один из параметров:
idsилиname_regexp. -
columns— список блоков правил, определяющих доступ пользователей к столбцам таблицы. Каждое правило включает в себя обязательные параметрыnameиaccess, а также опциональный параметрmask.name— имя столбца.access— доступность столбца:ALL— столбец доступен.NONE— столбец недоступен.
mask— SQL-выражение для маскирования столбца. При чтении пользователь получит результат выражения вместо значения в этом столбце. SQL-выражение должно иметь тип, совпадающий с типом маскируемой колонки. Если параметрmaskне указан или содержит пустую строку, для этого столбца маскирование не будет использоваться.
Если для столбца таблицы не указано правило доступа, этот столбец доступен.
-
filter— булево SQL-выражение, определяющее доступ пользователей к строкам таблицы. Пользователь получит доступ к строке, только если выражение вернетTRUE. Вычисление SQL-выражения происходит от имени пользователя, выполняющего запрос. Если параметрfilterне указан или содержит пустую строку, пользователям доступны все строки таблицы.
-
groups— список идентификаторов групп, на которые распространяется правило. Если параметрgroupsне указан, правило распространяется на все группы пользователей. -
users— список идентификаторов пользователей, на которых распространяется правило. Если параметрusersне указан, правило распространяется на всех пользователей. -
description— описание правила.
-
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Подробнее см. в документации провайдера Terraform.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiДалее предполагается, что содержимое репозитория находится в директории
~/cloudapi/. -
Создайте файл
body.jsonи добавьте в него следующее содержимое:{ <Параметры_кластера> ... "trino": { "catalogs": [ { "name": "имя_каталога_1", ... }, { "name": "имя_каталога_2", ... }, ... { "name": "имя_каталога_N", ... } ] ... "access_control": { "tables": [ { "privileges": [ "<список_разрешений>" ], "table": { "names": { "any": [ "<список_имен_таблиц>" ] }, "name_regexp": "<регулярное_выражение>" }, "schema": { "names": { "any": [ "<список_имен_схем>" ] }, "name_regexp": "<регулярное_выражение>" }, "catalog": { "names": { "any": [ "<имя_каталога_1>", "<имя_каталога_2>", ... "<имя_каталога_N>" ] }, "name_regexp": "<регулярное_выражение>" }, "columns": [ { "name": "<имя_столбца>", "access": "<доступность_столбца>", "mask": "<SQL-выражение>" }, { <Правило_доступа_к_столбцу_2> }, ... { <Правило_доступа_к_столбцу_N> } ], "filter": "<SQL-выражение>", "users": [ "<список_идентификаторов_пользователей>" ], "groups": [ "<список_идентификаторов_групп>" ], "description": "<описание_правила>" }, { <Блок_правила_2> }, ... { <Блок_правила_N> } ] } } }Где:
-
access_control— конфигурация прав доступа в рамках кластера. -
tables— список блоков правил для таблиц. Все параметры правила являются опциональными:privileges,table,schema,catalog,columns,filter,groups,usersиdescription. -
privileges— список разрешенных действий над таблицами:SELECT— чтение данных.INSERT— вставка данных.DELETE— удаление данных.UPDATE— обновление данных.OWNERSHIP— создание и удаление таблицы, изменение состава столбцов, добавление к ней комментариев.GRANT_SELECT— созданиеVIEWc чтением данных из таблицы.
Tables-privileges
Если параметр
privilegesне указан, правило запрещает выполнение любых действий над таблицами.Примечание
Чтобы воспользоваться правом
OWNERSHIPна таблицу, требуется уровень доступаALLк каталогу, в котором находится таблица. -
table— таблицы, на которые распространяется правило. Если блокtableне указан, правило распространяется на все таблицы.names— список имен таблиц.name_regexp— регулярное выражение. Правило распространяется на таблицы, имена которых соответствуют регулярному выражению.
Блок
tableдолжен содержать либо вложенный блокnames, либо параметрname_regexp. -
schema— схемы, на которые распространяется правило. Если блокschemaне указан, правило распространяется на все схемы.names— список имен схем.name_regexp— регулярное выражение. Правило распространяется на схемы, имена которых соответствуют регулярному выражению.
Блок
schemaдолжен содержать либо вложенный блокnames, либо параметрname_regexp. -
catalog— каталоги, на которые распространяется правило. Если блокcatalogне указан, правило распространяется на все каталоги кластера.names— список имен каталогов. Каталоги должны создаваться в этом же вызове ClusterService/Create.name_regexp— регулярное выражение. Правило распространяется на каталоги, имена которых соответствуют регулярному выражению.
Блок
catalogдолжен содержать либо вложенный блокnames, либо параметрname_regexp. -
columns— список блоков правил, определяющих доступ пользователей к столбцам таблицы. Каждое правило включает в себя обязательные параметрыnameиaccess, а также опциональный параметрmask.name— имя столбца.access— доступность столбца:ALL— столбец доступен.NONE— столбец недоступен.
mask— SQL-выражение для маскирования столбца. При чтении пользователь получит результат выражения вместо значения в этом столбце. SQL-выражение должно иметь тип, совпадающий с типом маскируемой колонки. Если параметрmaskне указан или содержит пустую строку, для этого столбца маскирование не будет использоваться.
Если для столбца таблицы не указано правило доступа, этот столбец доступен.
-
filter— булево SQL-выражение, определяющее доступ пользователей к строкам таблицы. Пользователь получит доступ к строке, только если выражение вернетTRUE. Вычисление SQL-выражения происходит от имени пользователя, выполняющего запрос. Если параметрfilterне указан или содержит пустую строку, пользователям доступны все строки таблицы.
-
groups— список идентификаторов групп, на которые распространяется правило. Если параметрgroupsне указан, правило распространяется на все группы пользователей. -
users— список идентификаторов пользователей, на которых распространяется правило. Если параметрusersне указан, правило распространяется на всех пользователей. -
description— описание правила.
Доступные параметры кластера и их описания см. в инструкции.
-
-
Воспользуйтесь вызовом ClusterService/Create и выполните запрос, например с помощью gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/trino/v1/cluster_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d @ \ trino.api.cloud.yandex.net:443 \ yandex.cloud.trino.v1.ClusterService.Create \ < body.json -
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Назначить правила для существующего кластера
Правила доступа к таблицам можно назначить или обновить в уже существующем кластере Managed Service for Trino.
Важно
Указанные в правилах имена таблиц и схем не проверяются на валидность. Ошибка в имени таблицы или схемы приведет к некорректной работе правила.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Чтобы задать правила доступа к таблицам:
-
Если правила доступа еще не заданы, создайте файл
access_control.yamlи добавьте в него следующее содержимое:tables: # Правило 1 - privileges: [<список_разрешений>] table: names: any: [<список_имен_таблиц>] name_regexp: <регулярное_выражение> schema: names: any: [<список_имен_схем>] name_regexp: <регулярное_выражение> catalog: ids: any: [<список_идентификаторов_каталогов>] names: any: [<список_имен_каталогов>] name_regexp: <регулярное_выражение> columns: # Правило доступа к столбцу 1 - name: <имя_столбца> access: <доступность_столбца> mask: <SQL-выражение> # Правило доступа к столбцу 2 - <Параметры_доступа_к_столбцу_2> ... # Правило доступа к столбцу N - <Параметры_доступа_к_столбцу_N> filter: <SQL-выражение> groups: [<список_идентификаторов_групп>] users: [<список_идентификаторов_пользователей>] description: <описание_правила> # Правило 2 - <Параметры_правила_2> ... # Правило N - <Параметры_правила_N>Где:
-
tables— список правил для таблиц. Все параметры правила являются опциональными:privileges,table,schema,catalog,columns,filter,groups,usersиdescription. -
privileges— список разрешенных действий над таблицами:SELECT— чтение данных.INSERT— вставка данных.DELETE— удаление данных.UPDATE— обновление данных.OWNERSHIP— создание и удаление таблицы, изменение состава столбцов, добавление к ней комментариев.GRANT_SELECT— созданиеVIEWc чтением данных из таблицы.
Если параметр
privilegesне указан, правило запрещает выполнение любых действий над таблицами.Примечание
Чтобы воспользоваться правом
OWNERSHIPна таблицу, требуется уровень доступаALLк каталогу, в котором находится таблица. -
table— таблицы, на которые распространяется правило. Если параметрtableне указан, правило распространяется на все таблицы.names— список имен таблиц.name_regexp— регулярное выражение. Правило распространяется на таблицы, имена которых соответствуют регулярному выражению.
Вы можете указать только один из параметров:
namesилиname_regexp. -
schema— схемы, на которые распространяется правило. Если параметрschemaне указан, правило распространяется на все схемы.names— список имен схем.name_regexp— регулярное выражение. Правило распространяется на схемы, имена которых соответствуют регулярному выражению.
Вы можете указать только один из параметров:
namesилиname_regexp. -
catalog— каталоги, на которые распространяется правило. Если параметрcatalogне указан, правило распространяется на все каталоги кластера.ids— список идентификаторов каталогов. Указанные каталоги должны существовать.names— список имен каталогов. Указанные каталоги должны существовать.name_regexp— регулярное выражение. Правило распространяется на каталоги, имена которых соответствуют регулярному выражению.
Вы можете указать только один из параметров:
ids,namesилиname_regexp. -
columns— список правил, определяющих доступ пользователей к столбцам таблицы. Каждое правило включает в себя обязательные параметрыnameиaccess, а также опциональный параметрmask.name— имя столбца.access— доступность столбца:ALL— столбец доступен.NONE— столбец недоступен.
mask— SQL-выражение для маскирования столбца. При чтении пользователь получит результат выражения вместо значения в этом столбце. SQL-выражение должно иметь тип, совпадающий с типом маскируемой колонки. Если параметрmaskне указан или содержит пустую строку, для этого столбца маскирование не будет использоваться.
Если для столбца таблицы не указано правило доступа, этот столбец доступен.
-
filter— булево SQL-выражение, определяющее доступ пользователей к строкам таблицы. Пользователь получит доступ к строке, только если выражение вернетTRUE. Вычисление SQL-выражения происходит от имени пользователя, выполняющего запрос. Если параметрfilterне указан или содержит пустую строку, пользователям доступны все строки таблицы.
-
groups— список идентификаторов групп, на которые распространяется правило. Если параметрgroupsне указан, правило распространяется на все группы пользователей. -
users— список идентификаторов пользователей, на которых распространяется правило. Если параметрusersне указан, правило распространяется на всех пользователей. -
description— описание правила.
-
-
Если правила доступа уже заданы, откройте файл
access_control.yamlи внесите в него изменения. Вы можете:- добавить новые правила;
- изменить параметры существующих правил;
- удалить ненужные правила.
-
Выполните команду:
yc managed-trino cluster set-access-control <имя_или_идентификатор_кластера> \ --from-file access_control.yamlИдентификатор и имя кластера можно запросить со списком кластеров в каталоге.
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание кластера.
-
Если правила доступа еще не заданы, добавьте ресурс
yandex_trino_access_control, содержащий список правилtables.resource "yandex_trino_cluster" "<имя_кластера>" { ... } resource "yandex_trino_catalog" "<имя_каталога_1>" { ... } resource "yandex_trino_catalog" "<имя_каталога_2>" { ... } ... resource "yandex_trino_catalog" "<имя_каталога_N>" { ... } resource "yandex_trino_access_control" "trino_access_control" { ... cluster_id = yandex_trino_cluster.<имя_кластера>.id tables = [ # Правило 1 { privileges = ["<список_разрешений>"] table = { names = ["<список_имен_таблиц>"] name_regexp = "<регулярное_выражение>" } schema = { names = ["<список_имен_схем>"] name_regexp = "<регулярное_выражение>" } catalog = { ids = [ yandex_trino_catalog.<имя_каталога_1>.id, yandex_trino_catalog.<имя_каталога_2>.id, ... yandex_trino_catalog.<имя_каталога_N>.id ] name_regexp = "<регулярное_выражение>" } columns = [ # Правило доступа к столбцу 1 { name = "<имя_столбца>" access = "<доступность_столбца>" mask = "<SQL-выражение>" }, # Правило доступа к столбцу 2 { ... }, ... # Правило доступа к столбцу N { ... } ] filter = "<SQL-выражение>" users = ["<список_идентификаторов_пользователей>"] groups = ["<список_идентификаторов_групп>"] description = "<описание_правила>" }, # Правило 2 { ... }, ... # Правило N { ... } ] ... }Где:
-
tables— список блоков правил для таблиц. Все параметры правила являются опциональными:privileges,table,schema,catalog,columns,filter,groups,usersиdescription. -
privileges— список разрешенных действий над таблицами:SELECT— чтение данных.INSERT— вставка данных.DELETE— удаление данных.UPDATE— обновление данных.OWNERSHIP— создание и удаление таблицы, изменение состава столбцов, добавление к ней комментариев.GRANT_SELECT— созданиеVIEWc чтением данных из таблицы.
Если параметр
privilegesне указан, правило запрещает выполнение любых действий над таблицами.Примечание
Чтобы воспользоваться правом
OWNERSHIPна таблицу, требуется уровень доступаALLк каталогу, в котором находится таблица. -
table— таблицы, на которые распространяется правило. Если параметрtableне указан, правило распространяется на все таблицы.names— список имен таблиц.name_regexp— регулярное выражение. Правило распространяется на таблицы, имена которых соответствуют регулярному выражению.
Вы можете указать только один из параметров:
namesилиname_regexp. -
schema— схемы, на которые распространяется правило. Если параметрschemaне указан, правило распространяется на все схемы.names— список имен схем.name_regexp— регулярное выражение. Правило распространяется на схемы, имена которых соответствуют регулярному выражению.
Вы можете указать только один из параметров:
namesилиname_regexp. -
catalog— каталоги кластера, на которые распространяется правило. Если блокcatalogне указан, правило распространяется на все каталоги кластера.ids— список идентификаторов каталогов. Указанные каталоги должны существовать или создаваться в том же манифесте.name_regexp— регулярное выражение. Правило распространяется на каталоги, имена которых соответствуют регулярному выражению.
Вы можете указать только один из параметров:
idsилиname_regexp. -
columns— список блоков правил, определяющих доступ пользователей к столбцам таблицы. Каждое правило включает в себя обязательные параметрыnameиaccess, а также опциональный параметрmask.name— имя столбца.access— доступность столбца:ALL— столбец доступен.NONE— столбец недоступен.
mask— SQL-выражение для маскирования столбца. При чтении пользователь получит результат выражения вместо значения в этом столбце. SQL-выражение должно иметь тип, совпадающий с типом маскируемой колонки. Если параметрmaskне указан или содержит пустую строку, для этого столбца маскирование не будет использоваться.
Если для столбца таблицы не указано правило доступа, этот столбец доступен.
-
filter— булево SQL-выражение, определяющее доступ пользователей к строкам таблицы. Пользователь получит доступ к строке, только если выражение вернетTRUE. Вычисление SQL-выражения происходит от имени пользователя, выполняющего запрос. Если параметрfilterне указан или содержит пустую строку, пользователям доступны все строки таблицы.
-
groups— список идентификаторов групп, на которые распространяется правило. Если параметрgroupsне указан, правило распространяется на все группы пользователей. -
users— список идентификаторов пользователей, на которых распространяется правило. Если параметрusersне указан, правило распространяется на всех пользователей. -
description— описание правила.
-
-
Если правила доступа уже заданы, внесите правки в описание ресурса
yandex_trino_access_control. Вы можете:- добавить новые правила;
- изменить параметры существующих правил;
- удалить ненужные правила.
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Подробнее см. в документации провайдера Terraform.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiДалее предполагается, что содержимое репозитория находится в директории
~/cloudapi/. -
Если правила доступа еще не заданы, создайте файл
body.jsonи добавьте в него следующее содержимое:{ "cluster_id": "<идентификатор_кластера>", "update_mask": { "paths": [ "trino.access_control.tables" ] }, "trino": { "access_control": { "tables": [ { "privileges": [ "<список_разрешений>" ], "table": { "names": { "any": [ "<список_имен_таблиц>" ] }, "name_regexp": "<регулярное_выражение>" }, "schema": { "names": { "any": [ "<список_имен_схем>" ] }, "name_regexp": "<регулярное_выражение>" }, "catalog": { "names": { "any": [ "<имя_каталога_1>", "<имя_каталога_2>", ... "<имя_каталога_N>" ] }, "name_regexp": "<регулярное_выражение>" }, "columns": [ { "name": "<имя_столбца>", "access": "<доступность_столбца>", "mask": "<SQL-выражение>" }, { <Правило_доступа_к_столбцу_2> }, ... { <Правило_доступа_к_столбцу_N> } ], "filter": "<SQL-выражение>", "users": [ "<список_идентификаторов_пользователей>" ], "groups": [ "<список_идентификаторов_групп>" ], "description": "<описание_правила>" }, { <Блок_правила_2> }, ... { <Блок_правила_N> } ] } } }Где:
-
cluster_id— идентификатор кластера.Идентификатор кластера можно получить со списком кластеров в каталоге.
-
update_mask— перечень изменяемых параметров в виде массива строкpaths[].Формат перечисления настроек
"update_mask": { "paths": [ "<настройка_1>", "<настройка_2>", ... "<настройка_N>" ] }Важно
При изменении кластера все параметры изменяемого объекта, которые не были явно переданы в запросе, будут переопределены на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
update_mask. -
access_control— конфигурация прав доступа в рамках кластера. -
tables— список блоков правил для таблиц. Все параметры правила являются опциональными:privileges,table,schema,catalog,columns,filter,groups,usersиdescription. -
privileges— список разрешенных действий над таблицами:SELECT— чтение данных.INSERT— вставка данных.DELETE— удаление данных.UPDATE— обновление данных.OWNERSHIP— создание и удаление таблицы, изменение состава столбцов, добавление к ней комментариев.GRANT_SELECT— созданиеVIEWc чтением данных из таблицы.
Если параметр
privilegesне указан, правило запрещает выполнение любых действий над таблицами.Примечание
Чтобы воспользоваться правом
OWNERSHIPна таблицу, требуется уровень доступаALLк каталогу, в котором находится таблица. -
table— таблицы, на которые распространяется правило. Если блокtableне указан, правило распространяется на все таблицы.names— список имен таблиц.name_regexp— регулярное выражение. Правило распространяется на таблицы, имена которых соответствуют регулярному выражению.
Блок
tableдолжен содержать либо вложенный блокnames, либо параметрname_regexp. -
schema— схемы, на которые распространяется правило. Если блокschemaне указан, правило распространяется на все схемы.names— список имен схем.name_regexp— регулярное выражение. Правило распространяется на схемы, имена которых соответствуют регулярному выражению.
Блок
schemaдолжен содержать либо вложенный блокnames, либо параметрname_regexp. -
catalog— каталоги, на которые распространяется правило. Если блокcatalogне указан, правило распространяется на все каталоги кластера.ids— список идентификаторов каталогов. Указанные каталоги должны существовать.names— список имен каталогов. Указанные каталоги должны существовать.name_regexp— регулярное выражение. Правило распространяется на каталоги, имена которых соответствуют регулярному выражению.
Блок
catalogдолжен содержать либо один из вложенных блоковidsилиnames, либо параметрname_regexp. -
columns— список блоков правил, определяющих доступ пользователей к столбцам таблицы. Каждое правило включает в себя обязательные параметрыnameиaccess, а также опциональный параметрmask.name— имя столбца.access— доступность столбца:ALL— столбец доступен.NONE— столбец недоступен.
mask— SQL-выражение для маскирования столбца. При чтении пользователь получит результат выражения вместо значения в этом столбце. SQL-выражение должно иметь тип, совпадающий с типом маскируемой колонки. Если параметрmaskне указан или содержит пустую строку, для этого столбца маскирование не будет использоваться.
Если для столбца таблицы не указано правило доступа, этот столбец доступен.
-
filter— булево SQL-выражение, определяющее доступ пользователей к строкам таблицы. Пользователь получит доступ к строке, только если выражение вернетTRUE. Вычисление SQL-выражения происходит от имени пользователя, выполняющего запрос. Если параметрfilterне указан или содержит пустую строку, пользователям доступны все строки таблицы.
-
groups— список идентификаторов групп, на которые распространяется правило. Если параметрgroupsне указан, правило распространяется на все группы пользователей. -
users— список идентификаторов пользователей, на которых распространяется правило. Если параметрusersне указан, правило распространяется на всех пользователей. -
description— описание правила.
-
-
Если правила уже заданы, откройте существующий файл
body.jsonс правилами и внесите в него правки. Вы можете:- добавить новые правила;
- изменить параметры существующих правил;
- удалить ненужные правила.
-
Воспользуйтесь вызовом ClusterService.Update и выполните запрос, например с помощью gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/trino/v1/cluster_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d @ \ trino.api.cloud.yandex.net:443 \ yandex.cloud.trino.v1.ClusterService.Update \ < body.json -
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Пример назначения правил доступа к таблицам
Допустим, вам нужно настроить правила доступа к таблицам в кластере Trino:
- Запретить любые действия над таблицами пользователю с идентификатором
banned_user_id. - Разрешить пользователям из группы с идентификатором
admins_group_idвыполнять любые действия над таблицами. - Разрешить всем пользователям чтение данных из таблиц с именами
salesиorders, причем:- Строка таблицы будет доступна, только если значение в столбце
manager_idравно идентификатору текущего пользователя. - Значение в столбце
client_phone, кроме четырех последних цифр, будет замаскировано символами***.
- Строка таблицы будет доступна, только если значение в столбце
- Запретить любые действия над таблицами всем остальным пользователям.
Файл access_control.yaml для такого набора правил выглядит так:
tables:
- users:
- banned_user_id
- groups:
- admins_group_id
privileges:
- SELECT
- INSERT
- DELETE
- UPDATE
- OWNERSHIP
- GRANT_SELECT
- table:
names:
any:
- sales
- orders
columns:
- name: client_phone
access: ALL
mask: "'***' || substring(client_phone, -4)"
filter: "manager_id = current_user"
privileges:
- SELECT
Конфигурационный файл для такого набора правил выглядит так:
resource "yandex_trino_access_control" "trino_access_control" {
...
cluster_id = <идентификатор_кластера>
tables = [
{
users = ["banned_user_id"]
},
{
groups = ["admins_group_id"]
privileges = ["SELECT", "INSERT", "DELETE", "UPDATE", "OWNERSHIP", "GRANT_SELECT"]
},
{
table = {
names = ["sales", "orders"]
}
columns = [
{
name = "client_phone"
access = "ALL"
mask = "'***' || substring(client_phone, -4)"
}
]
filter = "manager_id = current_user"
privileges = ["SELECT"]
}
]
...
}
Файл body.json для такого набора правил выглядит так:
{
"cluster_id": "<идентификатор_кластера>",
"update_mask": {
"paths": [
"trino.access_control.tables"
]
},
"trino": {
"access_control": {
"tables": [
{
"users": [
"banned_user_id"
]
},
{
"groups": [
"admins_group_id"
],
"privileges": [
"SELECT",
"INSERT",
"DELETE",
"UPDATE",
"OWNERSHIP",
"GRANT_SELECT"
]
},
{
"table": {
"names": {
"any": [
"orders",
"sales"
]
}
},
"columns": [
{
"name": "client_phone",
"access": "ALL",
"mask": "'***' || substring(client_phone, -4)"
}
],
"filter": "manager_id = current_user",
"privileges": [
"SELECT"
]
}
]
}
}
}