Управление доступом к процедурам в Managed Service for Trino
Правила доступа к процедурам определяют, какие действия пользователи могут совершать над пользовательскими процедурами в кластере Managed Service for Trino.
Примечание
Нельзя ограничить выполнение процедур, вызываемых через схему system (системных процедур Trino).
Для каждой пары «пользователь–процедура» правила применяются следующим образом:
- Правила проверяются в порядке их объявления. Применяется первое найденное правило, которое соответствует паре «пользователь–процедура».
- Если ни одно из заданных правил не соответствует паре «пользователь–процедура», пользователю запрещаются любые действия над процедурой.
- Если не задано ни одно правило доступа к процедурам, каждый пользователь может выполнять только системные процедуры.
- Правила доступа к процедурам применяются совместно с общими правилами доступа к объектам каталогов.
Назначить правила при создании кластера
Правила доступа к процедурам можно назначить одновременно с созданием кластера Managed Service for Trino.
Важно
Указанные в правилах имена процедур и схем не проверяются на валидность. Ошибка в имени процедуры или схемы приведет к некорректной работе правила.
-
В консоли управления
выберите каталог, в котором нужно создать кластер Managed Service for Trino. -
Перейдите в сервис Managed Service for Trino.
-
Нажмите кнопку Создать кластер и задайте параметры кластера.
-
В блоке Настройки доступа нажмите на значок
. -
В поле Процедуры нажмите кнопку Добавить правило.
-
В открывшемся окне задайте параметры правила:
-
(Опционально) В поле Комментарий введите описание правила.
-
(Опционально) В поле Пользователи выберите пользователей, на которых распространяется правило:
- Нажмите кнопку Добавить.
- В открывшемся списке выберите нужных пользователей. Чтобы найти пользователя, используйте строку поиска над списком.
- Чтобы удалить пользователя, выбранного по ошибке, повторно нажмите на него в списке.
Если не выбран ни один пользователь, правило распространяется на всех пользователей.
-
(Опционально) В поле Группы выберите группы пользователей, на которые распространяется правило:
- Нажмите кнопку Добавить.
- В открывшемся списке выберите нужные группы. Чтобы найти группу, используйте строку поиска над списком.
- Чтобы удалить группу, выбранную по ошибке, повторно нажмите на нее в списке.
Если не выбрана ни одна группа, правило распространяется на все группы пользователей.
-
(Опционально) В поле Привилегии выберите
EXECUTE, чтобы разрешить вызов процедуры. Если привилегии не выбраны, правило запрещает выполнение любых действий над процедурами. -
(Опционально) В поле Каталоги, к которым применяется правило укажите, на какие каталоги распространяется правило:
- Имя — выберите имена каталогов. Можно выбрать только каталоги, добавленные в блоке Каталоги.
- Имя (регулярное выражение) — введите регулярное выражение. Правило распространяется на каталоги, имена которых соответствуют регулярному выражению.
- Не задано — правило распространяется на все каталоги кластера.
-
(Опционально) В поле Схемы, к которым применяется правило укажите, на какие схемы распространяется правило:
- Имя — выберите имена схем.
- Имя (регулярное выражение) — введите регулярное выражение. Правило распространяется на схемы, имена которых соответствуют регулярному выражению.
- Не задано — правило распространяется на все схемы.
-
(Опционально) В поле Процедуры, к которым применяется правило укажите, на какие процедуры распространяется правило:
- Имя — выберите имена процедур.
- Имя (регулярное выражение) — введите регулярное выражение. Правило распространяется на процедуры, имена которых соответствуют регулярному выражению.
- Не задано — правило распространяется на все процедуры.
-
-
При необходимости добавьте другие правила аналогичным образом.
-
Чтобы удалить правило, добавленное по ошибке, в строке этого правила нажмите на значок
. -
Нажмите кнопку Создать.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Чтобы задать правила доступа к процедурам:
-
Создайте файл
access_control.yamlи добавьте в него следующее содержимое:procedures: # Правило 1 - privileges: [<список_разрешений>] procedure: names: any: [<список_имен_процедур>] name_regexp: <регулярное_выражение> schema: names: any: [<список_имен_схем>] name_regexp: <регулярное_выражение> catalog: name_regexp: <регулярное_выражение> groups: [<список_идентификаторов_групп>] users: [<список_идентификаторов_пользователей>] description: <описание_правила> # Правило 2 - <Параметры_правила_2> ... # Правило N - <Параметры_правила_N>Где:
-
procedures— список правил для процедур. Все параметры правила являются опциональными:privileges,procedure,schema,catalog,groups,usersиdescription. -
privileges— разрешенные действия над процедурами:EXECUTE— разрешен вызов процедуры.
Если параметр
privilegesне указан, правило запрещает выполнение любых действий над процедурами. -
procedure— процедуры, на которые распространяется правило. Если параметрprocedureне указан, правило распространяется на все процедуры.names— список имен процедур.name_regexp— регулярное выражение. Правило распространяется на процедуры, имена которых соответствуют регулярному выражению.
Вы можете указать только один из параметров:
namesилиname_regexp. -
schema— схемы, на которые распространяется правило. Если параметрschemaне указан, правило распространяется на все схемы.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, содержащий список правилprocedures.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 procedures = [ # Правило 1 { privileges = ["<список_разрешений>"] procedure = { 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 = "<регулярное_выражение>" } users = ["<список_идентификаторов_пользователей>"] groups = ["<список_идентификаторов_групп>"] description = "<описание_правила>" }, # Правило 2 { ... }, ... # Правило N { ... } ] ... }Где:
-
procedures— список блоков правил для процедур. Все параметры правила являются опциональными:privileges,procedure,schema,catalog,groups,usersиdescription. -
privileges— разрешенные действия над процедурами:EXECUTE— разрешен вызов процедуры.
Если параметр
privilegesне указан, правило запрещает выполнение любых действий над процедурами. -
procedure— процедуры, на которые распространяется правило. Если блокprocedureне указан, правило распространяется на все процедуры.names— список имен процедур.name_regexp— регулярное выражение. Правило распространяется на процедуры, имена которых соответствуют регулярному выражению.
Вы можете указать только один из параметров:
namesилиname_regexp. -
schema— схемы, на которые распространяется правило. Если блокschemaне указан, правило распространяется на все схемы.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-токен>" -
Создайте файл
body.jsonи добавьте в него следующее содержимое:{ <Параметры_кластера> ... "trino": { "catalogs": [ { "name": "имя_каталога_1", ... }, { "name": "имя_каталога_2", ... }, ... { "name": "имя_каталога_N", ... } ] ... "accessControl": { "procedures": [ { "privileges": [ "<список_разрешений>" ], "procedure": { "names": { "any": [ "<список_имен_процедур>" ] }, "nameRegexp": "<регулярное_выражение>" }, "schema": { "names": { "any": [ "<список_имен_схем>" ] }, "nameRegexp": "<регулярное_выражение>" }, "catalog": { "names": { "any": [ "<имя_каталога_1>", "<имя_каталога_2>", ... "<имя_каталога_N>" ] }, "nameRegexp": "<регулярное_выражение>" }, "users": [ "<список_идентификаторов_пользователей>" ], "groups": [ "<список_идентификаторов_групп>" ], "description": "<описание_правила>" }, { <Блок_правила_2> }, ... { <Блок_правила_N> } ] } } }Где:
-
accessControl— конфигурация прав доступа в рамках кластера. -
procedures— список блоков правил для процедур. Все параметры правила являются опциональными:privileges,procedure,schema,catalog,groups,usersиdescription. -
privileges— разрешенные действия над процедурами:EXECUTE— разрешен вызов процедуры.
Если параметр
privilegesне указан, правило запрещает выполнение любых действий над процедурами. -
procedure— процедуры, на которые распространяется правило. Если блокprocedureне указан, правило распространяется на все процедуры.names— список имен процедур.nameRegexp— регулярное выражение. Правило распространяется на процедуры, имена которых соответствуют регулярному выражению.
Блок
procedureдолжен содержать либо вложенный блокnames, либо параметрnameRegexp. -
schema— схемы, на которые распространяется правило. Если блокschemaне указан, правило распространяется на все схемы.names— список имен схем.nameRegexp— регулярное выражение. Правило распространяется на схемы, имена которых соответствуют регулярному выражению.
Блок
schemaдолжен содержать либо вложенный блокnames, либо параметрnameRegexp. -
catalog— каталоги, на которые распространяется правило. Если блокcatalogне указан, правило распространяется на все каталоги кластера.names— список имен каталогов. Каталоги должны создаваться в этом же вызове Cluster.Create.nameRegexp— регулярное выражение. Правило распространяется на каталоги, имена которых соответствуют регулярному выражению.
Блок
catalogдолжен содержать либо вложенный блокnames, либо параметрnameRegexp.
-
groups— список идентификаторов групп, на которые распространяется правило. Если параметрgroupsне указан, правило распространяется на все группы пользователей. -
users— список идентификаторов пользователей, на которых распространяется правило. Если параметрusersне указан, правило распространяется на всех пользователей. -
description— описание правила.
Доступные параметры кластера и их описания см. в инструкции.
-
-
Воспользуйтесь методом Cluster.Create и выполните запрос, например с помощью cURL
:curl \ --request POST \ --header "Authorization: Bearer $IAM_TOKEN" \ --url 'https://trino.api.cloud.yandex.net/managed-trino/v1/clusters' --data '@body.json' -
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите 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": { "procedures": [ { "privileges": [ "<список_разрешений>" ], "procedure": { "names": { "any": [ "<список_имен_процедур>" ] }, "name_regexp": "<регулярное_выражение>" }, "schema": { "names": { "any": [ "<список_имен_схем>" ] }, "name_regexp": "<регулярное_выражение>" }, "catalog": { "names": { "any": [ "<имя_каталога_1>", "<имя_каталога_2>", ... "<имя_каталога_N>" ] }, "name_regexp": "<регулярное_выражение>" }, "users": [ "<список_идентификаторов_пользователей>" ], "groups": [ "<список_идентификаторов_групп>" ], "description": "<описание_правила>" }, { <Блок_правила_2> }, ... { <Блок_правила_N> } ] } } }Где:
-
access_control— конфигурация прав доступа в рамках кластера. -
procedures— список блоков правил для процедур. Все параметры правила являются опциональными:privileges,procedure,schema,catalog,groups,usersиdescription. -
privileges— разрешенные действия над процедурами:EXECUTE— разрешен вызов процедуры.
Если параметр
privilegesне указан, правило запрещает выполнение любых действий над процедурами. -
procedure— процедуры, на которые распространяется правило. Если блокprocedureне указан, правило распространяется на все процедуры.names— список имен процедур.name_regexp— регулярное выражение. Правило распространяется на процедуры, имена которых соответствуют регулярному выражению.
Блок
procedureдолжен содержать либо вложенный блокnames, либо параметрname_regexp. -
schema— схемы, на которые распространяется правило. Если блокschemaне указан, правило распространяется на все схемы.names— список имен схем.name_regexp— регулярное выражение. Правило распространяется на схемы, имена которых соответствуют регулярному выражению.
Блок
schemaдолжен содержать либо вложенный блок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.
Важно
Указанные в правилах имена процедур и схем не проверяются на валидность. Ошибка в имени процедуры или схемы приведет к некорректной работе правила.
-
В консоли управления
перейдите в нужный каталог. -
Перейдите в сервис Managed Service for Trino.
-
Нажмите на имя нужного кластера.
-
Перейдите в блок Настройки доступа → Процедуры.
-
Чтобы добавить правило, нажмите кнопку Добавить правило и в открывшемся окне задайте параметры правила:
-
(Опционально) В поле Комментарий введите описание правила.
-
(Опционально) В поле Пользователи выберите пользователей, на которых распространяется правило:
- Нажмите кнопку Добавить.
- В открывшемся списке выберите нужных пользователей. Чтобы найти пользователя, используйте строку поиска над списком.
- Чтобы удалить пользователя, выбранного по ошибке, повторно нажмите на него в списке.
Если не выбран ни один пользователь, правило распространяется на всех пользователей.
-
(Опционально) В поле Группы выберите группы пользователей, на которые распространяется правило:
- Нажмите кнопку Добавить.
- В открывшемся списке выберите нужные группы. Чтобы найти группу, используйте строку поиска над списком.
- Чтобы удалить группу, выбранную по ошибке, повторно нажмите на нее в списке.
Если не выбрана ни одна группа, правило распространяется на все группы пользователей.
-
(Опционально) В поле Привилегии выберите
EXECUTE, чтобы разрешить вызов процедуры. Если привилегии не выбраны, правило запрещает выполнение любых действий над процедурами. -
(Опционально) В поле Каталоги, к которым применяется правило укажите, на какие каталоги распространяется правило:
- ID — выберите идентификаторы каталогов. Можно выбрать только те каталоги, которые есть в кластере.
- Имя — выберите имена каталогов. Можно выбрать только те каталоги, которые есть в кластере.
- Имя (регулярное выражение) — введите регулярное выражение. Правило распространяется на каталоги, имена которых соответствуют регулярному выражению.
- Не задано — правило распространяется на все каталоги кластера.
-
(Опционально) В поле Схемы, к которым применяется правило укажите, на какие схемы распространяется правило:
- Имя — выберите имена схем.
- Имя (регулярное выражение) — введите регулярное выражение. Правило распространяется на схемы, имена которых соответствуют регулярному выражению.
- Не задано — правило распространяется на все схемы.
-
(Опционально) В поле Процедуры, к которым применяется правило укажите, на какие процедуры распространяется правило:
- Имя — выберите имена процедур.
- Имя (регулярное выражение) — введите регулярное выражение. Правило распространяется на процедуры, имена которых соответствуют регулярному выражению.
- Не задано — правило распространяется на все процедуры.
-
-
При необходимости добавьте другие правила аналогичным образом.
-
Чтобы отредактировать правило:
- В строке этого правила нажмите на значок
. - Измените параметры правила и нажмите кнопку Обновить.
- В строке этого правила нажмите на значок
-
Чтобы удалить ненужное правило, в строке этого правила нажмите на значок
. -
Нажмите кнопку Сохранить изменения.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Чтобы задать правила доступа к процедурам:
-
Если правила доступа еще не заданы, создайте файл
access_control.yamlи добавьте в него следующее содержимое:procedures: # Правило 1 - privileges: [<список_разрешений>] procedure: names: any: [<список_имен_процедур>] name_regexp: <регулярное_выражение> schema: names: any: [<список_имен_схем>] name_regexp: <регулярное_выражение> catalog: ids: any: [<список_идентификаторов_каталогов>] names: any: [<список_имен_каталогов>] name_regexp: <регулярное_выражение> groups: [<список_идентификаторов_групп>] users: [<список_идентификаторов_пользователей>] description: <описание_правила> # Правило 2 - <Параметры_правила_2> ... # Правило N - <Параметры_правила_N>Где:
-
procedures— список правил для процедур. Все параметры правила являются опциональными:privileges,procedure,schema,catalog,groups,usersиdescription. -
privileges— разрешенные действия над процедурами:EXECUTE— разрешен вызов процедуры.
Если параметр
privilegesне указан, правило запрещает выполнение любых действий над процедурами. -
procedure— процедуры, на которые распространяется правило. Если параметрprocedureне указан, правило распространяется на все процедуры.names— список имен процедур.name_regexp— регулярное выражение. Правило распространяется на процедуры, имена которых соответствуют регулярному выражению.
Вы можете указать только один из параметров:
namesилиname_regexp. -
schema— схемы, на которые распространяется правило. Если параметрschemaне указан, правило распространяется на все схемы.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, содержащий список правилprocedures.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 procedures = [ # Правило 1 { privileges = ["<список_разрешений>"] procedure = { 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 = "<регулярное_выражение>" } users = ["<список_идентификаторов_пользователей>"] groups = ["<список_идентификаторов_групп>"] description = "<описание_правила>" }, # Правило 2 { ... }, ... # Правило N { ... } ] ... }Где:
-
procedures— список блоков правил для процедур. Все параметры правила являются опциональными:privileges,procedure,schema,catalog,groups,usersиdescription. -
privileges— разрешенные действия над процедурами:EXECUTE— разрешен вызов процедуры.
Если параметр
privilegesне указан, правило запрещает выполнение любых действий над процедурами. -
procedure— процедуры, на которые распространяется правило. Если блокprocedureне указан, правило распространяется на все процедуры.names— список имен процедур.name_regexp— регулярное выражение. Правило распространяется на процедуры, имена которых соответствуют регулярному выражению.
Вы можете указать только один из параметров:
namesилиname_regexp. -
schema— схемы, на которые распространяется правило. Если блокschemaне указан, правило распространяется на все схемы.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-токен>" -
Если правила доступа еще не заданы, создайте файл
body.jsonи добавьте в него следующее содержимое:{ "updateMask": "trino.accessControl.procedures", "trino": { "accessControl": { "procedures": [ { "privileges": [ "<список_разрешений>" ], "procedure": { "names": { "any": [ "<список_имен_процедур>" ] }, "nameRegexp": "<регулярное_выражение>" }, "schema": { "names": { "any": [ "<список_имен_схем>" ] }, "nameRegexp": "<регулярное_выражение>" }, "catalog": { "ids": { "any": [ "<список_идентификаторов_каталогов>" ] }, "names": { "any": [ "<список_имен_каталогов>" ] }, "nameRegexp": "<регулярное_выражение>" }, "users": [ "<список_идентификаторов_пользователей>" ], "groups": [ "<список_идентификаторов_групп>" ], "description": "<описание_правила>" }, { <Блок_правила_2> }, ... { <Блок_правила_N> } ] } } }Где:
-
updateMask— перечень изменяемых параметров в строку через запятую.Важно
При изменении кластера все параметры изменяемого объекта, которые не были явно переданы в запросе, будут переопределены на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
updateMask. -
accessControl— конфигурация прав доступа в рамках кластера. -
procedures— список блоков правил для процедур. Все параметры правила являются опциональными:privileges,procedure,schema,catalog,groups,usersиdescription. -
privileges— разрешенные действия над процедурами:EXECUTE— разрешен вызов процедуры.
Если параметр
privilegesне указан, правило запрещает выполнение любых действий над процедурами. -
procedure— процедуры, на которые распространяется правило. Если блокprocedureне указан, правило распространяется на все процедуры.names— список имен процедур.nameRegexp— регулярное выражение. Правило распространяется на процедуры, имена которых соответствуют регулярному выражению.
Блок
procedureдолжен содержать либо вложенный блокnames, либо параметрnameRegexp. -
schema— схемы, на которые распространяется правило. Если блокschemaне указан, правило распространяется на все схемы.names— список имен схем.nameRegexp— регулярное выражение. Правило распространяется на схемы, имена которых соответствуют регулярному выражению.
Блок
schemaдолжен содержать либо вложенный блокnames, либо параметрnameRegexp. -
catalog— каталоги, на которые распространяется правило. Если блокcatalogне указан, правило распространяется на все каталоги кластера.ids— список идентификаторов каталогов. Указанные каталоги должны существовать.names— список имен каталогов. Указанные каталоги должны существовать.nameRegexp— регулярное выражение. Правило распространяется на каталоги, имена которых соответствуют регулярному выражению.
Блок
catalogдолжен содержать либо один из вложенных блоковidsилиnames, либо параметрnameRegexp.
-
groups— список идентификаторов групп, на которые распространяется правило. Если параметрgroupsне указан, правило распространяется на все группы пользователей. -
users— список идентификаторов пользователей, на которых распространяется правило. Если параметрusersне указан, правило распространяется на всех пользователей. -
description— описание правила.
-
-
Если правила уже заданы, откройте существующий файл
body.jsonс правилами и внесите в него правки. Вы можете:- добавить новые правила;
- изменить параметры существующих правил;
- удалить ненужные правила.
-
Воспользуйтесь методом Cluster.Update и выполните запрос, например с помощью cURL
:curl \ --request PATCH \ --header "Authorization: Bearer $IAM_TOKEN" \ --url 'https://trino.api.cloud.yandex.net/managed-trino/v1/clusters/<идентификатор_кластера>' --data '@body.json'Идентификатор кластера можно получить со списком кластеров в каталоге.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите 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.procedures" ] }, "trino": { "access_control": { "procedures": [ { "privileges": [ "<список_разрешений>" ], "procedure": { "names": { "any": [ "<список_имен_процедур>" ] }, "name_regexp": "<регулярное_выражение>" }, "schema": { "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— конфигурация прав доступа в рамках кластера. -
procedures— список блоков правил для процедур. Все параметры правила являются опциональными:privileges,procedure,schema,catalog,groups,usersиdescription. -
privileges— разрешенные действия над процедурами:EXECUTE— разрешен вызов процедуры.
Если параметр
privilegesне указан, правило запрещает выполнение любых действий над процедурами. -
procedure— процедуры, на которые распространяется правило. Если блокprocedureне указан, правило распространяется на все процедуры.names— список имен процедур.name_regexp— регулярное выражение. Правило распространяется на процедуры, имена которых соответствуют регулярному выражению.
Блок
procedureдолжен содержать либо вложенный блокnames, либо параметрname_regexp. -
schema— схемы, на которые распространяется правило. Если блокschemaне указан, правило распространяется на все схемы.names— список имен схем.name_regexp— регулярное выражение. Правило распространяется на схемы, имена которых соответствуют регулярному выражению.
Блок
schemaдолжен содержать либо вложенный блок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 -
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Пример назначения правил доступа к процедурам
Допустим, вам нужно настроить правила доступа к пользовательским процедурам в кластере Trino:
- Запретить любые действия над процедурами пользователю с идентификатором
banned_user_id. - Разрешить пользователям из группы с идентификатором
admins_group_idвызывать процедуры. - Запретить любые действия над процедурами всем остальным пользователям.
Файл access_control.yaml для такого набора правил выглядит так:
procedures:
- users:
- banned_user_id
- groups:
- admins_group_id
privileges:
- EXECUTE
Конфигурационный файл для такого набора правил выглядит так:
resource "yandex_trino_access_control" "trino_access_control" {
...
cluster_id = <идентификатор_кластера>
procedures = [
{
users = ["banned_user_id"]
},
{
groups = ["admins_group_id"]
privileges = ["EXECUTE"]
},
]
...
}
Файл body.json для такого набора правил выглядит так:
{
"updateMask": "trino.accessControl.procedures",
"trino": {
"accessControl": {
"procedures": [
{
"users": [
"banned_user_id"
]
},
{
"groups": [
"admins_group_id"
],
"privileges": [
"EXECUTE"
]
}
]
}
}
}
Файл body.json для такого набора правил выглядит так:
{
"cluster_id": "<идентификатор_кластера>",
"update_mask": {
"paths": [
"trino.access_control.procedures"
]
},
"trino": {
"access_control": {
"procedures": [
{
"users": [
"banned_user_id"
]
},
{
"groups": [
"admins_group_id"
],
"privileges": [
"EXECUTE"
]
}
]
}
}
}