docs: refresh README; allow monitor JWT for RDG qwinsta/logoff (0.20.6)

Update platform docs for current features; Seaca and web operators with
monitor role can trigger WinRM actions via SAC API.
This commit is contained in:
2026-06-20 19:02:58 +10:00
parent 01d72d0f68
commit fc9d630263
7 changed files with 83 additions and 158 deletions
+16 -21
View File
@@ -100,25 +100,20 @@ THEN:
**Маршрутизация команды qwinsta:** команда уходит на хост, где **установлен агент** и куда привязано событие (`host_id`). Если session host ≠ gateway, в перспективе — таблица «gateway → session hosts» или агент на session host; MVP — агент на том же сервере, что шлёт события RDG.
### 3.3. UI — «Обзор» → «Последние события»
### 3.3. UI — веб и Seaca
В таблице [DashboardView](../frontend/src/views/DashboardView.vue) для строки события с `rdg_flap = true` (обычно **303**, второе в паре):
Бейдж **RDG flap** и кнопка **qwinsta** на событиях **302 и 303** (пара вычисляется при чтении):
| … | Title | **Действия** |
|---|-------|--------------|
| … | RD Gateway event 303 | **[qwinsta]** |
- Веб: **Обзор**, **События**, карточка события
- **Seaca:** список событий + карточка → `POST .../actions/qwinsta` / `logoff`
**Поток:**
1. Оператор нажимает **qwinsta**.
2. `POST /api/v1/events/{id}/actions/qwinsta` → SAC ставит команду в очередь хоста.
3. Агент на poll выполняет `qwinsta` под **доменным admin** (см. §5).
4. Результат → модальное окно: таблица SESSIONNAME, USERNAME, ID, STATE.
5. **logoff:**
- по умолчанию — кнопка только у строк с **matching user** из события;
- дополнительно — возможность **выбрать любую строку** (на серверах бывает нестандартный вывод qwinsta).
6. `POST .../actions/logoff { session_id }` → подтверждение → команда агенту → `logoff {id} /v`.
7. Результат в модалке; Problem можно auto-resolve или оставить оператору.
2. `POST /api/v1/events/{id}/actions/qwinsta` → SAC выполняет **WinRM qwinsta** на **клиентский ПК** (`internal_ip` из события).
3. Результат — модалка: SESSION, USER, ID, STATE.
4. **logoff:** `POST .../actions/logoff { session_id }` → WinRM `logoff` → повторный qwinsta.
5. Нужен **Windows domain admin** в настройках SAC (`SAC_WIN_ADMIN_*` или UI).
```mermaid
sequenceDiagram
@@ -257,13 +252,13 @@ Authorization: Bearer sac_xxx
}
```
### 7.2. UI actions (JWT admin)
### 7.2. UI actions (JWT: admin / monitor / mobile)
| Метод | Путь | Назначение |
|-------|------|------------|
| POST | `/api/v1/events/{id}/actions/qwinsta` | Запрос qwinsta |
| POST | `/api/v1/events/{id}/actions/qwinsta` | qwinsta (WinRM на клиентский ПК) |
| POST | `/api/v1/events/{id}/actions/logoff` | logoff `{ "session_id": 5 }` |
| GET | `/api/v1/events/{id}/actions/{cmd_id}` | Статус / результат команды |
| GET | `/api/v1/events/{id}/actions/{cmd_id}` | Статус / результат |
| PATCH | `/api/v1/hosts/{id}/config` | Desired config |
| PATCH | `/api/v1/hosts/{id}/access` | Bootstrap / WinRM creds |
| GET/PATCH | `/api/v1/settings/agent-updates` | Режим A/B, версии, источники |
@@ -285,10 +280,10 @@ Authorization: Bearer sac_xxx
| Фаза | Содержание | Статус |
|------|------------|--------|
| **1** | `rule:rdg_session_flap`, Problem, notify, флаг `rdg_flap` | ✅ SAC |
| **2** | Кнопка **qwinsta** на «Обзоре» | ✅ SAC UI |
| **3** | Poll API, `agent_commands`, env admin | ✅ SAC; ✅ RDP ≥ 2.1.0-SAC |
| **4** | logoff в модалке | ✅ SAC UI |
| **5** | Settings «Обновления агентов» | ⏳ |
| **2** | **qwinsta** / **logoff** — веб + Seaca | ✅ |
| **3** | Poll API, `agent_commands` (агент) | ✅ RDP ≥ 2.1.0-SAC |
| **4** | WinRM qwinsta с сервера SAC | ✅ |
| **5** | Settings «Обновления агентов», SSH bootstrap | частично ✅ |
| **6** | Self-update B1 | ⏳ |
| **7** | SSH bootstrap + WinRM fallback | ⏳ |
| **8** | Desired config per host | ⏳ |
@@ -299,7 +294,7 @@ Authorization: Bearer sac_xxx
## 9. Безопасность
- Команды qwinsta/logoff — только **JWT admin**; audit log.
- Команды qwinsta/logoff — JWT (веб и Seaca); `requested_by` в `agent_commands`.
- Rate limit на actions per host.
- logoff — confirm dialog; по умолчанию только matching user.
- Password bootstrap Linux — удаляется после успеха; re-bootstrap явной кнопкой.