Назначение правил доступа к свойствам сессии каталога в 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и добавьте в него следующее содержимое:catalog_session_properties: # Правило 1 - allow: <право_установить_свойство> property: names: any: [<список_имен_свойств>] name_regexp: <регулярное_выражение> catalog: name_regexp: <регулярное_выражение> groups: [<список_идентификаторов_групп>] users: [<список_идентификаторов_пользователей>] description: <описание_правила> # Правило 2 - <Параметры_правила_2> ... # Правило N - <Параметры_правила_N>Где:
-
catalog_session_properties— список правил для свойств сессии каталога. Каждое правило включает в себя обязательный параметрallow, а также опциональные параметры:property,catalog,groups,usersиdescription. -
allow— право установить свойство:YES— пользователю разрешено установить свойство.NO— пользователю запрещено установить свойство.
-
property— свойства, на которые распространяется правило. Если параметрpropertyне указан, правило распространяется на все свойства.names— список имен свойств.name_regexp— регулярное выражение. Правило распространяется на свойства, имена которых соответствуют регулярному выражению.
Вы можете указать только один из параметров:
namesилиname_regexp. -
catalog— каталоги кластера, на которые распространяется правило. Если параметрcatalogне указан, правило распространяется на все каталоги кластера.name_regexp— регулярное выражение. Правило распространяется на каталоги, имена которых соответствуют регулярному выражению.
-
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, содержащий список правилcatalog_session_properties.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 catalog_session_properties = [ # Правило 1 { allow = "<право_установить_свойство>" property = { names = ["<список_имен_свойств>"] name_regexp = "<регулярное_выражение>" } catalog = { ids = [ yandex_trino_catalog.<имя_каталога_1>.id, yandex_trino_catalog.<имя_каталога_2>.id, ... yandex_trino_catalog.<имя_каталога_N>.id ] name_regexp = "<регулярное_выражение>" } users = ["<список_идентификаторов_пользователей>"] groups = ["<список_идентификаторов_групп>"] description = "<описание_правила>" }, # Правило 2 { ... }, ... # Правило N { ... } ] ... }Где:
-
catalog_session_properties— список блоков правил для свойств сессии каталога. Каждое правило включает в себя обязательный параметрallow, а также опциональные параметры:property,catalog,groups,usersиdescription. -
allow— право установить свойство:YES— пользователю разрешено установить свойство.NO— пользователю запрещено установить свойство.
-
property— свойства, на которые распространяется правило. Если блокpropertyне указан, правило распространяется на все свойства.names— список имен свойств.name_regexp— регулярное выражение. Правило распространяется на свойства, имена которых соответствуют регулярному выражению.
Вы можете указать только один из параметров:
namesилиname_regexp. -
catalog— каталоги кластера, на которые распространяется правило. Если блокcatalogне указан, правило распространяется на все каталоги кластера.ids— список идентификаторов каталогов. Указанные каталоги должны создаваться в том же манифесте.name_regexp— регулярное выражение. Правило распространяется на каталоги, имена которых соответствуют регулярному выражению.
Вы можете указать только один из параметров:
idsилиname_regexp.
-
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": { "catalog_session_properties": [ { "allow": "<право_установить_свойство>", "property": { "names": { "any": [ "<список_имен_свойств>" ] }, "name_regexp": "<регулярное_выражение>" }, "catalog": { "names": { "any": [ "<имя_каталога_1>", "<имя_каталога_2>", ... "<имя_каталога_N>" ] }, "name_regexp": "<регулярное_выражение>" }, "users": [ "<список_идентификаторов_пользователей>" ], "groups": [ "<список_идентификаторов_групп>" ], "description": "<описание_правила>" }, { <Блок_правила_2> }, ... { <Блок_правила_N> } ] } } }Где:
-
access_control— конфигурация прав доступа в рамках кластера. -
catalog_session_properties— список блоков правил для свойств сессии каталога. Каждое правило включает в себя обязательный параметрallow, а также опциональные параметры:property,catalog,groups,usersиdescription. -
allow— право установить свойство:YES— пользователю разрешено установить свойство.NO— пользователю запрещено установить свойство.
-
property— свойства, на которые распространяется правило. Если блокpropertyне указан, правило распространяется на все свойства.names— список имен свойств.name_regexp— регулярное выражение. Правило распространяется на свойства, имена которых соответствуют регулярному выражению.
Блок
propertyдолжен содержать либо вложенный блокnames, либо параметрname_regexp. -
catalog— каталоги, на которые распространяется правило. Если блокcatalogне указан, правило распространяется на все каталоги кластера.names— список имен каталогов. Каталоги должны создаваться в этом же вызове ClusterService/Create.name_regexp— регулярное выражение. Правило распространяется на каталоги, имена которых соответствуют регулярному выражению.
Блок
catalogдолжен содержать либо вложенный блокnames, либо параметрname_regexp.
-
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и добавьте в него следующее содержимое:catalog_session_properties: # Правило 1 - allow: <право_установить_свойство> property: names: any: [<список_имен_свойств>] name_regexp: <регулярное_выражение> catalog: ids: any: [<список_идентификаторов_каталогов>] names: any: [<список_имен_каталогов>] name_regexp: <регулярное_выражение> groups: [<список_идентификаторов_групп>] users: [<список_идентификаторов_пользователей>] description: <описание_правила> # Правило 2 - <Параметры_правила_2> ... # Правило N - <Параметры_правила_N>Где:
-
system_session_properties— список правил для свойств сессии каталога. Каждое правило включает в себя обязательный параметрallow, а также опциональные параметры:property,catalog,groups,usersиdescription. -
allow— право установить свойство:YES— пользователю разрешено установить свойство.NO— пользователю запрещено установить свойство.
-
property— свойства, на которые распространяется правило. Если параметрpropertyне указан, правило распространяется на все свойства.names— список имен свойств.name_regexp— регулярное выражение. Правило распространяется на свойства, имена которых соответствуют регулярному выражению.
Вы можете указать только один из параметров:
namesилиname_regexp. -
catalog— каталоги, на которые распространяется правило. Если параметрcatalogне указан, правило распространяется на все каталоги кластера.ids— список идентификаторов каталогов. Указанные каталоги должны существовать.names— список имен каталогов. Указанные каталоги должны существовать.name_regexp— регулярное выражение. Правило распространяется на каталоги, имена которых соответствуют регулярному выражению.
Вы можете указать только один из параметров:
ids,namesилиname_regexp.
-
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, содержащий список правилsystem_session_properties.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 catalog_session_properties = [ # Правило 1 { allow = "<право_установить_свойство>" property = { names = ["<список_имен_свойств>"] name_regexp = "<регулярное_выражение>" } catalog = { ids = [ yandex_trino_catalog.<имя_каталога_1>.id, yandex_trino_catalog.<имя_каталога_2>.id, ... yandex_trino_catalog.<имя_каталога_N>.id ] name_regexp = "<регулярное_выражение>" } users = ["<список_идентификаторов_пользователей>"] groups = ["<список_идентификаторов_групп>"] description = "<описание_правила>" }, # Правило 2 { ... }, ... # Правило N { ... } ] ... }Где:
-
catalog_session_properties— список блоков правил для свойств сессии каталога. Каждое правило включает в себя обязательный параметрallow, а также опциональные параметры:property,catalog,groups,usersиdescription. -
allow— право установить свойство:YES— пользователю разрешено установить свойство.NO— пользователю запрещено установить свойство.
-
property— свойства, на которые распространяется правило. Если блокpropertyне указан, правило распространяется на все свойства.names— список имен свойств.name_regexp— регулярное выражение. Правило распространяется на свойства, имена которых соответствуют регулярному выражению.
Вы можете указать только один из параметров:
namesилиname_regexp. -
catalog— каталоги кластера, на которые распространяется правило. Если блокcatalogне указан, правило распространяется на все каталоги кластера.ids— список идентификаторов каталогов. Указанные каталоги должны существовать или создаваться в том же манифесте.name_regexp— регулярное выражение. Правило распространяется на каталоги, имена которых соответствуют регулярному выражению.
Вы можете указать только один из параметров:
idsилиname_regexp.
-
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.catalog_session_properties" ] }, "trino": { "access_control": { "catalog_session_properties": [ { "allow": "<право_установить_свойство>", "property": { "names": { "any": [ "<список_имен_свойств>" ] }, "name_regexp": "<регулярное_выражение>" }, "catalog": { "ids": { "any": [ "<список_идентификаторов_каталогов>" ] }, "names": { "any": [ "<список_имен_каталогов>" ] }, "name_regexp": "<регулярное_выражение>" }, "users": [ "<список_идентификаторов_пользователей>" ], "groups": [ "<список_идентификаторов_групп>" ], "description": "<описание_правила>" }, { <Блок_правила_2> }, ... { <Блок_правила_N> } ] } } }Где:
-
cluster_id— идентификатор кластера.Идентификатор кластера можно получить со списком кластеров в каталоге.
-
update_mask— перечень изменяемых параметров в виде массива строкpaths[].Формат перечисления настроек
"update_mask": { "paths": [ "<настройка_1>", "<настройка_2>", ... "<настройка_N>" ] }Важно
При изменении кластера все параметры изменяемого объекта, которые не были явно переданы в запросе, будут переопределены на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
update_mask. -
access_control— конфигурация прав доступа в рамках кластера. -
system_session_properties— список блоков правил для свойств сессии каталога. Каждое правило включает в себя обязательный параметрallow, а также опциональные параметры:property,catalog,groups,usersиdescription. -
allow— право установить свойство:YES— пользователю разрешено установить свойство.NO— пользователю запрещено установить свойство.
-
property— свойства, на которые распространяется правило. Если блокpropertyне указан, правило распространяется на все свойства.names— список имен свойств.name_regexp— регулярное выражение. Правило распространяется на свойства, имена которых соответствуют регулярному выражению.
Блок
propertyдолжен содержать либо вложенный блокnames, либо параметрname_regexp. -
catalog— каталоги, на которые распространяется правило. Если блокcatalogне указан, правило распространяется на все каталоги кластера.ids— список идентификаторов каталогов. Указанные каталоги должны существовать.names— список имен каталогов. Указанные каталоги должны существовать.name_regexp— регулярное выражение. Правило распространяется на каталоги, имена которых соответствуют регулярному выражению.
Блок
catalogдолжен содержать либо один из вложенных блоковidsилиnames, либо параметрname_regexp.
-
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 -
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Пример назначения правил доступа к свойствам сессии каталога
Допустим, вам нужно настроить правила доступа к свойствам сессии каталога:
- Разрешить устанавливать любые свойства пользователям, входящим в группу с идентификатором
admins_group_id. - Разрешить пользователям из группы с идентификатором
analytics_group_idустанавливать свойства с именами видаparquet_.*в каталоге с идентификаторомhive_cat_id. - Всем остальным пользователям запретить устанавливать свойства.
Файл access_control.yaml для такого набора правил выглядит так:
catalog_session_properties:
- groups:
- admins_group_id
allow: YES
- groups:
- data_engineers_group_id
property:
name_regexp: "parquet.*"
catalog:
ids:
any:
- hive_cat_id
allow: YES
Конфигурационный файл для такого набора правил выглядит так:
resource "yandex_trino_access_control" "trino_access_control" {
...
cluster_id = <идентификатор_кластера>
catalog_session_properties = [
{
groups = ["admins_group_id"]
allow = "YES"
},
{
groups = ["data_engineers_group_id"]
property = {
name_regexp = "parquet.*"
}
catalog = {
ids = ["hive_cat_id"]
}
allow = "YES"
}
]
...
}
Файл body.json для такого набора правил выглядит так:
{
"cluster_id": "<идентификатор_кластера>",
"update_mask": {
"paths": [
"trino.access_control.catalog_session_properties"
]
},
"trino": {
"access_control": {
"catalog_session_properties": [
{
"groups": [
"admins_group_id"
],
"allow": "YES"
},
{
"groups": [
"data_engineers_group_id"
],
"catalog": {
"ids": {
"any": ["hive_cat_id"]
}
},
"property": {
"name_regexp": "parquet.*"
},
"allow": "YES"
}
]
}
}
}