Усилить безопасность и надёжность выполнения операций
This commit is contained in:
@@ -199,6 +199,16 @@ curl https://crank.example.com/mcp/v1/default/sales/approvals/<approval_id>/appr
|
||||
|
||||
После подтверждения Crank выполняет исходный REST-запрос с тем payload, который был сохранен при первом `tools/call`. Если запрос прошел успешно, заявка получает статус `completed`, а результат сохраняется в `response_payload`. Если upstream вернул ошибку, заявка получает статус `failed`, а в `response_payload` сохраняется код и текст ошибки.
|
||||
|
||||
Перед обращением к upstream заявка атомарно переходит в статус `executing`. Если
|
||||
`mcp-server` завершился во время выполнения, другой рабочий цикл повторно захватит
|
||||
заявку после истечения аренды. Для изменяющих операций рекомендуется настроить
|
||||
`execution_config.idempotency` и передавать поддерживаемый upstream заголовок
|
||||
идемпотентности: универсальный HTTP-клиент не может гарантировать ровно одно внешнее
|
||||
побочное действие при падении процесса между ответом upstream и записью результата.
|
||||
|
||||
Повторный `tools/call` с теми же агентом, операцией, версией и JSON-аргументами
|
||||
возвращает уже существующую активную заявку вместо создания дубликата.
|
||||
|
||||
Отклонение:
|
||||
|
||||
```bash
|
||||
|
||||
@@ -85,6 +85,32 @@ Demo seed идемпотентный: повторный старт не соз
|
||||
|
||||
Эти настройки ограничивают параллельное выполнение операций и служебных задач.
|
||||
|
||||
## Исходящие HTTP-запросы
|
||||
|
||||
По умолчанию Crank обращается только к публичным IP-адресам. Локальные, частные,
|
||||
служебные и link-local сети блокируются после разрешения DNS-имени. Автоматические
|
||||
HTTP-перенаправления и системный прокси отключены.
|
||||
|
||||
- `CRANK_OUTBOUND_ALLOWED_HOSTS` - исключения для разрешённых внутренних узлов через
|
||||
запятую. Публичные узлы разрешены независимо от этого списка. Для внутреннего API
|
||||
укажите его имя или IP явно. Поддерживаются маски вида `*.example.internal`.
|
||||
- `CRANK_OUTBOUND_DENIED_HOSTS` - список узлов, запрещённых независимо от списка
|
||||
разрешённых.
|
||||
- `CRANK_OUTBOUND_MAX_RESPONSE_BYTES` - максимальный размер ответа внешнего API;
|
||||
по умолчанию `4194304` байт.
|
||||
|
||||
Пример доступа только к двум внутренним API:
|
||||
|
||||
```env
|
||||
CRANK_OUTBOUND_ALLOWED_HOSTS=crm.example.internal,192.168.1.50
|
||||
CRANK_OUTBOUND_DENIED_HOSTS=metadata.example.internal
|
||||
CRANK_OUTBOUND_MAX_RESPONSE_BYTES=4194304
|
||||
```
|
||||
|
||||
Одинаковые значения должны передаваться в `admin-api` и `mcp-server`: первый
|
||||
проверяет операции при сохранении, второй применяет политику при каждом соединении.
|
||||
Максимальный `execution_config.timeout_ms` операции равен `300000` мс.
|
||||
|
||||
## Кэш
|
||||
|
||||
По умолчанию Crank работает без внешнего кэша:
|
||||
@@ -107,6 +133,10 @@ CRANK_CACHE_DEFAULT_TTL_MS=60000
|
||||
|
||||
- `CRANK_LOG_LEVEL` - уровень логирования, например `info`, `debug`, `warn`.
|
||||
|
||||
Поля с паролями, токенами, ключами и заголовками авторизации удаляются из снимков
|
||||
запросов и ответов. Один снимок ограничен 16 КиБ; более крупное значение хранится в
|
||||
усечённом виде с исходным размером.
|
||||
|
||||
Пример:
|
||||
|
||||
```env
|
||||
|
||||
Reference in New Issue
Block a user