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