Управление ролями RBAC

Note

Доступно в Grafana Enterprise и Grafana Cloud.

В этом разделе приведены инструкции о том, как просматривать разрешения, связанные с ролями, создавать пользовательские роли, а также обновлять и удалять роли.

Просмотр определений базовых ролей

Вы можете получить полное определение базовой роли, включая все связанные с ней разрешения, с помощью API или перейдя напрямую по URL конечной точки в браузере, будучи авторизованным как администратор.

Использование API

Чтобы получить определение базовой роли:

Bash
GET /api/access-control/roles/basic_<role>

Где <role> — одна из ролей: viewer, editor, admin или grafana_admin.

Например, чтобы получить определение роли Viewer:

Bash
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.

Чтобы изменить разрешения базовой роли:

  1. Откройте файл конфигурации YAML и найдите раздел roles.

  2. Воспользуйтесь следующей таблицей, чтобы добавить атрибуты и значения.

    Атрибут Описание
    name Имя базовой роли, которую нужно обновить. Вместо имени роли можно указать uid. Требуется либо name, либо uid роли.
    orgId Идентифицирует организацию, к которой относится роль. Вместо него можно использовать global, чтобы указать, что роль является глобальной.
    version Идентифицирует версию роли, что предотвращает перезапись более новых изменений.
    overrideRole Если установлено в true, роль будет обновлена независимо от её версии в базе данных. Если overrideRole установлено в true, указывать version не нужно.
    from Список ролей, из которых копируются разрешения.
    permissions > state Состояние разрешения. Его можно установить в absent, чтобы гарантировать исключение разрешения из списка копирования.
  3. Перезагрузите файл конфигурации провижининга. Дополнительные сведения о перезагрузке конфигурации провижининга во время выполнения см. в разделе Перезагрузка конфигураций провижининга.

Пример: изменение роли Grafana Admin

В следующем примере изменяются разрешения базовой роли Grafana Admin.

В новой конфигурации:

  • Удаляются разрешения на просмотр списка, выдачу и отзыв ролей у команд.
  • Добавляется разрешение на чтение и запись папок Grafana.
YAML
# 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, увеличивает версию и обновляет роль:

Bash
# 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 следующие разрешения:

Действие Область видимости
grafana-assistant-app.chats:access
plugins.app:access plugins:id:grafana-assistant-app

Удалить эти разрешения можно с помощью файла конфигурации или с помощью API.

Используйте список role > from и параметр permission > state вашего файла провижининга, чтобы удалить разрешения:

YAML
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, увеличивает версию и обновляет роль:

Bash
# 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.

  1. Откройте файл конфигурации и обновите раздел rbac следующим образом:
Bash
[rbac]
reset_basic_roles = true

Использование конечной точки HTTP

Альтернативой параметру конфигурации является использование конечной точки HTTP.

  1. Откройте файл конфигурации YAML и найдите раздел roles.

  2. Выдайте разрешение action: "roles:write", scope: "permissions:type:escalate роли Grafana Admin. Учтите, что это разрешение по умолчанию не выдано ни одной базовой роли, поскольку при сбросе разрешений базовых ролей пользователи могли бы получить больше разрешений, чем у них было ранее.

    YAML
    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'
  3. Будучи Grafana Admin, вызовите конечную точку API, чтобы сбросить базовые роли к значениям по умолчанию. Подробности см. в HTTP API RBAC.