ICAP через API
Описание ICAP-сервера и блока ICAP/DLP-анализа доступно через REST API. Набор операций тот же, что и в интерфейсе, плюс параметр, которого в интерфейсе нет: выключение ICAP-сервера.
Запросы отправляйте на адрес сервера бэкенда, токен передавайте в заголовке Authorization:
POST /api/v1/clusters/{clusterId}/icap-profiles
Authorization: Bearer <токен>
Content-Type: application/jsonСправочник методов системы 5А с описанием всех полей открывается по адресу https://<Адрес сервера бэкенда>:8443/api/v1/docs. Методы ICAP собраны в нём в группе Cluster ICAP Servers.
Методы
| Метод | Путь | Назначение |
|---|---|---|
GET | /api/v1/clusters/{clusterId}/icap-profiles | список ICAP-серверов кластера |
POST | /api/v1/clusters/{clusterId}/icap-profiles | создать ICAP-сервер |
GET | /api/v1/clusters/{clusterId}/icap-profiles/{profileId} | получить ICAP-сервер по идентификатору |
PUT | /api/v1/clusters/{clusterId}/icap-profiles/{profileId} | изменить ICAP-сервер |
DELETE | /api/v1/clusters/{clusterId}/icap-profiles/{profileId} | удалить ICAP-сервер |
POST | /api/v1/clusters/{clusterId}/icap-profiles/{profileId}/healthcheck | проверить доступность адресов с агентов кластера |
POST | /api/v1/clusters/{clusterId}/services | создать конфигурацию балансировки с блоком dlp_inspection |
GET | /api/v1/clusters/{clusterId}/services/{serviceId} | прочитать конфигурацию балансировки с блоком dlp_inspection |
PUT | /api/v1/clusters/{clusterId}/services/{serviceId} | изменить конфигурацию балансировки, включая dlp_inspection |
Идентификатор кластера clusterId — имя кластера балансировки, идентификаторы profileId и serviceId — UUID из ответа о создании.
ICAP-сервер
Поля профиля
Обязательные поля: name, reqmod_url, enabled. Остальные можно не передавать.
name— название ICAP-сервера, от1до255символов, уникально в кластере.description— описание, до255символов.reqmod_url— адрес проверки запросов, до2048символов, только схемаicap://с путём службы.respmod_url— адрес проверки ответов, до2048символов. Пустое значение означает, что передача ответов недоступна.auth_type— тип авторизации:none,basicилиbearer, по умолчаниюnone.username— логин дляbasic, до1024символов. Символ:не допускается.password— пароль дляbasic, до8192символов. В ответе не возвращается.token— токен дляbearer, до8192символов. В ответе не возвращается.enabled— включён ли ICAP-сервер.
Создание профиля DLP-системы с проверкой запросов и ответов:
{
"name": "dlp-basic",
"description": "Основная DLP-система",
"enabled": true,
"reqmod_url": "icap://icap-dlp.example:1344/reqmod",
"respmod_url": "icap://icap-dlp.example:1344/respmod",
"auth_type": "basic",
"username": "icap-service",
"password": "P7-example-secret"
}Ответ 201 содержит описание созданного профиля: id, cluster_id, name, description, enabled, reqmod_url, respmod_url, auth_type, username, auth_configured, created_at, updated_at, linked_entities. Поле auth_configured сообщает, задан ли секрет для выбранного типа авторизации: у профиля без авторизации оно всегда true, поэтому по нему видно, сохранены ли Пароль или Токен.
Изменение профиля
Метод PUT заменяет значения полей, поэтому передавайте все поля, которые должны остаться, включая enabled. Пустое значение password или token сохраняет прежний секрет, если тип авторизации не менялся. При смене типа авторизации секрет нужно передать заново — без него сервер отвергнет запрос:
{
"name": "dlp-basic",
"description": "Основная DLP-система",
"enabled": true,
"reqmod_url": "icap://icap-dlp.example:1344/reqmod",
"respmod_url": "",
"auth_type": "bearer",
"token": "P7-example-token"
}Пустое respmod_url в этом запросе отключает передачу ответов: конфигурации балансировки продолжают ссылаться на профиль, но передача ответов в них работать не будет.
Связанные конфигурации балансировки
Массив linked_entities в ответе GET перечисляет конфигурации балансировки, ссылающиеся на профиль:
| Поле | Значение |
|---|---|
name | название конфигурации балансировки |
entity_type | тип связанного объекта, для конфигураций балансировки — service |
cluster_id | идентификатор кластера |
address | адрес конфигурации балансировки |
active | включена ли конфигурация балансировки |
id_format | какое из полей идентификатора заполнено — id или uuid |
id, uuid | идентификатор конфигурации балансировки в формате из id_format |
Выключение и удаление
Профиль, на который ссылается хотя бы одна конфигурация балансировки, нельзя ни выключить, ни удалить: сервер отвечает кодом 409. Выключение доступно только через API — в интерфейсе профили создаются включёнными. Перед выключением или удалением профиля уберите его из всех конфигураций балансировки кластера.
Выключенный профиль нельзя выбрать в конфигурации балансировки, а сохранение конфигурации, ссылающейся на выключенный профиль, отклоняется.
Проверка доступности
POST /api/v1/clusters/{clusterId}/icap-profiles/{profileId}/healthcheckПроверка выполняется одновременно с каждого агента кластера в состоянии READY: сначала проверяется reqmod_url, затем respmod_url, если он задан. Метод ничего не меняет и не отвечает ошибкой, когда DLP-система недоступна, — результат передаётся в теле ответа.
| Поле | Значение |
|---|---|
status | общий результат: available или unavailable |
message | причина общего результата, заполняется при unavailable |
icap_status | код ответа DLP-системы; заполняется, когда в кластере ровно один агент в состоянии READY |
agents | результат проверки по каждому агенту READY |
Состав элемента массива agents:
| Поле | Значение |
|---|---|
agent_id | идентификатор агента |
hostname | имя узла агента |
status | результат с агента: available или unavailable |
error_type | тип ошибки, например connection_refused или timeout |
message | описание результата |
details | технические подробности ошибки без секретов авторизации |
icap_status | код ответа DLP-системы, если она ответила |
Причина в error_type и её расшифровка — в разделе Проверка доступности. Значение status в agents совпадает с меткой Доступен или Недоступен в интерфейсе, а message и details — с текстом в колонке Пояснение.
Инспекция в конфигурации балансировки
Блок ICAP хранится в поле dlp_inspection объекта конфигурации балансировки. Поле одинаково в запросах POST и PUT и в ответе GET. Отсутствие поля означает, что инспекция не настроена.
Поля инспекции
enabled— включена ли передача трафика на проверку.icap_profile_id— идентификатор ICAP-профиля. Обязателен приenabled: true, профиль должен существовать в этом же кластере и быть включён.mode— режим инспекции:mirror— асинхронное зеркалирование,inline— синхронная проверка запроса до отправки на клиентский сервер. Обязательное поле: пустое значение отклоняется.response_enabled— проверка ответов клиентского сервера, RESPMOD. Допустима только в режимеmirrorдля L7-протоколовHTTP,HTTPSиgRPCи только если у профиля заданrespmod_url.timeout_ms— время ожидания вердикта, от1до60000. Если поле не передано, используется1000, явно переданный0отклоняется проверкой диапазона с кодом422.block_status— код ответа клиенту при блокировке, от200до599. Если поле не передано, используется403, явно переданный0отклоняется проверкой диапазона с кодом422. Учитывается только в режимеinline.
Фильтр проверяемого трафика
Фильтр задаётся объектом scope:
methods— методы, попадающие на проверку, например["POST", "PUT"]. Пустой массив — проверяются все методы.content_types— типы содержимого, например["multipart/form-data"]. Пустой массив — проверяются все типы.include_paths— пути, для которых выполняется проверка, например["/upload"]. Пустой массив — проверяются все пути.exclude_paths— пути, исключённые из проверки, например["/health"]. Пустой массив — исключений нет. Путь из обоих списков исключается.request_body_limit_kb— порог полной передачи тела запроса, от1КБ. Если поле не передано, используется102400КБ, явно переданный0отклоняется проверкой диапазона с кодом422. Для конфигураций без L7-протокола это максимальный размер зеркалируемого TCP-потока.response_body_limit_kb— порог полной передачи тела ответа, от1КБ. Если поле не передано, используется102400КБ, явно переданный0отклоняется проверкой диапазона с кодом422.
Пример
Синхронная проверка загрузок с ограничением по методу, типу содержимого и путям:
{
"dlp_inspection": {
"enabled": true,
"icap_profile_id": "019eeec7-b810-7b37-ae4a-b0f5574ee477",
"mode": "inline",
"response_enabled": false,
"timeout_ms": 1500,
"block_status": 403,
"scope": {
"methods": ["POST", "PUT"],
"content_types": ["multipart/form-data"],
"include_paths": ["/upload", "/api/documents"],
"exclude_paths": [],
"request_body_limit_kb": 20480,
"response_body_limit_kb": 102400
}
}
}Метод PUT принимает конфигурацию балансировки целиком. Чтобы не потерять остальные настройки, загрузите конфигурацию методом GET, внесите изменения в dlp_inspection и отправьте объект обратно.
Ограничения проверки применяются к dlp_inspection независимо от того, создан объект методом POST или изменён методом PUT. Нарушение любого из них отклоняет сохранение:
| Условие | Сообщение |
|---|---|
type_l4 не TCP, либо TCP с L7-протоколом, отличным от HTTP, HTTPS, gRPC | ICAP/DLP можно включить только для TCP HTTP/HTTPS/gRPC или TCP без L7 |
mode не mirror и не inline | Неверный режим ICAP-инспекции |
response_enabled в режиме inline или без L7-протокола | RESPMOD поддерживается только для асинхронного HTTP/HTTPS/gRPC-зеркалирования |
mode: inline для конфигурации без L7-протокола | ICAP/DLP можно включить только для TCP HTTP/HTTPS/gRPC или TCP без L7 |
timeout_ms вне диапазона 1–60000 | Таймаут ICAP должен быть от 1 до 60000 мс |
icap_profile_id не задан | Для ICAP-инспекции нужно выбрать ICAP профиль |
icap_profile_id не является UUID | Некорректный ID ICAP профиля |
| профиля нет в кластере | Выбранный ICAP профиль не найден |
| профиль выключен | Выбранный ICAP профиль выключен |
response_enabled при пустом respmod_url у профиля | ICAP URL не соответствует выбранному профилю |
Ошибки
Тело ошибки содержит три поля:
| Поле | Значение |
|---|---|
code | HTTP-статус ответа; при нарушении ограничения из схемы метода вместо него возвращается код нарушения |
reason | вид ошибки, по которому клиент принимает решение: invalid, not_found, conflict, internal и другие |
message | описание ошибки |
| Статус | Когда |
|---|---|
400 | значения поля не проходят проверку: пустое обязательное поле, неверная схема адреса, недопустимый тип авторизации, нарушение условий инспекции |
404 | кластер, ICAP-сервер или конфигурация балансировки не найдены |
409 | имя ICAP-сервера уже занято либо профиль используется конфигурациями балансировки |
422 | значение поля нарушает ограничение схемы: длина строки, диапазон числа, значение перечисления |
500 | внутренняя ошибка сервера |
Ошибка 422 означает нарушение ограничения из схемы метода, а 400 — нарушение смыслового условия: например, 422 вернётся для block_status вне диапазона 200–599, а 400 — для response_enabled в режиме inline.