Создание пользовательских ролей RBAC

Note

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

Создавайте пользовательскую роль RBAC, когда базовые и фиксированные роли не покрывают ваши требования к разрешениям. Список действий и областей видимости (scope), которыми можно настраивать роль, приведён в разделе Действия и области видимости разрешений Grafana RBAC.

Caution

Перед созданием пользовательских ролей подумайте, можно ли решить задачу доступа с помощью:

Используйте пользовательские роли только тогда, когда нужен точный контроль, который эти возможности не обеспечивают.

Создавать и редактировать пользовательские роли через интерфейс Grafana пока нельзя. Вместо этого используйте один из следующих способов:

Прежде чем начать

Прежде чем начать, учтите следующее:

  • Спланируйте стратегию внедрения 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.

Следующий пример создаёт пользовательскую роль и назначает её команде:

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.

Создание пользовательских ролей с помощью файлового провижининга

Вы можете использовать файловый провижининг для создания пользовательских ролей в самостоятельно развёрнутых инстансах.

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

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

Атрибут Описание
name Удобный для человека идентификатор роли, помогающий администраторам понять её назначение. name обязателен и не может быть длиннее 190 символов. Рекомендуется использовать ASCII-символы. Имена ролей должны быть уникальными в пределах организации.
uid Уникальный идентификатор, связанный с ролью. UID позволяет изменять или удалять роль. Вы можете сгенерировать UID самостоятельно или позволить Grafana сгенерировать его за вас. Нельзя использовать один и тот же UID в пределах одного инстанса Grafana.
orgId Определяет организацию, которой принадлежит роль. Если orgId не задан, используется ID организации по умолчанию.
global Глобальные роли не связаны с конкретной организацией, поэтому их можно переиспользовать во всех организациях. Этот параметр переопределяет orgId.
displayName Удобный для человека текст, отображаемый в интерфейсе. Отображаемое имя роли не может быть длиннее 190 ASCII-символов. Для фиксированных ролей отображаемое имя показывается так, как задано. Если отображаемое имя не задано, оно формируется заменой ':' (двоеточия) на ' ' (пробел).
description Удобный для человека текст, описывающий разрешения, которые предоставляет роль.
group Организует роли в списке выбора роли.
version Положительное целое число, определяющее текущую версию роли и предотвращающее перезапись более новых изменений.
hidden Скрытые роли не отображаются в списке выбора роли.
state Состояние роли. По умолчанию — present; если задать absent, роль будет удалена.
force Может использоваться вместе с состоянием absent для принудительного удаления роли и всех её назначений.
from Необязательный список ролей, из которых нужно скопировать разрешения.
permissions Предоставляет пользователям доступ к ресурсам Grafana. Список разрешений см. в разделе Действия и области видимости разрешений RBAC. Если вы не знаете, какие разрешения назначить, можно создать и назначить роль без разрешений в качестве заглушки. С помощью атрибута from можно указать дополнительные разрешения или разрешения для удаления, добавив state в список разрешений.
  1. Перезагрузите файл конфигурации провижининга.

    Дополнительную информацию о перезагрузке конфигурации провижининга во время работы см. в разделе Перезагрузка конфигураций провижининга.

Следующий пример создаёт локальную роль:

YAML
# 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 скрывает роль из списка выбора роли.

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

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

Чтобы удалить пользовательскую роль:

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

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

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

    Дополнительную информацию о перезагрузке конфигурации провижининга во время работы см. в разделе Перезагрузка конфигураций провижининга.

Следующий пример удаляет пользовательскую роль:

YAML
# config file version
apiVersion: 2

roles:
  - name: 'custom:reports:editor'
    orgId: 1
    state: 'absent'
    force: true

Удалить пользовательскую роль можно также через API. Дополнительные сведения см. в разделе HTTP API RBAC.