Создание пользовательских ролей RBAC
Note
Доступно в Grafana Enterprise и Grafana Cloud.
Создавайте пользовательскую роль RBAC, когда базовые и фиксированные роли не покрывают ваши требования к разрешениям. Список действий и областей видимости (scope), которыми можно настраивать роль, приведён в разделе Действия и области видимости разрешений Grafana RBAC.
Caution
Перед созданием пользовательских ролей подумайте, можно ли решить задачу доступа с помощью:
- Разрешений на папки: управление доступом к дашбордам, правилам алертинга и другим ресурсам на уровне папок
- Фиксированных ролей: готовые роли для типовых схем доступа
Используйте пользовательские роли только тогда, когда нужен точный контроль, который эти возможности не обеспечивают.
Создавать и редактировать пользовательские роли через интерфейс Grafana пока нельзя. Вместо этого используйте один из следующих способов:
- HTTP API RBAC
- Terraform
- Провижининг Grafana с помощью YAML-файла
Прежде чем начать
Прежде чем начать, учтите следующее:
- Спланируйте стратегию внедрения RBAC.
- Определите, какие разрешения нужно добавить в пользовательскую роль. Список действий и областей видимости приведён в разделе Разрешения, действия и области видимости RBAC.
- Убедитесь, что у вас есть права на создание пользовательской роли.
- По умолчанию роль Grafana Admin имеет право создавать пользовательские роли.
- Grafana Admin может делегировать привилегию создания пользовательских ролей другому пользователю, создав пользовательскую роль с нужными разрешениями и добавив область видимости
permissions:type:delegate.
Создание пользовательских ролей через HTTP API
Примеры ниже показывают, как создать пользовательскую роль с помощью HTTP API Grafana. Дополнительную информацию об HTTP API см. в разделе Создание новой пользовательской роли.
Note
При создании пользовательской роли вы можете выдать ей только те разрешения, которые есть у вас самих. Например, если у вас есть только разрешение
users:create, то вы не сможете создать роль, включающую другие разрешения.
Следующий пример создаёт роль custom:users:admin и назначает ей действие users:create.
Пример запроса
curl --location --request POST '<grafana_url>/api/access-control/roles/' \
--header 'Authorization: Basic YWRtaW46cGFzc3dvcmQ=' \
--header 'Content-Type: application/json' \
--data-raw '{
"version": 1,
"uid": "jZrmlLCkGksdka",
"name": "custom:users:admin",
"displayName": "custom users admin",
"description": "My custom role which gives users permissions to create users",
"global": true,
"permissions": [
{
"action": "users:create"
}
]
}'
Пример ответа
{
"version": 1,
"uid": "jZrmlLCkGksdka",
"name": "custom:users:admin",
"displayName": "custom users admin",
"description": "My custom role which gives users permissions to create users",
"global": true,
"permissions": [
{
"action": "users:create",
"updated": "2021-05-17T22:07:31.569936+02:00",
"created": "2021-05-17T22:07:31.569935+02:00"
}
],
"updated": "2021-05-17T22:07:31.564403+02:00",
"created": "2021-05-17T22:07:31.564403+02:00"
}
Дополнительные сведения см. в разделе HTTP API RBAC.
Создание пользовательских ролей через Terraform
Управлять пользовательскими ролями и их назначениями можно с помощью провайдера Grafana для Terraform. Это рекомендуемый способ для пользователей Grafana Cloud, которые хотят управлять RBAC как кодом. Дополнительную информацию см. в разделе Провижининг RBAC с помощью Terraform.
Следующий пример создаёт пользовательскую роль и назначает её команде:
resource "grafana_role" "custom_folder_manager" {
name = "custom:folders:manager"
description = "Custom role for reading and creating folders"
uid = "custom-folders-manager"
version = 1
global = true
permissions {
action = "folders:read"
scope = "folders:*"
}
permissions {
action = "folders:create"
scope = "folders:uid:general" # Allows creating folders at the root level
}
}
resource "grafana_role_assignment" "custom_folder_manager_assignment" {
role_uid = grafana_role.custom_folder_manager.uid
teams = ["<TEAM_UID>"]
}
Дополнительную информацию см. в документации по grafana_role и grafana_role_assignment в Terraform Registry.
Создание пользовательских ролей с помощью файлового провижининга
Вы можете использовать файловый провижининг для создания пользовательских ролей в самостоятельно развёрнутых инстансах.
-
Откройте файл конфигурации YAML и найдите раздел
roles. -
Обратитесь к следующей таблице, чтобы добавить атрибуты и значения.
-
Перезагрузите файл конфигурации провижининга.
Дополнительную информацию о перезагрузке конфигурации провижининга во время работы см. в разделе Перезагрузка конфигураций провижининга.
Следующий пример создаёт локальную роль:
# config file version
apiVersion: 2
roles:
- name: custom:users:writer
description: 'List, create, or update other users.'
version: 1
orgId: 1
permissions:
- action: 'users:read'
scope: 'global.users:*'
- action: 'users:write'
scope: 'global.users:*'
- action: 'users:create'
Следующий пример создаёт скрытую глобальную роль. Параметр global: true создаёт глобальную роль, а параметр hidden: true скрывает роль из списка выбора роли.
# config file version
apiVersion: 2
roles:
- name: custom:users:writer
description: 'List, create, or update other users.'
version: 1
global: true
hidden: true
permissions:
- action: 'users:read'
scope: 'global.users:*'
- action: 'users:write'
scope: 'global.users:*'
- action: 'users:create'
Следующий пример создаёт глобальную роль на основе других фиксированных ролей. Параметр from содержит роли, из которых нужно
скопировать разрешения. Параметр разрешения state: absent можно использовать, чтобы указать разрешения, исключаемые из копирования.
# config file version
apiVersion: 2
roles:
- name: custom:org.users:writer
description: 'List and remove other users from the organization.'
version: 1
global: true
from:
- name: 'fixed:org.users:reader'
global: true
- name: 'fixed:org.users:writer'
global: true
permissions:
- action: 'org.users:write'
scope: 'users:*'
state: 'absent'
- action: 'org.users:add'
scope: 'users:*'
state: 'absent'
Удаление пользовательской роли с помощью провижининга Grafana
Удаляйте пользовательскую роль, когда она больше не нужна. При удалении пользовательской роли она исключается из пользователей и команд, которым была назначена.
Прежде чем начать:
- Определите роль или роли, которые нужно удалить.
- Убедитесь, что у вас есть доступ к файлу конфигурации YAML.
Чтобы удалить пользовательскую роль:
-
Откройте файл конфигурации YAML и найдите раздел
roles. -
Обратитесь к следующей таблице, чтобы добавить атрибуты и значения.
-
Перезагрузите файл конфигурации провижининга.
Дополнительную информацию о перезагрузке конфигурации провижининга во время работы см. в разделе Перезагрузка конфигураций провижининга.
Следующий пример удаляет пользовательскую роль:
# config file version
apiVersion: 2
roles:
- name: 'custom:reports:editor'
orgId: 1
state: 'absent'
force: true
Удалить пользовательскую роль можно также через API. Дополнительные сведения см. в разделе HTTP API RBAC.