Назначение правил доступа к схемам в Managed Service for Trino
Правила доступа к схемам определяют, какие пользователи являются владельцами тех или иных схем в кластере Managed Service for Trino.
Примечание
Владелец схемы может создать, обновить или удалить ее. Для этого владельцу нужен уровень доступа ALL на каталог, в котором находится схема.
Для каждой пары «пользователь–схема» правила применяются следующим образом:
- Правила проверяются в порядке их объявления. Применяется первое найденное правило, которое соответствует паре «пользователь–схема».
- Если ни одно из заданных правил не соответствует паре «пользователь–схема», то пользователь не является владельцем схемы.
- Если не задано ни одно правило доступа к схемам, каждый пользователь является владельцем всех схем во всех каталогах.
Назначить правила при создании кластера
Правила доступа к схемам можно назначить одновременно с созданием кластера Managed Service for Trino.
Важно
Указанные в правилах имена схем не проверяются на валидность. Ошибка в имени схемы приведет к некорректной работе правила.
-
В консоли управления
выберите каталог, в котором нужно создать кластер Managed Service for Trino. -
Перейдите в сервис Managed Service for Trino.
-
Нажмите кнопку Создать кластер и задайте параметры кластера.
-
В блоке Настройки доступа нажмите на значок
. -
В поле Схемы нажмите кнопку Добавить правило.
-
В открывшемся окне задайте параметры правила:
-
(Опционально) В поле Комментарий введите описание правила.
-
(Опционально) В поле Пользователи выберите пользователей, на которых распространяется правило:
- Нажмите кнопку Добавить.
- В открывшемся списке выберите нужных пользователей. Чтобы найти пользователя, используйте строку поиска над списком.
- Чтобы удалить пользователя, выбранного по ошибке, повторно нажмите на него в списке.
Если не выбран ни один пользователь, правило распространяется на всех пользователей.
-
(Опционально) В поле Группы выберите группы пользователей, на которые распространяется правило:
- Нажмите кнопку Добавить.
- В открывшемся списке выберите нужные группы. Чтобы найти группу, используйте строку поиска над списком.
- Чтобы удалить группу, выбранную по ошибке, повторно нажмите на нее в списке.
Если не выбрана ни одна группа, правило распространяется на все группы пользователей.
-
В поле Владелец схемы выберите, является ли пользователь владельцем схемы:
YES— является.NO— не является.
-
(Опционально) В поле Каталоги, к которым применяется правило укажите, на какие каталоги распространяется правило:
- Имя — выберите имена каталогов. Можно выбрать только каталоги, добавленные в блоке Каталоги.
- Имя (регулярное выражение) — введите регулярное выражение. Правило распространяется на каталоги, имена которых соответствуют регулярному выражению.
- Не задано — правило распространяется на все каталоги кластера.
-
(Опционально) В поле Схемы, к которым применяется правило укажите, на какие схемы распространяется правило:
- Имя — выберите имена схем.
- Имя (регулярное выражение) — введите регулярное выражение. Правило распространяется на схемы, имена которых соответствуют регулярному выражению.
- Не задано — правило распространяется на все схемы.
-
-
При необходимости добавьте другие правила аналогичным образом.
-
Чтобы удалить правило, добавленное по ошибке, в строке этого правила нажмите на значок
. -
Нажмите кнопку Создать.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Чтобы задать правила доступа к схемам:
-
Создайте файл
access_control.yamlи добавьте в него следующее содержимое:schemas: # Правило 1 - owner: <владеет_ли_пользователь_схемой> schema: names: any: [<список_имен_схем>] name_regexp: <регулярное_выражение> catalog: name_regexp: <регулярное_выражение> groups: [<список_идентификаторов_групп>] users: [<список_идентификаторов_пользователей>] description: <описание_правила> # Правило 2 - <Параметры_правила_2> ... # Правило N - <Параметры_правила_N>Где:
-
schemas— список правил для схем. Каждое правило включает в себя обязательный параметрowner, а также опциональные параметрыschema,catalog,groups,usersиdescription. -
owner— является ли пользователь владельцем схемы:YES— является.NO— не является.
-
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, содержащий список правилschemas.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 schemas = [ # Правило 1 { owner = "<владеет_ли_пользователь_схемой>" 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 { ... } ] ... }Где:
-
schemas— список блоков правил для схем. Каждое правило включает в себя обязательный параметрowner, а также опциональные параметрыschema,catalog,groups,usersиdescription. -
owner— является ли пользователь владельцем схемы:YES— является.NO— не является.
-
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": { "schemas": [ { "owner": "<владеет_ли_пользователь_схемой>", "schema": { "names": { "any": [ "<список_имен_схем>" ] }, "nameRegexp": "<регулярное_выражение>" }, "catalog": { "names": { "any": [ "<имя_каталога_1>", "<имя_каталога_2>", ... "<имя_каталога_N>" ] }, "nameRegexp": "<регулярное_выражение>" }, "users": [ "<список_идентификаторов_пользователей>" ], "groups": [ "<список_идентификаторов_групп>" ], "description": "<описание_правила>" }, { <Блок_правила_2> }, ... { <Блок_правила_N> } ] } } }Где:
-
accessControl— конфигурация прав доступа в рамках кластера. -
schemas— список блоков правил для схем. Каждое правило включает в себя обязательный параметрowner, а также опциональные параметрыschema,catalog,groups,usersиdescription. -
owner— является ли пользователь владельцем схемы:YES— является.NO— не является.
-
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": { "schemas": [ { "owner": "<владеет_ли_пользователь_схемой>", "schema": { "names": { "any": [ "<список_имен_схем>" ] }, "name_regexp": "<регулярное_выражение>" }, "catalog": { "names": { "any": [ "<имя_каталога_1>", "<имя_каталога_2>", ... "<имя_каталога_N>" ] }, "name_regexp": "<регулярное_выражение>" }, "users": [ "<список_идентификаторов_пользователей>" ], "groups": [ "<список_идентификаторов_групп>" ], "description": "<описание_правила>" }, { <Блок_правила_2> }, ... { <Блок_правила_N> } ] } } }Где:
-
access_control— конфигурация прав доступа в рамках кластера. -
schemas— список блоков правил для схем. Каждое правило включает в себя обязательный параметрowner, а также опциональные параметрыschema,catalog,groups,usersиdescription. -
owner— является ли пользователь владельцем схемы:YES— является.NO— не является.
-
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.
-
Нажмите на имя нужного кластера.
-
Перейдите в блок Настройки доступа → Схемы.
-
Чтобы добавить правило, нажмите кнопку Добавить правило и в открывшемся окне задайте параметры правила:
-
(Опционально) В поле Комментарий введите описание правила.
-
(Опционально) В поле Пользователи выберите пользователей, на которых распространяется правило:
- Нажмите кнопку Добавить.
- В открывшемся списке выберите нужных пользователей. Чтобы найти пользователя, используйте строку поиска над списком.
- Чтобы удалить пользователя, выбранного по ошибке, повторно нажмите на него в списке.
Если не выбран ни один пользователь, правило распространяется на всех пользователей.
-
(Опционально) В поле Группы выберите группы пользователей, на которые распространяется правило:
- Нажмите кнопку Добавить.
- В открывшемся списке выберите нужные группы. Чтобы найти группу, используйте строку поиска над списком.
- Чтобы удалить группу, выбранную по ошибке, повторно нажмите на нее в списке.
Если не выбрана ни одна группа, правило распространяется на все группы пользователей.
-
В поле Владелец схемы выберите, является ли пользователь владельцем схемы:
YES— является.NO— не является.
-
(Опционально) В поле Каталоги, к которым применяется правило укажите, на какие каталоги распространяется правило:
- ID — выберите идентификаторы каталогов. Можно выбрать только те каталоги, которые есть в кластере.
- Имя — выберите имена каталогов. Можно выбрать только те каталоги, которые есть в кластере.
- Имя (регулярное выражение) — введите регулярное выражение. Правило распространяется на каталоги, имена которых соответствуют регулярному выражению.
- Не задано — правило распространяется на все каталоги кластера.
-
(Опционально) В поле Схемы, к которым применяется правило укажите, на какие схемы распространяется правило:
- Имя — выберите имена схем.
- Имя (регулярное выражение) — введите регулярное выражение. Правило распространяется на схемы, имена которых соответствуют регулярному выражению.
- Не задано — правило распространяется на все схемы.
-
-
При необходимости добавьте другие правила аналогичным образом.
-
Чтобы отредактировать правило:
- В строке этого правила нажмите на значок
. - Измените параметры правила и нажмите кнопку Обновить.
- В строке этого правила нажмите на значок
-
Чтобы удалить ненужное правило, в строке этого правила нажмите на значок
. -
Нажмите кнопку Сохранить изменения.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Чтобы задать правила доступа к схемам:
-
Если правила доступа еще не заданы, создайте файл
access_control.yamlи добавьте в него следующее содержимое:schemas: # Правило 1 - owner: <владеет_ли_пользователь_схемой> schema: names: any: [<список_имен_схем>] name_regexp: <регулярное_выражение> catalog: ids: any: [<список_идентификаторов_каталогов>] names: any: [<список_имен_каталогов>] name_regexp: <регулярное_выражение> groups: [<список_идентификаторов_групп>] users: [<список_идентификаторов_пользователей>] description: <описание_правила> # Правило 2 - <Параметры_правила_2> ... # Правило N - <Параметры_правила_N>Где:
-
schemas— список правил для схем. Каждое правило включает в себя обязательный параметрowner, а также опциональные параметрыschema,catalog,groups,usersиdescription. -
owner— является ли пользователь владельцем схемы:YES— является.NO— не является.
-
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, содержащий список правилschemas.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 schemas = [ # Правило 1 { owner = "<владеет_ли_пользователь_схемой>" 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 { ... } ] ... }Где:
-
schemas— список блоков правил для схем. Каждое правило включает в себя обязательный параметрowner, а также опциональные параметрыschema,catalog,groups,usersиdescription. -
owner— является ли пользователь владельцем схемы:YES— является.NO— не является.
-
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.schemas", "trino": { "accessControl": { "schemas": [ { "owner": "<владеет_ли_пользователь_схемой>", "schema": { "names": { "any": [ "<список_имен_схем>" ] }, "nameRegexp": "<регулярное_выражение>" }, "catalog": { "ids": { "any": [ "<список_идентификаторов_каталогов>" ] }, "names": { "any": [ "<список_имен_каталогов>" ] }, "nameRegexp": "<регулярное_выражение>" }, "users": [ "<список_идентификаторов_пользователей>" ], "groups": [ "<список_идентификаторов_групп>" ], "description": "<описание_правила>" }, { <Блок_правила_2> }, ... { <Блок_правила_N> } ] } } }Где:
-
updateMask— перечень изменяемых параметров в строку через запятую.Важно
При изменении кластера все параметры изменяемого объекта, которые не были явно переданы в запросе, будут переопределены на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
updateMask. -
accessControl— конфигурация прав доступа в рамках кластера. -
schemas— список блоков правил для схем. Каждое правило включает в себя обязательный параметрowner, а также опциональные параметрыschema,catalog,groups,usersиdescription. -
owner— является ли пользователь владельцем схемы:YES— является.NO— не является.
-
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.schemas" ] }, "trino": { "access_control": { "schemas": [ { "owner": "<владеет_ли_пользователь_схемой>", "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— конфигурация прав доступа в рамках кластера. -
schemas— список блоков правил для схем. Каждое правило включает в себя обязательный параметрowner, а также опциональные параметрыschema,catalog,groups,usersиdescription. -
owner— является ли пользователь владельцем схемы:YES— является.NO— не является.
-
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не является владельцем ни одной схемы. - Пользователи, входящие в группы с идентификаторами
data_engineering_group_idилиadmins_group_id, являются владельцами схем с именамиb2bиb2c, находящихся в каталогах с именами видаdwh_.*. - Все остальные пользователи не являются владельцами ни одной схемы.
Файл access_control.yaml для такого набора правил выглядит так:
schemas:
- users:
- banned_user_id
owner: NO
- groups:
- data_engineering_group_id
- admins_group_id
schema:
names:
any:
- b2b
- b2c
catalog:
name_regexp: "dwh_.*"
owner: YES
Конфигурационный файл для такого набора правил выглядит так:
resource "yandex_trino_access_control" "trino_access_control" {
...
cluster_id = <идентификатор_кластера>
schemas = [
{
users = ["banned_user_id"]
owner = "NO"
},
{
groups = ["data_engineering_group_id", "admins_group_id"]
schema = {
names = ["b2b", "b2c"]
}
catalog = {
name_regexp = "dwh_.*"
}
owner = "YES"
}
]
...
}
Файл body.json для такого набора правил выглядит так:
{
"updateMask": "trino.accessControl.schemas",
"trino": {
"accessControl": {
"schemas": [
{
"users": [
"banned_user_id"
],
"owner": "NO"
},
{
"groups": [
"data_engineering_group_id",
"admins_group_id"
],
"schema": {
"names": {
"any": [
"b2b",
"b2c"
]
}
},
"catalog": {
"nameRegexp": "dwh_.*"
},
"owner": "YES"
}
]
}
}
}
Файл body.json для такого набора правил выглядит так:
{
"cluster_id": "<идентификатор_кластера>",
"update_mask": {
"paths": [
"trino.access_control.schemas"
]
},
"trino": {
"access_control": {
"schemas": [
{
"users": [
"banned_user_id"
],
"owner": "NO"
},
{
"groups": [
"data_engineering_group_id",
"admins_group_id"
],
"schema": {
"names": {
"any": [
"b2b",
"b2c"
]
}
},
"catalog": {
"name_regexp": "dwh_.*"
},
"owner": "YES"
}
]
}
}
}