Современные решения об API принимаются внутри JSON-тела — а не в URL.
Традиционные правила трафика обычно принимают решения на основе хоста, пути, метода и заголовка. Однако в современном API-трафике реальное решающее значение обычно находится внутри JSON-тела. Роль пользователя, идентичность тенанта, тип транзакции, сумма, код продукта или имя операции GraphQL могут вовсе не отображаться в URL.
Это оставляет оператора перед выбором из двух плохих вариантов. Либо дополнительная логика маршрутизации и безопасности помещается в код приложения, либо ADC остаётся слепым на уровне заголовков и пути. Ни тот, ни другой подход не является достаточным для современной безопасности API.
В сервисах, использующих JWT, та же проблема существует внутри токена. На поверхности видно только значение заголовка Authorization; роль, группа, тенант или область применения, необходимые для принятия решения, хранятся в полезной нагрузке JWT. Если эти поля нельзя прочитать, политика трафика не может использовать контекст идентичности.
Правильная модель — сделать JSON-тело и содержимое JWT нативной частью языка выражений. JSONPath-запросы должны быть использованы наряду с условиями трафика, правилами безопасности, обогащением логов и действиями маскирования данных — всё в одном месте.
TR7 JSON Path Operations реализует эту модель: JSONQUERY, JWTHEADER и JWTPAYLOAD привязывают содержимое API к решениям ADC и WAAP.
Наш подход
TR7 читает JSON-содержимое через FX expression engine и переносит его в правила трафика, элементы управления безопасностью, обогащение логов и редактирование ответов.
JSONQUERY читает поля непосредственно из тела
JSONQUERY обращается к конкретным полям в теле запроса или ответа с помощью JSONPath-выражения. Эти поля затем могут использоваться как условия трафика, входные данные ACL или значения логов.
JWTHEADER и JWTPAYLOAD делают содержимое токена видимым
Поля заголовка и полезной нагрузки внутри JWT могут читаться с использованием той же семантики JSONPath. Роль, область применения, тенант или идентичность пользователя могут быть включены в решения о трафике.
Поля JSON становятся условиями правил
Значения внутри тела становятся условиями столь же естественно, как проверки пути или заголовка. Действия могут быть выбраны на основе `$.tenant_id`, `$.user.role` или `$.operationName` так же, как любое другое выражение.
Поля JSON в ответе могут быть замаскированы или заменены
Чувствительные JSON-поля могут быть замаскированы или заменены на стороне ответа. Предотвращение утечки данных применяется не только в логах, но и непосредственно в теле, возвращаемом клиенту.
Возможности
JSON Path Operations соединяет JSON-тело и содержимое JWT с уровнями правил, безопасности, логов и маскирования TR7.
JSONQUERY обращается к вложенным полям через JSONPath
JSONQUERY запрашивает вложенные JSON-поля непосредственно внутри тела. Выражения, такие как `$.user.role`, `$.items[0].sku` или `$.payment.amount`, могут оцениваться как условия правил. Операторы могут действовать на основе решающих данных, которые никогда не появляются в URL или заголовках. Это позволяет управлять API-трафиком на основе его реального содержательного контекста.
Поля JSON привязываются напрямую к условиям ACL
TR7 может использовать поле, прочитанное из JSON, как условие правила трафика. Например, трафик может направляться в разные пулы бэкенда на основе значения `tenant_id`. Если значение `role` неприемлемо, запрос может быть отклонён. Политика трафика с учётом тела устанавливается без изменения кода приложения.
Содержимое полезной нагрузки JWT сигнализирует о решениях доступа
Функция JWTPAYLOAD может читать клейм-поля внутри токена. Роль пользователя, группа, область применения, тенант или идентичность приложения могут таким образом включаться в решение о трафике. Это предотвращает обращение с заголовком Authorization как с сырым токеном. TR7 превращает содержимое токена в сигнал политики.
Запросы заголовка JWT предоставляют проверки алгоритма и метаданных токена
Функция JWTHEADER может читать поля заголовка токена. Могут выполняться проверки алгоритма, идентификатора ключа или метаданных типа токена. Эта информация может использоваться в правилах безопасности, записях логов или сценариях условного доступа. Токен становится объектом, доступным для аудита, а не просто транзитным значением.
Значения JSON, передаваемые в заголовках, могут быть разобраны
Некоторые приложения передают JSON-подобные структуры данных в пользовательских полях заголовков. TR7 также может обрабатывать эти поля как разбираемые сигналы внутри expression engine. Структурированные данные в заголовках — а не только в теле — становятся частью оценки правил. Эта гибкость важна в сценариях устаревшей интеграции.
Выбор бэкенда может управляться значениями полей JSON
В сценариях API-шлюза значения, такие как `operation`, `tenant`, `region` или `product` внутри тела, могут служить сигналами маршрутизации. TR7 может направлять трафик в разные пулы бэкенда на основе этих полей. Это позволяет осуществлять разделение для нескольких приложений или тенантов под одной конечной точкой. Логику маршрутизации не нужно встраивать в код приложения.
Поля JSON могут обогащать записи логов
Выбранные поля из JSON-тела или JWT могут быть добавлены в строки логов. Email пользователя, идентичность тенанта, тип транзакции или оценка риска могут отображаться как выделенные поля в логе. Это укрепляет корреляцию в SIEM. Извлечение только необходимых полей вместо логирования всего тела также поддерживает минимизацию данных.
Чувствительные поля в JSON ответа могут быть замаскированы
TR7 может защищать чувствительные значения в JSON-теле ответа с помощью действий маскирования или замены. Номера карт, национальные идентификаторы, идентификаторы пациентов, email-адреса или аналогичные поля могут таргетироваться по регулярному выражению или пути. Это снижает риск утечки данных без необходимости изменений кода со стороны команды разработки. Работает послойно совместно с возможностью маскирования чувствительных данных.
Правила позитивной безопасности WAAP могут ограничивать ключи JSON
Разрешённые или обязательные поля внутри JSON-тела могут быть привязаны к политике безопасности. Неизвестные поля, отсутствующие обязательные параметры или чрезмерно вложенные структуры могут блокироваться. Это уменьшает дрейф схемы API и поверхность инъекций. Инспекция JSON-содержимого выходит за рамки сигнатур негативной безопасности.
Ограничения глубины JSON и количества ключей повышают безопасность парсера
JSON-полезные нагрузки, глубоко вложенные или содержащие избыточное количество ключей, могут исчерпывать ресурсы приложения и парсера. TR7 может устанавливать ограничения, такие как глубина вложенности JSON и количество ключей, в качестве политики безопасности. Это снижает воздействие попыток API DoS и непредвиденных структур тела. Ограничения могут настраиваться в соответствии с чувствительностью конечной точки.
Некорректные JSON-запросы могут быть отклонены до достижения бэкенда
Если JSON не может быть разобран, запрос не рассматривается как доверенное тело API. TR7 может отклонять или логировать запросы с некорректным JSON до их пересылки в бэкенд. Это снижает непредвиденные ошибки разбора на уровне приложения. Также обеспечивает видимость для различения атакующего трафика от некорректно работающих клиентов.
JSON-запросы компонуются с другими FX-функциями
Результат JSONQUERY может использоваться совместно со строковыми, regex, map, list, IP или хэш-функциями. Например, значение тенанта извлекается из JSON, ищется в таблице map, и результат управляет решением о маршрутизации или блокировке. Это делает JSON-запрос частью движка политик, а не просто автономным вспомогательным инструментом. Сложные решения об API могут выражаться в визуальном редакторе правил.
Операционная глубина
JSON-операции эксплуатируются совместно с буферизацией тела, обработкой ошибок разбора, поведением JWT-полей, минимизацией логов, редактированием ответов и ограничениями производительности.
Время доступа к телу
Тело должно быть доступно для чтения до выполнения JSON-запроса. Правила с учётом тела поэтому требуют больше обработки, чем правила только с заголовками. Их следует применять только на конечных точках, где это действительно необходимо.
Поведение при ошибке разбора
Если JSON не может быть разобран, политика может выдать отказ, запись в лог или другое действие. Если конечная точка API ожидает JSON, некорректная полезная нагрузка не должна пересылаться в бэкенд. Это поведение повышает безопасность конечной точки.
Предположение о доверии JWT
Чтение содержимого JWT и проверка токена — это не одна и та же операция. Если клейм-значения JWT используются в решениях о трафике, проверка подписи и политика доверенного источника должны быть настроены отдельно. В противном случае злоумышленник может создать ложные клеймы.
Минимизация логов
Извлечение только необходимых полей вместо логирования всего JSON-тела является более безопасным подходом. Поля, такие как тенант, операция или статус, могут логироваться; чувствительные поля следует маскировать. Это обеспечивает баланс между видимостью в SIEM и защитой данных.
Ограничения редактирования ответов
Маскирование JSON в ответе работает с телом, поэтому размер ответа и тип содержимого имеют значение. Влияние на производительность и память при очень больших ответах должно быть спланировано. Для эффективного применения защиты чувствительных данных требуется правильное таргетирование конечных точек и полей.
Влияние на производительность
Разбор JSON и запросы путей стоят дороже, чем проверки заголовков. При использовании нескольких JSON-запросов в одном запросе важно повторное использование результатов. Правила должны быть спроектированы так, чтобы не возникало лишнего повторного разбора.
Когда применять
Маршрутизация в бэкенд по значению tenant ID
SaaS-API может получать трафик от нескольких тенантов на одной конечной точке. TR7 может читать поле `$.tenant_id` и направлять трафик в правильный пул бэкенда для каждого тенанта.
Применение контроля доступа на JWT role-клеймах
Значение роли или области применения внутри токена Authorization может быть прочитано. Доступ к путям admin может быть ограничен пользователями, токен которых несёт необходимое значение клейма.
Маскирование чувствительных полей в JSON ответа
Номера карт, идентификационные номера или данные пользователей, возвращаемые в API-ответе, могут быть замаскированы. TR7 снижает воздействие чувствительных полей в исходящих ответах без необходимости изменений кода приложения.
Отклонение некорректного JSON до достижения бэкенда
Когда конечная точка, ожидающая JSON, получает некорректное тело, TR7 может отклонить запрос на раннем этапе. Это снижает ошибки разбора в приложении и уменьшает поверхность атак.
Обогащение строк логов данными операции и тенанта
Вместо логирования всего тела извлекаются только поля, такие как `operationName`, `tenant` и `userId`. Корреляция в SIEM улучшается, а минимизация данных сохраняется.
Часто задаваемые вопросы
Какой синтаксис JSONPath поддерживает JSONQUERY?
Выполняется ли проверка подписи автоматически при чтении содержимого JWT?
Как производительность выдерживает нагрузку при чтении нескольких JSON-полей в одном запросе?
Применяется ли маскирование JSON только на стороне ответа?
Что делает TR7 при получении некорректного JSON-тела?
Как эта возможность соотносится со страницей маскирования чувствительных данных?
Сделайте содержимое тела API частью ваших решений о трафике и безопасности
JSONQUERY, JWTHEADER и JWTPAYLOAD превращают поля JSON-тела и JWT-клеймы в условия правил, записи логов и действия маскирования. Проведём живой демонстрационный запуск на ваших сервисах.