Перейти к основному содержанию
AgentEye использует детально настраиваемые API-ключи для управления доступом к серверу. Каждый ключ имеет одно или несколько разрешений, которые определяют его возможности.

Разрешения

Сервер поддерживает фиксированный набор разрешений; каждое из них управляет доступом к определённым HTTP маршрутам. Административный ключ имеет все разрешения; ограниченный ключ имеет подмножество, которое вы предоставляете при создании. Неизвестные строки разрешений отклоняются при создании ключа.
Не могут быть назначены ключам. Два действительных разрешения предназначены только для человека/панели и не могут быть предоставлены API-ключу: orgs:admin (администрирование экземпляра, только для операторов) и keys:update. Запрос к POST /keys или PATCH /keys/:id, пытающийся предоставить одно из них, отклоняется с кодом HTTP 422. Смотрите строку keys:update ниже, чтобы понять, почему ключ-носитель может создавать ключи, но не может их редактировать.

Приём и запрос событий

РазрешениеHTTP-маршрутыЧто оно позволяет
events:addPOST /eventsПриём пакетов событий от сборщика. Единственное разрешение, необходимое сборщику.
events:readGET /events, GET /events/latency_aggregate, GET /events/environments, GET /events/models, GET /sessions/:session_id/exportЗапрос событий, получение списка известных окружений, получение идентификаторов моделей в данных (используется в представлении Models и фильтрах модели), расчёт совокупной задержки для тепловой карты / полос процентилей и экспорт сеанса в формате JSONL. Общие конечные точки фасетов фильтра GET /events/environments и GET /events/models доступны с либо events:read либо evaluations:read, поэтому страница сеансов (требует evaluations:read) переиспользует тот же фасет для каждой организации.

Сеансы и оценки

РазрешениеHTTP-маршрутыЧто оно позволяет
evaluations:readGET /sessions, GET /evaluations, GET /evaluations/aggregate, GET /evaluations/environments, GET /evaluation-jobsСписок сеансов, чтение результатов оценки, свёрнутое состояние здоровья оценки для панелей и состояние очереди работников заданий оценки.
evaluations:triggerPOST /sessions/:session_id/re-evaluateРучная постановка в очередь переоценки завершённого сеанса.

Панели

РазрешениеHTTP-маршрутыЧто оно позволяет
dashboards:readGET /dashboards, GET /dashboards/:id, GET /dashboards/:id/tilesПолучение списка панелей, загрузка одной и чтение её плиток.
dashboards:writePOST /dashboards, PUT /dashboards/:id, POST /dashboards/:id/tiles, PUT /dashboards/:id/tiles/:tile_id, DELETE /dashboards/:id/tiles/:tile_id, PUT /dashboards/:id/tiles/layoutСоздание и редактирование панелей, добавление / редактирование / удаление плиток и переупорядочение сетки плиток.
dashboards:deleteDELETE /dashboards/:idУдаление полной панели (удаление уровня плиток находится под dashboards:write).

Сохранённые запросы (SQL-композитор)

РазрешениеHTTP-маршрутыЧто оно позволяет
queries:readGET /queries, GET /queries/:id, GET /queries/schemaПолучение списка сохранённых запросов, загрузка одного и проверка схемы только для чтения ClickHouse, на которую ориентирован композитор.
queries:writePOST /queries, PUT /queries/:idСоздание и редактирование сохранённых запросов. SQL по-прежнему маршрутизируется через ту же роль только для чтения и проверки sql_guard, что и вызов queries:run.
queries:deleteDELETE /queries/:idУдаление сохранённого запроса.
queries:runPOST /queries/runВыполнение сохранённого или специального SQL-запроса к роли только для чтения, используемой композитором.

Помощник AI

РазрешениеHTTP-маршрутыЧто оно позволяет
agent:useGET /agent/conversations, POST /agent/conversations, GET /agent/conversations/:id, PATCH /agent/conversations/:id, DELETE /agent/conversations/:id, PUT /agent/conversations/:id/messagesОбщение с помощником AI панели и управление своими (приватными) беседами. Требуется для пользователя, чтобы увидеть док помощника; собственный ключ помощника - это dashboard-assistant и он инициализируется отдельно (смотрите ниже).

API-ключи

РазрешениеHTTP-маршрутыЧто оно позволяет
keys:createPOST /keysСоздание нового ограниченного API-ключа. Не предоставляет редактирование разрешений существующего ключа (это keys:update).
keys:readGET /keysПолучение списка существующих ключей. Секреты никогда не возвращаются этой конечной точкой.
keys:updatePATCH /keys/:idРедактирование разрешений существующего ключа. Разрешение только для человека/панели; оно не может быть назначено API-ключу (ключ-носитель может создавать ключи, но не может их редактировать).
keys:disablePOST /keys/:id/disableОтзыв ключа. Защищённые ключи (admin, dashboard-assistant) нельзя отключить; поверните их через переменную окружения и перезагрузку.
keys:regeneratePOST /keys/:id/regenerateРотация секрета ключа. Защищённые ключи нельзя восстановить через эту маршрут.

Пользователи панели

РазрешениеHTTP-маршрутыЧто оно позволяет
users:createPOST /users, GET /users/defaultsПриглашение нового пользователя панели (выдача письма + вход через OTP) и чтение набора разрешений по умолчанию, настроенного панелью и используемого для предварительного заполнения формы приглашения.
users:readGET /users, GET /users/:idПолучение списка пользователей и загрузка одной записи пользователя.
users:updatePUT /users/:idРедактирование разрешений пользователя. Обновления отправляют письмо об изменении разрешений затронутому пользователю и вступают в силу при его следующем запросе; повторный вход не требуется.
users:deleteDELETE /users/:id, POST /users/:id/enableОтключение пользователя (немедленно отзывает его сеансы) и повторное включение ранее отключённого пользователя.
Эти разрешения поддерживают страницу Пользователи панели, где предоставленные области каждого члена отображаются как чипы: Страница Пользователи: карточка на пользователя панели с адресом электронной почты, предоставленными разрешениями и элементами управления редактированием/отключением

Операционные настройки

РазрешениеHTTP-маршрутыЧто оно позволяет
settings:readGET /settings, GET /settings/schema, GET /settings/model-context-windows, GET /settings/model-context-windows/resolveПросмотр операционных настроек, управляемых панелью, и их метаданных; получение списка переопределений размера контекста для каждой модели; и разрешение эффективного окна для модели.
settings:writePUT /settings/:key, PUT /settings/model-context-windows, DELETE /settings/model-context-windowsРедактирование операционных настроек и добавление, изменение или удаление переопределений размера контекста для каждой модели. Изменения влияют на новые события без перезагрузки сервера.
Страница Настройки: операционные настройки, управляемые панелью, такие как допустимые входы и время жизни сеанса/OTP, редактируемые без перезагрузки

Оповещения и инциденты

РазрешениеHTTP-маршрутыЧто оно позволяет
alerts:readGET /alerts, GET /alerts/:idПросмотр настроенных определений оповещений.
alerts:writePOST /alerts, PUT /alerts/:id, DELETE /alerts/:id, POST /alerts/:id/testСоздание, редактирование, удаление и тестовое срабатывание определений оповещений.
incidents:readGET /alerts/incidents, GET /alerts/incidents/:iid, GET /alerts/incidents/:iid/comments, GET /alerts/incidents/:iid/subscribersПросмотр инцидентов и их тропы сортировки.
incidents:writePOST /alerts/:id/incidentsОткрытие инцидента вручную против существующего оповещения.
incidents:ackPOST /alerts/incidents/:iid/ack, POST /alerts/incidents/:iid/assign, POST /alerts/incidents/:iid/resolve, POST /alerts/incidents/:iid/comments, POST /alerts/incidents/:iid/subscribe, POST /alerts/incidents/:iid/unsubscribeПодтверждение, назначение, разрешение и комментирование инцидентов.

Проверки

РазрешениеHTTP-маршрутыЧто оно позволяет
audits:readGET /audits, GET /audits/:id, GET /audits/:id/runs, GET /audits/findings, GET /audits/findings/:fidПросмотр определений проверок, истории выполнения и результатов.
audits:writePOST /audits, PUT /audits/:id, DELETE /audits/:id, POST /audits/:id/run, POST /audits/findings/:fid/statusСоздание, редактирование, удаление и выполнение проверок; сортировка результатов (подтверждение / отключение / отклонение / разрешение / переоткрытие / назначение).
Когда была выпущена функция Проверки, существующие грантополучатели были расширены по той же структуре ролей, что и оповещения: каждый пользователь и набор разрешений, содержащий alerts:read, получили audits:read, и каждый владелец alerts:write получил audits:write. Существующие API-ключи не были расширены — явно предоставьте audits:* ключу, если ему нужна поверхность проверок.
Сохранённые предоставления устаревшего токена alerts:ack анализируются как incidents:ack, поэтому дежурные сохраняют доступ без переключения ключей. Токен больше не может быть назначен из редактора пользователей панели; матрица вместо этого предлагает incidents:ack.
Конечная точка средства выбора получателей GET /alerts/recipients (которая перечисляет адреса электронной почты членов, которых может уведомить редактор оповещений) доступна держателю либо alerts:read либо alerts:write, поэтому редакторы оповещений могут заполнить средство выбора без предоставления users:read.
Зритель панели нуждается в обоих dashboards:read (для загрузки сохранённых представлений) и evaluations:read (метрики здоровья вычисляются из данных оценки). Предоставьте dashboards:write, чтобы позволить пользователю создавать или редактировать панели, и dashboards:delete, чтобы удалять их.
/health и /auth/* (запрос OTP, проверка OTP, проверка сеанса, выход) не аутентифицированы намеренно; это поток входа и зонд живости. GET /access-granters требует действительный ключ, но не требует конкретного разрешения, поэтому любой вошедший пользователь может увидеть, какие администраторы могут помочь с изменением доступа.

Наборы разрешений

Наборы разрешений позволяют применять именованную роль вместо выбора отдельных токенов каждый раз. Вместо выбора дюжины разрешений одного за другим для каждого нового пользователя панели или API-ключа, вы выбираете набор, и каждому, кто ему назначен, присваивается согласованное, проверяемое предоставление. Редактирование пользовательского набора повторно применяет новое предоставление каждому пользователю, уже ему назначенному, поэтому изменение роли - это одно редактирование, а не обход каждого члена. Каждая организация инициализируется с тремя встроенными наборами:
НаборРазрешенияПредназначен для
read-onlyevents:read, keys:read, users:read, evaluations:read, dashboards:read, queries:read, settings:read, alerts:read, audits:read, incidents:readДоступ только для просмотра по всей операционной поверхности.
standardвсё в read-only, плюс evaluations:trigger, queries:run, incidents:ack, agent:useТолько для чтения плюс повседневные действия дежурного: выполнение запросов, переоценка сеансов, подтверждение инцидентов и использование помощника AI.
adminкаждое назначаемое разрешениеПолный контроль над организацией.
Три встроенных набора неизменяемы; их имена всегда означают одно и то же, поэтому read-only, standard и admin безопасно ссылать в политике и адаптации. Оператор может создавать дополнительные пользовательские наборы для моделирования ролей, специфичных для вашей организации (например, роль “автор панели” или роль “только сборщик”). Наборы отображаются на панели и управляются через API в GET /permission-sets (список, требует users:read) и POST /permission-sets / PUT /permission-sets/:name / DELETE /permission-sets/:name (создание, редактирование, удаление пользовательского набора, требует settings:write). Удаление или редактирование встроенного набора отклоняется. Членство в наборе поддерживает две другие функции:
  • DEFAULT_USER_PERMISSIONS (предварительно выбранное предоставление при открытии администратором + новый пользователь) по умолчанию использует набор standard. Смотрите Развёртывание.
  • Флаг --set в agenteye-orgctl (управление членами оператора) запускает члена из именованного набора, который вы затем дополняете с помощью --add / --remove. Смотрите Управление арендаторами.
Когда набор включает разрешение, которое не может быть назначено ключу (например пользовательский набор, содержащий keys:update), инициализация ключа из этого набора отбрасывает неназначаемые токены; сервер иначе отклонил бы ключ с кодом HTTP 422. Пользователи панели не подлежат этому ограничению.

Начальный административный ключ

Административный ключ - это единственное корневое учётное данные, которое позволяет оператору начать доступ с нуля: с его помощью вы можете создавать каждый другой ограниченный ключ, приглашать первых пользователей панели и конфигурировать экземпляр до того, как существует какой-либо другой ключ. Это единственный ключ, который вы не создаёте через API ключей; он инициализируется из окружения, чтобы сервер был доступен при первой загрузке. Установите переменную окружения ADMIN_KEY на сервере. При каждой загрузке сервер вставляет это значение как административный ключ со всеми разрешениями. Для ротации: измените ADMIN_KEY на новый секрет и перезагрузите сервер.

Область организации

Организации сами создаются и управляются оператором вне полосы, не через этот API ключей. Жизненный цикл организации и членов (создание / переименование / удаление / очистка организации; добавление / обновление / удаление члена) осуществляется с помощью CLI agenteye-orgctl, который работает внутри модуля сервера; нет HTTP API или кнопки панели для этого. Смотрите Управление арендаторами. Что остаётся неизменным: API-ключи для каждой организации всё ещё создаются на панели (или через этот API ключей) членами организации. При развёртывании с несколькими организациями, каждый ключ, создаваемый членом организации (через этот API ключей или страницу Ключи панели), принадлежит одной организации и может только читать или писать данные этой организации; организация отмечается на ключе при создании и применяется при каждом запросе. Два начальных ключа - единственное исключение: ключ admin (инициализируется из ADMIN_KEY) и ключ dashboard-assistant (инициализируется из AGENT_API_KEY) относятся к экземпляру (они не имеют организации). Контейнер панели аутентифицируется с помощью ключа admin, чтобы он мог проксировать запросы для каждой организации от имени вошедших членов. Развёртывания с одним арендатором не нуждаются в этом; все ключи принадлежат встроенной организации default.

Создание ключей

Используйте административный ключ (или любой ключ с разрешением keys:create) для создания дополнительных ограниченных ключей.

Ключ сборщика (только приём)

Ключ панели (только чтение)

Когда вы создаёте ключ через HTTP API, вы сами предоставляете значение key; выберите надёжный секрет и сохраните его безопасно. (Панель работает по-другому: она генерирует надёжный секрет для вас и показывает его один раз при создании; смотрите Управление ключами на панели.) Ответ подтверждает, что ключ был создан:

Получение списка ключей

Секреты ключей не возвращаются в ответах списка, только ID, имена и разрешения.

Отключение ключа

Отключение отзывает доступ немедленно без удаления записи ключа.

Восстановление ключа

Генерирует новый секрет для существующего ключа. Старый секрет немедленно становится недействительным.
Ответ включает новый секрет в открытом виде, показываемый только один раз.

Управление ключами на панели

Страница Ключи на панели предоставляет интерфейс для всех вышеперечисленных операций. Вам нужен ключ с разрешением keys:read, чтобы просмотреть список, и keys:create / keys:update / keys:disable / keys:regenerate для действий создания / редактирования / отключения / восстановления соответственно. Редактирование разрешений ключа (keys:update) отделено от создания (keys:create), поэтому вы можете предоставить оператору возможность создавать ключи без возможности переопределения существующих или наоборот. Административный ключ охватывает все эти действия. Когда вы создаёте ключ из панели, вы не предоставляете секрет; панель генерирует надёжный секрет для вас и отображает его один раз при создании. Скопируйте его немедленно и сохраните безопасно; он никогда больше не будет показан, точно как при восстановлении. Вы по-прежнему можете выбрать разрешения ключа напрямую или инициализировать их из набора разрешений (смотрите ниже). Страница API-ключи: карточка на ключ, показывающая его имя, предоставленные разрешения и время создания, с действиями восстановления и отключения; защищённые ключи, такие как admin, отмечены

Рекомендуемый макет ключей

КлючРазрешенияИспользуется
admin (начальный через переменную окружения ADMIN_KEY)всеОперации/настройка и контейнер панели (аутентифицируется с помощью ADMIN_KEY, проксирует запросы пользователей с проверками разрешений)
Ключ сборщика на хостevents:addСборщик на каждой машине агента
dashboard-assistant (начальный через переменную окружения AGENT_API_KEY)events:read, evaluations:read, dashboards:read, dashboards:write, queries:read, queries:write, queries:runКонтейнер помощника AI, инициализируется автоматически, защищён; не может быть отредактирован через API
Ключ телеметрии помощника (опционально)events:addСамоинструментирование помощника AI, если включено
Ключ помощника. Ключ помощника инициализируется автоматически сервером из переменной окружения AGENT_API_KEY (тот же секрет, который агент представляет как AGENTEYE_API_KEY); нет ручного шага создания ключа и не требуется административный ключ. Его разрешения фиксированы в исходном коде, поэтому область не может быть расширена неправильной конфигурацией: чтение по событиям / оценкам / панелям, плюс dashboards-write и queries-read / write / run для потока написания запроса Спроси AI. Весь SQL по-прежнему проходит через ту же роль только для чтения и проверки sql_guard, что и пользовательский запрос, поэтому это расширяет поверхность написания, а не поверхность данных; деструктивные операции (queries:delete, dashboards:delete) намеренно остаются вне ключа помощника. Как и ключ admin, он защищён: не может быть отключен или восстановлен через API ключей, только повёрнут изменением AGENT_API_KEY и перезагрузкой. Пользователи панели дополнительно нуждаются в разрешении agent:use, чтобы увидеть и использовать помощника. Если вы включаете самоинструментирование, дайте помощнику отдельный ключ, содержащий только events:add.