Утверждение под вопросом
В этом эссе утверждается, что правильная рамка — усиление, а не новизна, и что правильный ответ — контроль на границе, а не замена системы. Переписывание — это многолетняя программа; риск усиления присутствует уже в этом квартале. Пограничные контроли дёшевы, проверяемы и обратимы, и они также снижают вред от обычной неправильно настроенной автоматизации — которая на практике является куда более частым источником ущерба, чем умышленный противник.
Усиление, а не новизна
Человек-атакующий ограничен вниманием. Один человек может удерживать в уме несколько гипотез, печатать с конечной скоростью и переключать контекст с издержками. Рой агентов ограничен бюджетом и лимитами скорости. Если ни того, ни другого нет, рой будет расширяться, пока цель принимает запросы. Узкое место смещается с когнитивных способностей атакующего на терпимость цели.
Этот сдвиг наиболее важен там, где устаревшему интерфейсу не хватает трёх конкретных свойств:
- Ограничение скорости. Без бюджетов запросов на принципала агент может зондировать эндпоинт, пока не найдёт граничный случай. Это отсутствие — не новая дыра; это старая дыра, через которую раньше было дорого пройти.
- Ключи идемпотентности. Путь записи, который не может отличить повтор от нового намерения, будет порождать дубликаты записей под давлением повторов. Агенты повторяют агрессивно, потому что для них повторы дёшевы.
- Журналы аудита. Если вызов нельзя приписать принципалу, оператор не может отличить всплеск от бага или баг от вторжения, пока не станет слишком поздно.
Там, где эти пробелы есть, агент найдёт и использует их быстрее, чем команда людей, — не потому, что он умнее, а потому, что ему не становится скучно. Режим отказа редко бывает драматичным взломом. Это истощение и шум: блокировки учётных записей, выводящие из строя реальных пользователей, деградация сервиса под нагрузкой повторов и повреждённое состояние из-за повторяющихся частичных записей. Устаревшая система, которая никогда не видела больше нескольких сотен записей в час, может увидеть тысячи, и её допущения о сериализации и разрешении конфликтов не выдержат.

Конкретный механизм делает это наглядным. Рассмотрим устаревший SOAP- или REST-эндпоинт, предоставляющий операцию createRecord без ключа идемпотентности и без квоты на принципала. Один цикл агента с политикой повтора при тайм-ауте при медленном бэкенде выполнит одну и ту же логическую запись несколько раз. Каждая попытка выглядит для сервера корректной. Результат — не инцидент безопасности в классическом смысле; это инцидент качества данных, который затем приходится согласовывать вручную. Умножьте на рой — и стоимость согласования станет реальным ущербом.
Контроли, которые работают на границе
Полезное место для вмешательства — граница агента, слой между агентной средой и устаревшим интерфейсом, а не внутри самой агентной среды. Контроли внутри среды носят рекомендательный характер; агент можно перенастроить, и другая среда их не унаследует. Контроли на границе применяются независимо от того, какой агент, вендор или скрипт вызывает систему.
Три контроля несут основную нагрузку.
Бюджеты запросов на принципала на устаревших интерфейсах, применяемые вне агентной среды. Шлюз перед устаревшей системой считает запросы на принципала, на эндпоинт, на окно и отклоняет или ставит в очередь всё сверх бюджета. Бюджет следует устанавливать исходя из продемонстрированной терпимости устаревшей системы, а не из амбиций агента. Это решение о ёмкости в той же мере, что и о безопасности.
Требования идемпотентности для любого пути записи, доступного агенту. Каждый вызов записи несёт ключ, сгенерированный клиентом. Шлюз или сервис хранит ключ вместе с результатом, и повтор того же ключа возвращает исходный результат, а не выполняет запись снова. Это небольшое изменение контракта интерфейса и большое изменение режима отказа: повторы становятся безопасными, а повреждение от частичных записей перестаёт накапливаться.
Зеркалирование только для чтения для исследования. Пусть агенты запрашивают реплику для всего исследовательского. Держите систему записи за явными, аудируемыми вызовами. Исследование — это место, где агенты генерируют больше всего трафика и меньше всего ценности на вызов; это также место, где устаревшая реплика наименее вредна. Компромисс честен: реплика вносит задержку репликации, и агент, который читает из реплики, а затем пишет в систему записи, может действовать на устаревшем состоянии. Это терпимо для поиска и триажа и недопустимо для транзакционных рабочих процессов. Граница должна делать это различие явным, а не оставлять его на усмотре
agent -> boundary gateway -> legacy interface
|
|- principal identity
|- per-endpoint budget
|- idempotency store
|- audit log (append-only)
|- read/write routing (replica vs system of record)

Шлюз — это место, где запрос атрибутируется, подсчитывается, дедуплицируется и логируется. Это также место, где изменение политики вступает в силу за минуты, а не за цикл релиза.
Почему переписывание — неправильный первый шаг
Программы замены занимают годы. Их также обычно обосновывают тем же аргументом — что устаревшая система небезопасна, — а значит, обоснование безопасности используется для финансирования проекта, который не снизит подверженность риску в этом квартале. Тем временем риск усиления реален. Рой агентов не ждёт завершения миграции.
Пограничные контроли обладают тремя свойствами, которых нет у замены. Они дёшевы по сравнению с переписыванием, потому что стоят перед системой, а не внутри неё. Они проверяемы, потому что бюджет и хранилище идемпотентности можно испытать синтетической нагрузкой, прежде чем им доверять. И они обратимы, потому что политику шлюза можно ослабить, если она окажется слишком строгой. У переписывания нет ничего из этого.
Есть побочная выгода, которую легко упустить. Те же контроли снижают вред от обычной неправильно настроенной автоматизации. Cron-задача с багом повторов, скрипт, зацикливающийся на временной ошибке, неправильно настроенная интеграция, воспроизводящая очередь, — вот повседневные причины инцидентов в устаревших системах. Бюджеты на принципала и ключи идемпотентности решают их одновременно с усилением агентов. Это редкое свойство в инфраструктурной работе: один контроль, два класса вреда.
Что делать в первую очередь
Практическая последовательность коротка. Проведите инвентаризацию устаревших интерфейсов, доступных агенту, и для каждого зафиксируйте, есть ли у него бюджет на принципала, ключ идемпотентности на запись и атрибутируемый журнал аудита. Поставьте шлюз перед теми, у которых их нет. Установите бюджеты исходя из наблюдаемой терпимости. Направьте исследовательские чтения на реплику. И только затем решайте, нуждается ли сама система в замене, — и если да, пограничные контроли всё равно останутся тем, что защищает систему, пока строится замена.
Утверждение, что агенты делают устаревшие системы вновь опасными, верно наполовину. Они не делают их вновь уязвимыми. Они делают существующую уязвимость дешевле в эксплуатации, а это проблема пропускной способности с ответом по пропускной способности.
