Читать 8 мин

Шлюз действий AI-агента: пять признаков, что он вам нужен

Шлюз действий AI-агента не дает агентам для программирования напрямую владеть секретами, упрощает одобрение и записывает каждый HTTP- или SSH-запрос.

Шлюз действий AI-агента: пять признаков, что он вам нужен

AI-агенту для программирования нужен шлюз действий, когда он может действовать за пределами своего рабочего пространства с полномочиями, которые никто не может нормально проверить, одобрить или отозвать. Проблема не в том, что агент пишет код. Тревожный сигнал в том, что он может потратить учетные данные, изменить размещенный сервис или открыть SSH-сессию после того, как кто-то вставил секрет в его контекст и назвал это настройкой.

Команды часто начинают говорить о шлюзе действий AI-агента только после опасного инцидента, который удалось предотвратить в последний момент. Токен появляется в расшифровке чата. Во время запуска агент использует учетную запись для деплоя в production, потому что это была единственная доступная учетная запись. Кто-то спрашивает, кто одобрил изменение базы данных, а в ответ получает длинную цепочку сообщений и общую сессию терминала. Это не проблемы с документацией. Они показывают, что команда дала недоверенному процессу операционные полномочия, не создав вокруг них рабочую границу.

Шлюз не делает агента безопасным тем, что пытается определить, хороша или плоха каждая команда. Это было бы неправильным обещанием. Шлюз не дает учетным данным попадать в агент, ставит решение человека в разумных точках и оставляет запись, по которой оператор может понять, что произошло, не восстанавливая событие по памяти. Если вам знакомы следующие признаки, прямой доступ к учетным данным уже перестал оправдывать свое удобство.

Копирование API-ключей стало обычной частью настройки

Агенту нужна отдельная граница действий, если разработчик вставляет API-ключи в промпты, файлы окружения, сессии терминала или конфигурацию агента, чтобы выполнить работу. Эта привычка кажется безобидной, потому что первый запуск обычно делает именно то, что попросил разработчик. Но она создает копии в местах, которые никогда не предназначались для хранения полномочий production.

Учетные данные в контексте агента могут уйти по большему числу путей, чем исходный промпт. Агент может повторить их в команде, записать в файл конфигурации, включить в отчет об ошибке, поместить в сгенерированную документацию или показать при объяснении сбоя. Еще больше копий появляется в прокрутке терминала, истории shell, окружении процессов, логах CI, резервных копиях и снимках экрана для службы поддержки. Удаление одного видимого сообщения не удаляет эти копии.

Команды часто смешивают два простых понятия: агент, который использует секрет, не то же самое, что агент, который владеет секретом. Браузер может отправить платеж, не раскрывая номер карты каждому скрипту на странице. Для агента возможна такая же изоляция. Он может запросить POST /deployments с описанными данными, а доверенный исполнитель подставит учетные данные и вернет ответ.

Не принимайте имитацию такой изоляции, когда система заменяет API_KEY=... на ${SECRET_NAME}, а затем разрешает этот шаблон внутри процесса агента. Открытый текст по-прежнему попадает в тот же процесс. Скомпрометированное расширение, вредоносная инструкция в репозитории или слишком подробный отладочный дамп могут его получить.

Безопасная граница запроса выглядит так:

{
  "channel": "http",
  "credential": "deploy-service",
  "method": "POST",
  "url": "https://api.example.internal/deployments",
  "headers": {"content-type": "application/json"},
  "body": {"service": "catalog", "revision": "a1b2c3d"}
}

Агент видит конечную точку, данные запроса, статус одобрения и ответ. Токен bearer, который авторизует запрос, ему не виден. Благодаря этому можно менять учетные данные, не вычищая одновременно утекшие копии из промптов и локальных рабочих деревьев.

Если ключ уже попал в контекст агента, считайте его раскрытым. Отзовите или замените его, проверьте места, куда запуск записывал вывод, и уберите схему с прямой передачей секрета. Иногда команды откладывают замену, потому что не могут доказать утечку токена. Доказательство того, что скопированные учетные данные кто-то украл, не нужно. Достаточно понять, что вы больше не контролируете, где они находятся.

Общие учетные записи скрывают того, кто внес изменение

Агенту нужен шлюз действий, когда он работает через общего пользователя для деплоя, общий облачный токен или одну SSH-учетную запись, которой пользуются все разработчики и задачи автоматизации. Общий доступ ненадолго упрощает администрирование учетных записей, но при первой же проблеме уничтожает атрибуцию.

Представьте знакомый сбой. Агент получает задачу исправить ошибку сборки. Он находит устаревшую настройку инфраструктуры и подключается к хосту через ops@production. Учетная запись работает, потому что у нее широкие права, а ее закрытый ключ лежит в инструкциях по подключению к проекту. Агент меняет файл, перезапускает сервис и сообщает об успехе.

Позже сервис начинает возвращать ошибки. Журнал сервера говорит, что его перезапустил ops. Аудит облака сообщает, что командный токен вызвал API деплоя. Ни одна запись не указывает, какой процесс агента это сделал, какая задача его запустила, кто запустил этот процесс и видел ли кто-нибудь операцию до ее выполнения. Теперь расследование инцидента строится на догадках.

Отдельные учетные данные для каждого человека лучше одной общей учетной записи, но для работы агента этого недостаточно. Если агент получает закрытый ключ или долгоживущий токен Alice, журнал может сказать лишь, что действовали учетные данные Alice. Он не позволяет надежно определить, инициировали ли запрос Alice, ее терминал, скомпрометированная инструкция репозитория или ее агент.

Используйте идентичности и записи для разных задач:

  • Сервисная идентичность определяет, что разрешает внешняя система.
  • Сессия агента указывает на конкретный запущенный процесс, запросивший работу.
  • Одобрение показывает, кто принял область действия операции.
  • Запись действия содержит точный запрос и его результат.

Не объединяйте все это в одно поле user. Во время сбоя или проверки доступа каждый пункт отвечает на свой вопрос.

К общим SSH-учетным записям нужно относиться особенно настороженно. Закрытый SSH-ключ это переносимое полномочие на подпись. Если файл есть у агента, все ограничения, которые вы хотели применить после входа, уже потеряли самую полезную границу. Принудительные команды и ограничения учетной записи могут уменьшить ущерб, и ими стоит пользоваться, но они не меняют того факта, что агент сможет инициировать любое соединение, разрешенное ключом.

Переместите ключ в исполнитель, который сам выполняет SSH-операцию. Дайте агенту интерфейс запросов, записывающий хост, команду, идентичность, сессию и результат. Запрос должен быть достаточно узким, чтобы проверяющий мог его понять. systemctl restart catalog можно проверить. ssh host 'bash -c \"$(curl ... )\"' это непрозрачный туннель для произвольных полномочий.

Одно одобрение для всего не является одобрением

Агенту нужен шлюз действий, когда разработчик один раз одобряет расплывчатое разрешение и не может понять, какие последующие запросы его использовали. Кнопка «Разрешить доступ агента» превращается в имитацию согласия, если она охватывает неизвестный набор конечных точек, команд, учетных записей и сроков действия.

Одобрение работает, когда отвечает на два практических вопроса: какой процесс сделал запрос и что именно покрывает это одобрение? Идентичность процесса важна, потому что на локальном компьютере могут работать доверенный агент для программирования, неподписанный скрипт из репозитория и вредоносный процесс, скопировавший имя агента. Одной подписи на экране недостаточно, чтобы установить доверие. Полномочия на подпись кода дают проверяющему полезный факт для проверки.

Область действия важна, потому что усталость от запросов превращает людей в автоматических нажимателей. Если просить каждого разработчика проверять пятьдесят обычных вызовов в час, это не создаст человеческий контроль. Люди начнут закрывать окна автоматически. Но и недельное общее одобрение для production-учетных данных оставляет одной случайной инструкции слишком много пространства для действий.

Используйте две области одобрения, исходя из последствий полномочий:

  • Одобрение сессии может охватывать обычные вызовы одного идентифицированного процесса агента, пока этот процесс не завершится.
  • Подтверждение отдельного вызова нужно для учетных данных, которые могут необратимо изменить production, переместить деньги, изменить доступ или открыть данные за пределами задачи.

Граница должна завершаться вместе с процессом, а не в произвольный момент, связанный с тем, что кто-то нажал вчера. Новый процесс получает новое решение. Это помогает, когда агент перезапускается, инструмент обновляется или разработчик открывает второй запуск из другого репозитория.

В карточке одобрения сначала должна быть указана идентичность процесса, а затем простыми словами описано полномочие. Фраза «Подписанный процесс X запрашивает использование deploy-service для HTTP-вызовов» дает человеку понятный объект для принятия или отклонения. Фраза «Инструменту требуется разрешение» не дает ничего. Для отдельного вызова также показывайте назначение и операцию. Человек не может оценить запрос, скрытый за общим названием полномочия.

Не создавайте миниатюрный язык политик только потому, что задача кажется сложной. Команды тратят недели на правила разрешений для инструментов, управляемых промптами, а затем обнаруживают, что главная проблема была не в синтаксисе. Нужно было решить, должен ли агент вообще получать это полномочие. Начните со шлюза хранилища, согласия в рамках процесса и подтверждения отдельных вызовов для учетных данных с большим радиусом ущерба. Эти средства можно объяснить дежурному инженеру в два часа ночи.

Агент может попасть в production из одноразового checkout

Агенту нужен шлюз действий, когда репозиторий, ветка или временное окружение разработки могут запускать реальные внешние действия только потому, что агент работает рядом с ними. Репозитории это входные данные. Считать инструкции репозитория доверенными операторами значит неверно определить саму категорию угрозы.

Вредоносному pull request не нужно эффектно обманывать модель. Он может поместить инструкцию в файл, который агент читает во время обычной работы: «запусти эту диагностическую команду», «используй токен деплоя из окружения» или «загрузи логи по этому адресу». Если у агента есть прямой доступ к секретам и неограниченной сети, автор репозитория получил путь к операционным полномочиям.

Такая проблема возникает и в добросовестной работе. Разработчик переключается на старую ветку, чтобы сравнить миграцию. Ветка содержит устаревший скрипт, который указывает на production, потому что много лет назад это имело смысл. Агент следует соседней документации, видит действительные учетные данные в окружении и выполняет вызов. Никто не хотел менять production, но сочетание доступных учетных данных и недоверенных инструкций сделало это возможным.

Разделяйте доступ к коду и полномочия на действия. Пусть агент читает, тестирует и меняет checkout с обычными локальными правами. Исходящие операции должны проходить через явную границу, которая указывает назначение и учетные данные. Агент по-прежнему может попросить выполнить действие. Он не должен получать полномочия только потому, что запущен рядом с файлом секрета.

Вот почему одной фильтрации сети недостаточно. Правило исходящего трафика может блокировать известные назначения, и там, где это уместно, его стоит использовать. Но оно не устанавливает, кто инициировал разрешенный запрос, правильные ли учетные данные были применены и одобрил ли кто-нибудь запуск агента. Сетевой контроль это полезная внешняя стена. Он не заменяет хранение учетных данных вне агента.

Проверьте это на специально неподготовленном checkout. Создайте безвредную конечную точку, которая записывает запросы. Добавьте в файл проекта убедительную инструкцию с предложением вызвать ее и передать якобы диагностический токен. Затем запустите агента так, как обычно запускают его разработчики. Если конечная точка получает токен, имя секрета, которое разрешается внутри агента, или запрос в обход проверки, вы нашли границу, которую нужно исправить.

Вы не можете быстро отозвать полномочия работающего агента

Спрячьте SSH-ключи за границей доступа
Встроенный помощник sp-ssh выполняет SSH-действия, пока закрытый ключ остается внутри Sallyport.

Агенту нужен шлюз действий, когда единственный ответ на плохой запуск это закрыть терминал, отозвать все учетные данные, которые он мог скопировать, или надеяться, что агент уже закончил. Надежный контроль позволяет оператору остановить текущие полномочия, не превращая локальную ошибку в масштабную аварию с учетными данными.

Время жизни процесса дает естественную единицу отзыва. Если одобрение привязано к одному процессу агента, отзыв сессии блокирует дальнейшие действия этого запуска, даже если процесс остается открытым. Агент может продолжать писать код, но не сможет обращаться к внешним каналам, которые контролирует шлюз. Это гораздо меньше мешает работе, чем остановка других задач разработчика или замена общего токена всей организации во время инцидента.

Команды часто смешивают три разных вида отзыва:

  • Отзыв сессии останавливает один идентифицированный запуск агента и его дальнейшие одобренные запросы.
  • Блокировка хранилища учетных данных останавливает все защищенные действия, пока авторизованный человек снова его не откроет.
  • Замена или отключение внешних учетных данных убирает полномочия на стороне сервиса, который их выдал.

Используйте самое узкое действие, способное локализовать инцидент, а затем переходите к более широкому, если того требуют факты. Если разработчик просто выбрал не ту задачу, может хватить отзыва сессии. Если агент напечатал токен во внешней расшифровке, замените токен. Если вы не знаете, какие запуски агента имеют доступ, сначала заблокируйте хранилище и расследуйте ситуацию из устойчивого состояния.

Шлюз должен запрещать действия, пока его хранилище заблокировано. Это кажется очевидным, пока не сталкиваешься с инструментами, которые для удобства кэшируют расшифрованные учетные данные. Кэшированные полномочия лишают блокировку смысла именно в тот момент, когда она больше всего нужна оператору. Заблокированное состояние должно означать, что исполнитель не может выполнять HTTP-вызовы или SSH-соединения, требующие сохраненных секретов.

Потренируйтесь до инцидента. Запустите сессию агента, которая запрашивает безвредное защищенное действие, отзовите сессию и повторите тот же запрос. В ожидаемом ответе должно быть сказано, что авторизация больше недействительна. Затем запустите новый процесс и убедитесь, что он должен получить собственное одобрение. Если старый процесс продолжает работать, вы создали систему уведомлений, а не средство контроля.

В журналах есть вывод, но нет самих действий

Агенту нужен шлюз действий, когда у вас есть расшифровки чата и вывод терминала, но нет надежной записи действий. Расшифровка описывает, что, по словам агента, он сделал. Она не доказывает, что ушло по сети и какие учетные данные это авторизовали.

Запись действия должна создаваться рядом с исполнителем. Для HTTP-вызова записывайте сессию агента, время запроса, назначение, метод, ссылку на учетные данные, решение об авторизации и статус результата. Для SSH записывайте хост, ссылку на учетную запись, запрошенную команду, решение и результат выполнения. Не записывайте открытые пароли, закрытые ключи, токены bearer или полностью чувствительные тела ответов только ради ощущения полноты журнала.

OWASP Logging Cheat Sheet делает тот же практический вывод: журналы должны помогать расследовать проблемы безопасности, но приложениям следует избегать прямой записи токенов доступа, паролей, идентификаторов сессий и других секретов. Многие команды соблюдают лишь первую часть. После сбоя агента они включают подробную отладку, а затем создают вторую утечку секрета уже в хранилище логов.

Лучше разделять свидетельства и секретные материалы. Исполнитель может сохранить ссылку на учетные данные, например deploy-service, дайджест запроса и результат действия. Следователь сможет установить, что конкретная авторизованная сессия использовала эти учетные данные для определенной операции, не получая сам секрет.

Запись также должна защищать от незаметного изменения. Если тот же процесс, который выполняет действия, может молча переписать вчерашний журнал, журнал превращается в рассказ о том, во что этот процесс хочет заставить вас поверить. Практичная защита это цепочка хешей: каждая запись содержит дайджест предыдущей, поэтому изменение или удаление старой записи нарушает последующую проверку.

Проверка не должна требовать расшифровывать каждое чувствительное событие. Полезный инструмент аудита может проверять целостность цепочки по зашифрованным записям. Оператор обнаружит изменение, не получая широкого доступа к содержимому. Это не доказывает, что каждое исходное действие было разумным. Это доказывает, что записанную последовательность не редактировали незаметно постфактум.

Попробуйте задать вопрос аудита, который выходит за рамки «агент справился?». Спросите: «Какой запуск агента вчера использовал учетные данные для деплоя в production, какой процесс получил согласие и какой результат вернул каждый запрос?» Если для ответа приходится объединять историю shell, облачные логи, экспорт чата и чьи-то воспоминания, у вас нет журнала действий.

Прокси наблюдает за трафиком, но агент по-прежнему обладает полномочиями

Проводите действия MCP через Sallyport
Передавайте агентам с поддержкой MCP структурированные HTTP- и SSH-действия через встроенный sp mcp stdio shim.

Агенту нужен шлюз действий, когда предлагаемое решение это прокси, наблюдающий за трафиком, хотя API-токен или SSH-ключ по-прежнему хранится у агента. У прокси есть полезные задачи, но видимость трафика и хранение учетных данных это разные средства контроля.

Reverse proxy может аутентифицировать запросы на границе приложения. Исходящий прокси может фильтровать назначения или хранить журналы запросов. Ни одна из этих схем сама по себе не мешает локальному агенту прочитать токен, вставить его в другой запрос, сохранить в файл или использовать другой разрешенный путь. В случае SSH сетевой прокси не решает проблему закрытого ключа в окружении агента.

Архитектура с посредником также создает собственную операционную нагрузку. Нужно поддерживать доверие TLS, развертывание сертификатов, исключения протоколов и трафик, который приложения самостоятельно закрепляют или шифруют. Иногда команды строят такую схему, потому что она кажется универсальной точкой контроля. Затем выясняется, что все равно нужно решить, какой процесс может использовать какие учетные данные.

Размещайте границу на уровне действия, а не только пакета. Агент формирует структурированный запрос. Исполнитель выбирает сохраненные учетные данные, подставляет их в HTTP-запрос или использует для SSH, записывает решение и возвращает результат. Агент хранит информацию, необходимую для запроса работы, но не материал, с помощью которого можно выдавать себя за сервисную идентичность в другом месте.

У такого подхода есть полезное ограничение: он не пытается стать универсальным движком политик, который предсказывает намерения по естественному языку. Он делает полномочия явными. Агент запрашивает операцию через известный канал. Человек или настроенный контроль учетных данных решает, доступен ли этот канал для данного запуска. Запись показывает, что произошло.

Для команд, работающих на macOS, Sallyport использует эту модель через MCP stdio shim: агент запрашивает HTTP- или SSH-действия, а приложение хранит API- и SSH-секреты в зашифрованном хранилище и само выполняет операцию. Это не отменяет необходимости выбирать подходящие права сервисов, но убирает привычку передавать агенту открытые учетные данные.

Вы полагаетесь на минимальные права, но не проверяете границы

Мгновенно останавливайте защищенные действия
Заблокируйте хранилище, защищенное Secure Enclave и Touch ID, чтобы сразу запретить все защищенные действия.

Агенту нужен шлюз действий, когда команда говорит о минимальных правах токенов, но не проверила, что эти права позволяют автономному процессу. Минимальные права это свойство реальных учетных данных и доступных через них операций, а не ярлык, прикрепленный к роли.

Токен, который может развернуть только один сервис, все равно может менять переменные окружения этого сервиса. Это может позволить перенаправить трафик или раскрыть данные. SSH-учетная запись, ограниченная одним хостом, может читать конфигурацию деплоя, содержащую учетные данные других систем. Облачная роль, которой запрещено удалять ресурсы, может создать рабочую нагрузку с чрезмерно широкими полномочиями. Названия разрешений редко показывают все последствия.

Проводите проверку прав по действиям, а не по продуктам. Запишите, что агент может попросить исполнителя сделать, и проверьте правила авторизации сервиса для каждой операции. Не забывайте чтение. Агент может вызвать дорогой или чувствительный инцидент через конечные точки экспорта, получение логов, чтение конфигурации и API обнаружения, не изменив ни одного ресурса.

Во время проверки используйте небольшую таблицу:

Запрошенное действиеВнешняя идентичностьПоследствие неправильного использованияОбласть одобрения
Создать preview-деплойУчетная запись preview deployВременная рабочая нагрузка и расходыСессия
Перезапустить production-сервисУчетная запись production operationsНедоступность для пользователейОтдельный вызов
Прочитать набор логов инцидентаУчетная запись поддержкиВозможное раскрытие чувствительных данныхОтдельный вызов
Открыть SSH-соединение с хостом сборкиУчетная запись хоста сборкиВыполнение команд на хостеСессия, если область команд узкая

Таблица заставляет провести неудобный, но полезный разговор. Если последствие нельзя описать короткой фразой, права, вероятно, слишком широки или интерфейс запроса слишком расплывчат.

Не используйте шлюз действий как оправдание чрезмерных прав сервисных идентичностей. Он уменьшает раскрытие секретов и улучшает согласие и доказательную базу. Внешний API или хост по-прежнему определяет, что может делать учетная запись. Уменьшайте эти права, разделяйте идентичности по окружениям и задавайте более строгие правила одобрения для необратимых операций.

Первая граница должна защищать от действия, которое навредит вам на этой неделе

Шлюз действий оправдывает себя, когда заменяет путь с прямой передачей учетных данных, которым команда уже пользуется, а не превращается в шестимесячную перестройку доступа. Выберите действие с самыми серьезными последствиями среди тех, что агент уже выполняет, и сначала перенесите именно этот путь.

Для многих команд это API деплоя в production. Для других это SSH-доступ к хосту сборки или операционной системы. Выбор должен исходить из реальных полномочий, а не из интеграции, которую проще показать на демонстрации. Токен с доступом только для чтения к трекеру задач тоже может быть важен, но он не должен отвлекать от закрытого ключа, с помощью которого можно перезапускать production-сервисы.

Сделайте первый этап конкретным:

  1. Составьте список токенов, SSH-ключей, общих учетных записей и переменных окружения, доступных агенту.
  2. Выберите одни учетные данные, пересекающие реальную границу доверия, и удалите их открытое значение из окружения агента.
  3. Определите структурированный запрос действия, который может делать агент, включая назначение и операцию.
  4. Требуйте авторизацию в рамках процесса для этого пути запросов, а затем включите подтверждение каждого вызова, если действие может причинить серьезный вред.
  5. Выполните безвредный тест, отзовите сессию и убедитесь, что журнал показывает и разрешенный вызов, и отклоненную повторную попытку.

Начинайте с учетных данных staging только в том случае, если staging действительно проверяет тот же путь действия. Тестовый токен в совершенно другом инструменте почти ничего не говорит о том, как будет работать авторизация production. Проверка должна охватывать настоящий исполнитель, одобрение, отзыв и путь аудита.

Не ждите идеального поведения агента. Защита от prompt injection, проверка репозитория, песочница, права сервисов и сетевые ограничения снижают риск. Но ни одно из этих средств не дает ясного ответа, когда процесс агента запрашивает внешнее действие с учетными данными, которыми он вообще не должен владеть. Спрячьте учетные данные за границей доступа до того, как следующий скопированный токен превратится в расследование инцидента.

Вопросы и ответы

Что такое шлюз действий для AI-агента, который пишет код?

Шлюз действий не дает учетным данным попадать в процесс агента и выполняет одобренные внешние действия от его имени. Менеджер секретов хранит и выдает секреты. Если он возвращает API-токен агенту, агент по-прежнему владеет этим токеном и может раскрыть или использовать его повторно.

Нужен ли шлюз действий небольшой команде?

Начните с одного опасного канала, обычно с доступа к production по HTTP или SSH. Первая полезная граница проста: агент запрашивает действие, отдельный доверенный компонент хранит учетные данные, а человек может увидеть и остановить запуск.

Что делать, если агент скопировал API-ключ в промпт?

Считайте скопированный токен раскрытым, как только он попал в промпт, расшифровку, историю shell, снимок терминала или сгенерированный файл. Отзовите его, выпустите новый, выясните, где он появился, а затем измените процесс, из-за которого агент получил этот токен.

Безопасно ли напрямую передавать агенту ограниченный SSH-ключ?

Нет. Права SSH-ключа можно ограничить учетной записью, исходным адресом или командой, но процесс агента все равно сможет использовать все разрешения этого ключа. Храните закрытый ключ в отдельном исполнителе и одобряйте или ограничивайте команды, которые он выполняет.

Почему общие сервисные учетные записи опасны для доступа агента?

Общие учетные записи уничтожают атрибуцию: успешный запрос показывает, какая учетная запись выполнила действие, но не какой запуск агента или человек его инициировал. По возможности выделяйте отдельную идентичность для каждой рабочей нагрузки и записывайте сессию агента рядом с каждым действием.

Что должно быть в запросе на одобрение действия агента?

Полезное окно одобрения называет процесс агента, назначение, операцию, задействованные учетные данные или полномочия и область действия одобрения. Если в нем сказано лишь, что агент запрашивает доступ, человеку приходится угадывать главное.

Что должен содержать журнал действий AI-агента?

В записи действия должны быть сессия агента, время, назначение, метод или команда, результат авторизации и итог операции. Не записывайте открытые учетные данные, токены и чувствительные тела ответов, если у вас нет отдельного защищенного процесса для таких данных.

Может ли reverse proxy заменить шлюз действий?

Прокси может наблюдать за трафиком или направлять его, но это не мешает агенту хранить учетные данные или использовать другой сетевой путь. Шлюз действий должен владеть учетными данными и сам выполнять операцию, а не просто находиться на пути запроса.

Когда нужно требовать одобрение каждого вызова агента?

Одобрение на сессию подходит для обычной работы известного процесса агента, если сессия корректно завершается, а область доступа ограничена. Подтверждайте каждый вызов для учетных данных с широкими правами в production, необратимых операций или историей случайного неправильного использования.

Как добавить контроль действий агента и не остановить разработку?

Начните с инвентаризации всех учетных данных, SSH-ключей, общих учетных записей и исходящих интеграций, доступных агенту. Затем сначала уберите прямую передачу секретов в самом важном из этих путей и проверьте, что можете восстановить историю одного тестового действия от запроса и одобрения до результата.

Sallyport

Sallyport выполняет API-вызовы и SSH-команды за вашего ИИ-агента. Ключи остаются в локальном хранилище на вашем Mac; вы подтверждаете каждый запуск, и каждое действие попадает в запечатанный журнал.

© 2026 Sallyport · Открытый код по лицензии Apache-2.0 · Oleg Sotnikov