pending_approval, вызов инструмента
удерживается, и ваш агент ждёт. По умолчанию ревьюер снимает это удержание из
консоли. Вебхук подтверждений firewall подключает тот же шлюз в вашу
систему: шлюз POST’ит подписанное уведомление на ваш эндпоинт в тот момент,
когда вызов удержан, а ваша система POST’ит подписанное HMAC решение обратно,
чтобы его освободить — без места в консоли, без опроса человека.
Это асинхронная (callback) половина human-in-the-loop. Удержанный вызов,
вердикт и путь разрешения в консоли покрыты в
Разрешении подтверждений и
справочнике Firewall; эта
страница — только проводка вебхука.
Вебхук — это быстрое уведомление, не система записи. Long-poll
ретрансляции на удержанном вызове — авторитетный шлюз — если уведомление
потеряно или ваш приёмник лежит, удержание всё равно стоит, и ревьюер может
снять его из консоли. Настройка вебхука лишь добавляет программный способ его
разрешить.
1. Когда использовать вебхук подтверждений firewall
Тянитесь за ним, когда шлюз human-in-the-loop firewall должен быть разрешён чем-то иным, чем человек, кликающий кнопку:Маршрутизация в ваш собственный UI подтверждений
Проталкивайте удержанные вызовы инструментов в Slack, PagerDuty или
внутреннюю очередь разбора и разрешайте их там, где ваша команда уже
работает.
Программная политика
Авто-одобрить удержанный
db.query против read-реплики, авто-отклонить
против prod — ваш код решает, шлюз применяет.2. Настройте его в консоли
Обе половины живут на одной настройке рабочего пространства. Откройте Firewall → Settings и заполните два поля (действие Developer+ — запись настроек ограничена ролью):URL вебхука подтверждений — куда мы вас уведомляем
URL вебхука подтверждений — куда мы вас уведомляем
https:// эндпоинт, на который мы POST’им, когда вызов удержан. HTTP
отвергается, и URL прогоняется через SSRF-preflight при сохранении, так что
loopback, приватный диапазон или назначение cloud-metadata отклоняется до
того, как может быть сохранено. Оставьте пустым, чтобы полностью отключить
асинхронный путь.Общий секрет — как обе стороны аутентифицируются
Общий секрет — как обе стороны аутентифицируются
Секрет HMAC только-на-запись (до 255 символов). Он подписывает наше
исходящее уведомление и аутентифицирует ваш входящий колбэк. Консоль
никогда не отдаёт его обратно — после сохранения вы видите только, что
секрет задан; ротируйте, записав новое значение.
3. Уведомление, которое мы вам отправляем
Когда вызов удержан, мы POST’им подписанный JSON-конверт на ваш URL:approval_id, который вам нужен для разрешения, и идентификаторы для
корреляции, никогда аргументы инструмента. Детали аргументов живут в
очереди Approvals и
журнале событий firewall.
4. Колбэк, который вы POST’ите обратно
Чтобы освободить (или отклонить) удержание, POST’ните своё решение на эндпоинт колбэка сapproval_id из уведомления:
decision — это approved или rejected — никакое другое значение не
принимается. reason опционален и появляется в аудит-трейле разрешённого
подтверждения.
Колбэк first-decision-wins и идемпотентен: кто разрешает первым — ваш
вебхук или консольный ревьюер — задаёт исход, а повторный колбэк для
уже-разрешённого подтверждения возвращает 200, так что ваша система
перестаёт повторять.
5. Освобождение удержанного вызова
Разрешение подтверждения не воспроизводит вызов инструмента за вас — оно поднимает шлюз, так что ваш агент может его повторно выпустить. Рантайм агента:- Опрашивает состояние удержания на
GET /api/v1/firewall/approvals/:id(ключ с областью firewall-gateway, не ваш ретрансляционный ключ или консольная сессия), пока оно не покинетpending. - При
approvedповторно отправляет оригинальный вызов инструмента, неся одноразовый заголовокX-OrcaRouter-Firewall-Approval— шлюз пропускает этот один вызов, и токен потрачен.
Если нижележащее правило было отредактировано после того, как вызов был
удержан, очередь Approvals
флагирует, что правило с тех пор изменилось, и подавляет теперь-устаревшую
клаузу «held because…», так что консольный ревьюер не действует на
происхождение, которое больше не совпадает с тем, что удержало вызов.
6. Проверьте проводку
Быстрая end-to-end проверка, прежде чем полагаться на неё:| Шаг | Что сделать | Ожидается |
|---|---|---|
| Удержать вызов | Сработать правилом с вердиктом pending_approval | 400 firewall_approval_pending |
| Уведомление | Наблюдать за вашим эндпоинтом | Приходит подписанный POST firewall.approval.pending |
| Колбэк | POST’нуть подписанный { "decision": "approved" } | 200 с разрешённым состоянием |
| Защита от повтора | POST’нуть колбэк снова | 200, уже разрешено (нет двойного применения) |
7. Куда это вписывается
Разрешение подтверждений
Путь консольного ревьюера и полный жизненный цикл удержанного вызова.
Вердикты
Откуда берётся
pending_approval и как он компонуется с другими вердиктами.Ключи шлюза
Создайте ключ с областью firewall-gateway, нужный потоку опрос + повтор.
Избыточная автономия
Угроза, которую построены сдерживать шлюзы human-in-the-loop.
