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