Управление ролями RBAC
Note
Доступно в Grafana Enterprise и Grafana Cloud.
В этом разделе приведены инструкции о том, как просматривать разрешения, связанные с ролями, создавать пользовательские роли, а также обновлять и удалять роли.
Просмотр определений базовых ролей
Вы можете получить полное определение базовой роли, включая все связанные с ней разрешения, с помощью API или перейдя напрямую по URL конечной точки в браузере, будучи авторизованным как администратор.
Использование API
Чтобы получить определение базовой роли:
GET /api/access-control/roles/basic_<role>
Где <role> — одна из ролей: viewer, editor, admin или grafana_admin.
Например, чтобы получить определение роли Viewer:
curl --location 'https://<your-stack-name>.grafana.net/api/access-control/roles/basic_viewer' \
--header 'Authorization: Bearer <service-account-token>'
Использование браузера
Вы также можете просмотреть определение роли прямо в браузере, перейдя по адресу:
https://<your-stack-name>.grafana.net/api/access-control/roles/basic_viewer
Это работает при входе в систему под пользователем с правами администратора.
Дополнительные сведения см. в разделе Получение роли.
Справочник по назначениям базовых и фиксированных ролей см. в разделе Определения ролей RBAC.
Обновление разрешений роли
Если разрешения базовой роли по умолчанию не отвечают вашим требованиям, вы можете их изменить.
Базовые роли являются изменяемыми. Вы можете добавлять или удалять отдельные разрешения у ролей Viewer, Editor, Admin и Grafana Admin, не создавая пользовательскую роль. Каждое разрешение представляет собой комбинацию action (действия) и scope (области видимости). Например, вы можете отозвать доступ к определённому прикладному плагину у всех зрителей, удалив соответствующие разрешения из роли basic:viewer.
Прежде чем менять разрешения базовых ролей, определите, какие роли нужно изменить и как это изменение повлияет на ваших пользователей и команды. Рекомендации по планированию см. в разделе Планирование стратегии внедрения RBAC.
Caution
Изменения, внесённые в базовую роль, применяются к каждой организации в экземпляре Grafana. Например, если вы добавите разрешения роли
fixed:users:writerв базовую рольViewer, все зрители во всех организациях экземпляра смогут создавать пользователей.Изменения базовых ролей ограничены одним экземпляром Grafana. В Grafana Cloud каждый стек — это отдельный экземпляр, поэтому изменение необходимо применять к каждому стеку отдельно.
Note
Если вам нужно изменить доступ только для конкретных пользователей или команд, а не для всех зрителей, редакторов или администраторов, оставьте базовые роли без изменений. Вместо этого назначьте организационную роль
No Basic Roleи выдайте фиксированные или пользовательские роли этим пользователям или командам. Дополнительные сведения см. в разделе Назначение ролей RBAC.
Вы можете изменить разрешения базовых ролей через файл конфигурации или с помощью API RBAC.
Обновление разрешений базовых ролей в файле конфигурации
Прежде чем начать, определите разрешения, которые вы хотите добавить или удалить у базовой роли. Дополнительные сведения о разрешениях, связанных с базовыми ролями, см. в разделе Определения ролей RBAC.
Note
Вы не можете изменять разрешения
None.
Чтобы изменить разрешения базовой роли:
-
Откройте файл конфигурации YAML и найдите раздел
roles. -
Воспользуйтесь следующей таблицей, чтобы добавить атрибуты и значения.
-
Перезагрузите файл конфигурации провижининга. Дополнительные сведения о перезагрузке конфигурации провижининга во время выполнения см. в разделе Перезагрузка конфигураций провижининга.
Пример: изменение роли Grafana Admin
В следующем примере изменяются разрешения базовой роли Grafana Admin.
В новой конфигурации:
- Удаляются разрешения на просмотр списка, выдачу и отзыв ролей у команд.
- Добавляется разрешение на чтение и запись папок Grafana.
# config file version
apiVersion: 2
roles:
- name: 'basic:grafana_admin'
global: true
version: 3
from:
- name: 'basic:grafana_admin'
global: true
permissions:
# Permissions to remove
- action: 'teams.roles:read'
scope: 'teams:*'
state: 'absent'
- action: 'teams.roles:remove'
scope: 'permissions:type:delegate'
state: 'absent'
- action: 'teams.roles:add'
scope: 'permissions:type:delegate'
state: 'absent'
# Permissions to add
- action: 'folders:read'
scope: 'folder:*'
- action: 'folders:write'
scope: 'folder:*'
Note
В раздел
fromможно добавить несколько ролейfixed,basicилиcustom. Их разрешения будут скопированы и добавлены к базовой роли. Обязательно увеличьте версию роли, чтобы изменения были учтены.
Обновление разрешений базовых ролей с помощью API RBAC
Используйте HTTP API RBAC, когда нужно изменить разрешения базовой роли программно, например из скрипта или конвейера CI. API использует две конечные точки:
GET /api/access-control/roles/{roleUID}возвращает базовую роль и все её разрешения. См. раздел Обновление роли.PUT /api/access-control/roles/{roleUID}заменяет разрешения роли набором, который вы отправите. См. раздел Обновление роли.
UID базовых ролей имеют вид basic_<role>, где <role> — это viewer, editor, admin или grafana_admin.
Поскольку PUT заменяет весь набор разрешений, сначала получите текущую роль, измените её разрешения, увеличьте её version, а затем отправьте результат обратно. Каждый запрос аутентифицируется с помощью
токена сервисной учётной записи, у которой есть роль Role writer, либо с помощью базовой аутентификации под Grafana Admin.
Note
При обновлении глобальной базовой роли отправляйте в теле запроса
global: true, а вversionуказывайте значение больше текущей версии. Grafana отклоняет обновления, в которых версия не увеличена.
Пример: изменение роли Grafana Admin с помощью API
В следующем примере то же изменение, что и в примере с файлом конфигурации, выполняется с помощью API. Он удаляет разрешения на просмотр списка, выдачу и отзыв ролей у команд и добавляет разрешения на чтение и запись папок Grafana.
Скрипт получает роль basic:grafana_admin, удаляет и добавляет разрешения с помощью jq, увеличивает версию и обновляет роль:
# Fetch the role, modify its permissions, and increment its version
curl -H "Authorization: Bearer <SERVICE_ACCOUNT_TOKEN>" \
-X GET '<GRAFANA_URL>/api/access-control/roles/basic_grafana_admin' | \
jq 'del(.created) | del(.updated) | del(.permissions[].created) | del(.permissions[].updated) | .version += 1' | \
jq 'del(.permissions[] | select(.action == "teams.roles:read")) | del(.permissions[] | select(.action == "teams.roles:add")) | del(.permissions[] | select(.action == "teams.roles:remove"))' | \
jq '.permissions += [{"action": "folders:read", "scope": "folders:*"}, {"action": "folders:write", "scope": "folders:*"}]' > basic_grafana_admin.json
# Update the role with the modified permissions
curl -H "Authorization: Bearer <SERVICE_ACCOUNT_TOKEN>" -H "Content-Type: application/json" \
-X PUT -d @basic_grafana_admin.json \
'<GRAFANA_URL>/api/access-control/roles/basic_grafana_admin'
Замените следующие заполнители:
<SERVICE_ACCOUNT_TOKEN>: токен сервисной учётной записи с разрешением на чтение и запись ролей, напримерglsa_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. Чтобы вместо этого использовать базовую аутентификацию, замените заголовокAuthorizationна-u admin:<PASSWORD>.<GRAFANA_URL>: базовый URL вашего экземпляра Grafana, напримерhttps://<YOUR_STACK_NAME>.grafana.netв Grafana Cloud илиhttp://localhost:3000для локального экземпляра.
Фильтры jq сначала удаляют доступные только для чтения метки времени created и updated и увеличивают version роли, затем удаляют ненужные разрешения и, наконец, добавляют новые. Запрос PUT отправляет получившееся определение роли обратно в Grafana.
Пример: отзыв доступа к Grafana Assistant у зрителей
По умолчанию зрители могут обращаться ко всем прикладным плагинам, которые разрешает их организационная роль, включая Grafana Assistant. Чтобы запретить зрителям доступ к Grafana Assistant, удалите из роли basic:viewer следующие разрешения:
Удалить эти разрешения можно с помощью файла конфигурации или с помощью API.
Используйте список role > from и параметр permission > state вашего файла провижининга, чтобы удалить разрешения:
apiVersion: 2
roles:
- name: 'basic:viewer'
global: true
version: 9
from:
- name: 'basic:viewer'
global: true
permissions:
- action: 'grafana-assistant-app.chats:access'
state: 'absent'
- action: 'plugins.app:access'
scope: 'plugins:id:grafana-assistant-app'
state: 'absent'
Либо используйте HTTP API RBAC. Следующий скрипт получает роль basic:viewer, удаляет два разрешения Grafana Assistant, увеличивает версию и обновляет роль:
# Fetch the role, remove the Grafana Assistant permissions, and increment its version
curl -H "Authorization: Bearer <SERVICE_ACCOUNT_TOKEN>" \
-X GET '<GRAFANA_URL>/api/access-control/roles/basic_viewer' | \
jq 'del(.created) | del(.updated) | del(.permissions[].created) | del(.permissions[].updated) | .version += 1' | \
jq 'del(.permissions[] | select(.action == "grafana-assistant-app.chats:access")) | del(.permissions[] | select(.action == "plugins.app:access" and .scope == "plugins:id:grafana-assistant-app"))' > basic_viewer.json
# Update the role with the modified permissions
curl -H "Authorization: Bearer <SERVICE_ACCOUNT_TOKEN>" -H "Content-Type: application/json" \
-X PUT -d @basic_viewer.json \
'<GRAFANA_URL>/api/access-control/roles/basic_viewer'
Замените следующие заполнители:
<SERVICE_ACCOUNT_TOKEN>: токен сервисной учётной записи с разрешением на чтение и запись ролей.<GRAFANA_URL>: базовый URL вашего экземпляра Grafana.
Чтобы найти идентификаторы других прикладных плагинов, см. раздел RBAC для прикладных плагинов. На этой странице также объясняется, как предоставить точный доступ к прикладному плагину конкретным пользователям и командам, не изменяя базовые роли.
Сброс базовых ролей к значениям по умолчанию
У вас есть два варианта сброса разрешений базовых ролей к значениям по умолчанию.
Использование параметра конфигурации
Note: Доступно начиная с Grafana Enterprise 9.4.
Warning: Если этот параметр оставить включённым (true), разрешения будут сбрасываться при каждой загрузке.
Используйте параметр
reset_basic_roles, чтобы сбрасывать разрешения базовых ролей к значениям по умолчанию при загрузке экземпляра Grafana.
- Откройте файл конфигурации и обновите раздел rbac следующим образом:
[rbac]
reset_basic_roles = true
Использование конечной точки HTTP
Альтернативой параметру конфигурации является использование конечной точки HTTP.
-
Откройте файл конфигурации YAML и найдите раздел
roles. -
Выдайте разрешение
action: "roles:write", scope: "permissions:type:escalateролиGrafana Admin. Учтите, что это разрешение по умолчанию не выдано ни одной базовой роли, поскольку при сбросе разрешений базовых ролей пользователи могли бы получить больше разрешений, чем у них было ранее.apiVersion: 2 roles: - name: 'basic:grafana_admin' global: true version: 3 from: - name: 'basic:grafana_admin' global: true permissions: # Permission allowing to reset basic roles - action: 'roles:write' scope: 'permissions:type:escalate' -
Будучи
Grafana Admin, вызовите конечную точку API, чтобы сбросить базовые роли к значениям по умолчанию. Подробности см. в HTTP API RBAC.