Назначение правил доступа к запросам в Managed Service for Trino
Правила доступа к запросам определяют, какие действия пользователи могут совершать над SQL-запросами в кластере Managed Service for Trino.
Для каждой пары «пользователь–запрос» правила применяются следующим образом:
- Правила проверяются в порядке их объявления. Применяется первое найденное правило, которое соответствует паре «пользователь–запрос».
- Если ни одно из заданных правил не соответствует паре «пользователь–запрос», пользователю запрещаются любые действия над запросом.
- Если не задано ни одно правило доступа к запросам, каждый пользователь может выполнять любые действия над всеми запросами.
- Правила доступа к запросам применяются совместно с общими правилами доступа к объектам каталогов.
Важно
При отсутствии правил доступа к запросам пользователи могут просматривать и отменять запросы друг друга.
Назначить правила при создании кластера
Правила доступа к запросам можно назначить одновременно с созданием кластера Managed Service for Trino.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Чтобы задать правила доступа к запросам:
-
Создайте файл
access_control.yamlи добавьте в него следующее содержимое:queries: # Правило 1 - privileges: [<список_разрешений>] query_owners: [<список_владельцев_запросов>] groups: [<список_идентификаторов_групп>] users: [<список_идентификаторов_пользователей>] description: <описание_правила> # Правило 2 - <Параметры_правила_2> ... # Правило N - <Параметры_правила_N>Где:
-
queries— список правил для запросов. Все параметры правила являются опциональными:privileges,query_owners,groups,usersиdescription. -
privileges— список разрешенных действий над запросами:VIEW— просмотр информации о запросе.KILL— отмена запроса.EXECUTE— исполнение запроса.
Если параметр
privilegesне указан, правило запрещает выполнение любых действий над запросами.Важно
Нельзя указать разрешение
EXECUTE, если в этом же правиле используется параметрquery_owners. -
query_owners— список идентификаторов владельцев запросов. Правило распространяется на запросы, владельцы которых перечислены в параметреquery_owners. Если параметр не указан, правило распространяется на запросы всех пользователей.
-
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, содержащий список правилqueries.resource "yandex_trino_cluster" "<имя_кластера>" { ... } resource "yandex_trino_access_control" "trino_access_control" { ... cluster_id = yandex_trino_cluster.<имя_кластера>.id queries = [ # Правило 1 { privileges = ["<список_разрешений>"] query_owners = ["<список_владельцев_запросов>"] users = ["<список_идентификаторов_пользователей>"] groups = ["<список_идентификаторов_групп>"] description = "<описание_правила>" }, # Правило 2 { ... }, ... # Правило N { ... } ] ... }Где:
-
queries— список блоков правил для запросов. Все параметры правила являются опциональными:privileges,query_owners,groups,usersиdescription. -
privileges— список разрешенных действий над запросами:VIEW— просмотр информации о запросе.KILL— отмена запроса.EXECUTE— исполнение запроса.
Если параметр
privilegesне указан, правило запрещает выполнение любых действий над запросами.Важно
Нельзя указать разрешение
EXECUTE, если в этом же правиле используется параметрquery_owners. -
query_owners— список идентификаторов владельцев запросов. Правило распространяется на запросы, владельцы которых перечислены в параметреquery_owners. Если параметр не указан, правило распространяется на запросы всех пользователей.
-
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": { "queries": [ { "privileges": [ "<список_разрешений>" ], "query_owners": [ "<список_владельцев_запросов>" ], "users": [ "<список_идентификаторов_пользователей>" ], "groups": [ "<список_идентификаторов_групп>" ], "description": "<описание_правила>" }, { <Блок_правила_2> }, ... { <Блок_правила_N> } ] } } }Где:
-
access_control— конфигурация прав доступа в рамках кластера. -
queries— список блоков правил для запросов. Все параметры правила являются опциональными:privileges,query_owners,groups,usersиdescription. -
privileges— список разрешенных действий над запросами:VIEW— просмотр информации о запросе.KILL— отмена запроса.EXECUTE— исполнение запроса.
Если параметр
privilegesне указан, правило запрещает выполнение любых действий над запросами.Важно
Нельзя указать разрешение
EXECUTE, если в этом же правиле используется параметрquery_owners. -
query_owners— список идентификаторов владельцев запросов. Правило распространяется на запросы, владельцы которых перечислены в параметреquery_owners. Если параметр не указан, правило распространяется на запросы всех пользователей.
-
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и добавьте в него следующее содержимое:queries: # Правило 1 - privileges: [<список_разрешений>] query_owners: [<список_владельцев_запросов>] groups: [<список_идентификаторов_групп>] users: [<список_идентификаторов_пользователей>] description: <описание_правила> # Правило 2 - <Параметры_правила_2> ... # Правило N - <Параметры_правила_N>Где:
-
queries— список правил для запросов. Все параметры правила являются опциональными:privileges,query_owners,groups,usersиdescription. -
privileges— список разрешенных действий над запросами:VIEW— просмотр информации о запросе.KILL— отмена запроса.EXECUTE— исполнение запроса.
Если параметр
privilegesне указан, правило запрещает выполнение любых действий над запросами.Важно
Нельзя указать разрешение
EXECUTE, если в этом же правиле используется параметрquery_owners. -
query_owners— список идентификаторов владельцев запросов. Правило распространяется на запросы, владельцы которых перечислены в параметреquery_owners. Если параметр не указан, правило распространяется на запросы всех пользователей.
-
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, содержащий список правилqueries.resource "yandex_trino_cluster" "<имя_кластера>" { ... } resource "yandex_trino_access_control" "trino_access_control" { ... cluster_id = yandex_trino_cluster.<имя_кластера>.id queries = [ # Правило 1 { privileges = ["<список_разрешений>"] query_owners = ["<список_владельцев_запросов>"] users = ["<список_идентификаторов_пользователей>"] groups = ["<список_идентификаторов_групп>"] description = "<описание_правила>" }, # Правило 2 { ... }, ... # Правило N { ... } ] ... }Где:
-
queries— список блоков правил для запросов. Все параметры правила являются опциональными:privileges,query_owners,groups,usersиdescription. -
privileges— список разрешенных действий над запросами:VIEW— просмотр информации о запросе.KILL— отмена запроса.EXECUTE— исполнение запроса.
Если параметр
privilegesне указан, правило запрещает выполнение любых действий над запросами.Важно
Нельзя указать разрешение
EXECUTE, если в этом же правиле используется параметрquery_owners. -
query_owners— список идентификаторов владельцев запросов. Правило распространяется на запросы, владельцы которых перечислены в параметреquery_owners. Если параметр не указан, правило распространяется на запросы всех пользователей.
-
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.queries" ] }, "trino": { "access_control": { "queries": [ { "privileges": [ "<список_разрешений>" ], "query_owners": [ "<список_владельцев_запросов>" ], "users": [ "<список_идентификаторов_пользователей>" ], "groups": [ "<список_идентификаторов_групп>" ], "description": "<описание_правила>" }, { <Блок_правила_2> }, ... { <Блок_правила_N> } ] } } }Где:
-
cluster_id— идентификатор кластера.Идентификатор кластера можно получить со списком кластеров в каталоге.
-
update_mask— перечень изменяемых параметров в виде массива строкpaths[].Формат перечисления настроек
"update_mask": { "paths": [ "<настройка_1>", "<настройка_2>", ... "<настройка_N>" ] }Важно
При изменении кластера все параметры изменяемого объекта, которые не были явно переданы в запросе, будут переопределены на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
update_mask. -
access_control— конфигурация прав доступа в рамках кластера. -
queries— список блоков правил для запросов. Все параметры правила являются опциональными:privileges,query_owners,groups,usersиdescription. -
privileges— список разрешенных действий над запросами:VIEW— просмотр информации о запросе.KILL— отмена запроса.EXECUTE— исполнение запроса.
Если параметр
privilegesне указан, правило запрещает выполнение любых действий над запросами.Важно
Нельзя указать разрешение
EXECUTE, если в этом же правиле используется параметрquery_owners. -
query_owners— список идентификаторов владельцев запросов. Правило распространяется на запросы, владельцы которых перечислены в параметреquery_owners. Если параметр не указан, правило распространяется на запросы всех пользователей.
-
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, выполнять любые действия над запросами. - Разрешить пользователям из группы с идентификатором
security_group_idпросматривать и удалять запросы, владельцем которых является пользователь с идентификаторомsuspicious_user_id. - Всем остальным пользователям разрешить только исполнять запросы.
Файл access_control.yaml для такого набора правил выглядит так:
queries:
- groups:
- admins_group_id
privileges:
- VIEW
- KILL
- EXECUTE
- groups:
- security_group_id
query_owners:
- suspicious_user_id
privileges:
- VIEW
- KILL
- privileges:
- EXECUTE
Конфигурационный файл для такого набора правил выглядит так:
resource "yandex_trino_access_control" "trino_access_control" {
...
cluster_id = <идентификатор_кластера>
queries = [
{
privileges = ["VIEW", "KILL", "EXECUTE"]
groups = ["admins_group_id"]
},
{
privileges = ["VIEW", "KILL"]
groups = ["security_group_id"]
query_owners = ["suspicious_user_id"]
},
{
privileges = ["EXECUTE"]
}
]
...
}
Файл body.json для такого набора правил выглядит так:
{
"cluster_id": "<идентификатор_кластера>",
"update_mask": {
"paths": [
"trino.access_control.queries"
]
},
"trino": {
"access_control": {
"queries": [
{
"privileges": [
"VIEW",
"KILL",
"EXECUTE"
],
"groups": [
"admins_group_id"
]
},
{
"privileges": [
"VIEW",
"KILL"
],
"query_owners": [
"suspicious_user_id"
],
"groups": [
"security_group_id"
]
},
{
"privileges": [
"EXECUTE"
]
}
]
}
}
}