53 lines
3.9 KiB
Markdown
53 lines
3.9 KiB
Markdown
# Безопасность
|
||
|
||
`forge-tools-proxmox` намеренно устроен так, чтобы AI-ассистент не мог выйти за
|
||
рамки, заданные оператором. Если вы нашли способ обойти эти рамки — сообщите,
|
||
пожалуйста, команде разработки, не открывая публичный issue.
|
||
|
||
## Модель угроз
|
||
|
||
- **Хосты и кластеры.** URL гипервизора объявляет оператор в конфиге; модель его
|
||
не задаёт. Права изолированы **per-host**: `allow_nodes`/`allow_vmids` у каждого
|
||
`hosts[]` свои, поэтому одинаковый `vmid` на разных кластерах даёт разный вердикт.
|
||
- **Неоднозначность — отказ.** При `len(hosts) > 1` параметр `host` обязателен для
|
||
всех инструментов (кроме `clusters_list`); глобальный allowlist при мульти-хосте
|
||
запрещён как ошибка конфигурации. Всё это fail-closed.
|
||
- **Учётные данные.** Ассистент работает только с alias хоста; `token_id` и
|
||
`token_secret` берутся из конфига (подстановка `${VAR}` или gitignored
|
||
`*.local.json`). Произвольные токены/пароли из модели не используются.
|
||
- **Мутации.** Дефолт `read_only: true`; без явных `allow_vmids` мутации
|
||
недостижимы. Деструктивные операции требуют `confirm="true"` и эмитят
|
||
permission-паттерны (`host=<alias> node=<node> vmid=<vmid>`) для внешнего
|
||
движка одобрения. `DenyConfigKey` блокирует правку потенциально опасных ключей
|
||
конфига ВМ (delete/revert/hotplug/spice/…).
|
||
- **Инъекции.** Значения `node`/`vmid`/`snapshot`/`storage`/`upid` проходят
|
||
guard-валидацию (`ValidateIdentifier`/`ValidateUPID`) и `url.PathEscape` перед
|
||
попаданием в URL API.
|
||
- **Таймауты и объёмы.** Настраиваемые `timeout_sec`, `task_poll_max_sec` и
|
||
`max_output_bytes` ограничивают время и размер ответа.
|
||
|
||
## Границы модуля
|
||
|
||
- **Запуск кода внутри гостя не реализуется** — это зона `ssh__run` (remote exec).
|
||
- **Восстановление/удаление бэкапов, Ceph/ZFS/SDN/firewall/HA/ACL, node
|
||
reboot/shutdown** — сознательно вне модуля (blast-radius и отдельная семантика;
|
||
см. Roadmap в README).
|
||
|
||
## Известные ограничения
|
||
|
||
- **`insecure: true`** отключает проверку TLS-сертификата. Это осознанный
|
||
компромисс только для локального dev-lab; в проде используйте `ca_file`.
|
||
- **Главный барьер — на стороне PVE.** Токен заводите с минимальными правами
|
||
(для чтения достаточно `Sys.Audit, VM.Audit, Datastore.Audit`); guard модуля —
|
||
лишь второй слой.
|
||
|
||
## Гигиена репозитория
|
||
|
||
- Реальные адреса и токены в репозиторий не коммитятся: только
|
||
`pve.json.example` с подстановками `${VAR}`.
|
||
- Бинарник и локальные конфиги исключены через `.gitignore` (`/forge-tools-proxmox`,
|
||
`/pve.json`, `*.local.json`).
|
||
|
||
Перед публикацией убедитесь, что токены и рабочие конфиги не попали в репозиторий
|
||
(см. [`.gitignore`](.gitignore)).
|