Доступ к заблокированному локальному хранилищу: практическое руководство для работы агентов
Как планировать доступ автономных агентов к заблокированному локальному хранилищу: окна разблокировки, подтверждение запусков и отдельных вызовов, паузы и свидетельства для проверки.

Автономная работа ломается по вполне предсказуемому сценарию, когда заблокированное локальное хранилище считают неудобством. В середине задачи агент упирается в границу доступа к учётным данным, кто-то начинает торопиться, и секрет копируют в переменную оболочки, конфигурационный файл или сообщение в чате. Задача быстро завершается. Но команда создаёт неотслеживаемый путь для учётных данных, который переживёт саму задачу.
Заблокированное хранилище должно влиять на план работы ещё до запуска агента. Оператору нужно отдельно решить три вопроса: когда открыть доступ, какому процессу агента разрешить действовать в этом запуске и какие отдельные действия всё ещё требуют решения человека. Команды, которые сводят всё к расплывчатому «можно», либо тонут в запросах, либо начинают обходить средства контроля.
Речь не о том, чтобы человек следил за каждой командой. Важно направить внимание туда, где оно меняет результат. Чтение данных для первичного анализа часто можно выполнять в ограниченной сессии. Удаление в production, изменение разрешений или публикация релиза заслуживают нового решения именно в момент действия. Остальное зависит от плана запуска, понятного оператору до начала работы агента.
У окна разблокировки должны быть ответственный и время завершения
Оператор должен разблокировать локальное хранилище на определённый рабочий промежуток. У решения должен быть один ответственный и понятное условие закрытия. Формулировка «оставлю открытым, пока работаю» кажется практичной, но не выдерживает встречи, обеда, блокировки ноутбука или переключения контекста. Открытое хранилище превращается в полномочия, о которых никто активно не думает.
Решение разблокировать хранилище открывает самый широкий доступ во всей цепочке. Пока хранилище заблокировано, через него не должны проходить ни сессия агента, ни отдельный запрос. Состояние блокировки полезно именно как рабочая граница, а не как формальный этап входа.
Выбирайте окно, соответствующее естественному ритму задачи. Для небольшого исправления может хватить короткого промежутка. Для плановой миграции понадобится окно на подготовку, выполнение и проверку, с запланированной паузой перед необратимой фазой. Расследование, в котором читают только журналы, должно проходить в отдельном окне, не связанном с последующим изменением настроек production.
До открытия доступа оператор должен записать пять фактов:
- кто принимает решение об авторизации;
- какую работу может выполнять агент;
- каких сред и аккаунтов может коснуться задача;
- какое условие завершает окно;
- кто проверит результат, если ответственному оператору придётся уйти.
Для этого не нужна большая процедура. Достаточно комментария в задаче или заметки о запуске, если в ней указаны реальные границы. «Исправить проблему с развёртыванием» недостаточно. Формулировка «Проверить неудачное развёртывание в staging, затем повторить только указанное развёртывание, если digest образа совпадает с утверждённой сборкой» даёт проверяющему конкретный критерий.
Не используйте одни часы как условие завершения. Жёсткий срок полезен, но работа часто затягивается, когда агент обнаруживает неожиданную зависимость. Сочетайте ограничение по времени с ограничением по состоянию: закрывайте окно после запланированной проверки, при появлении первой неожиданной цели или когда ответственный оператор отходит. Если задача выходит за пределы срока, она должна запросить новое окно. Такая короткая пауза заставляет кого-то заново решить, подходит ли прежняя авторизация.
Популярная альтернатива, постоянное удобство: разблокировать хранилище утром и блокировать вечером. Команды выбирают её, потому что разблокировка прерывает работу. Для автономных задач это плохой вариант: агент продолжает работать со скоростью машины, а человек, чьё внимание оправдало доступ, уже занимается чем-то другим. Если повторные разблокировки кажутся невыносимыми, улучшите группировку задач и процесс подтверждения. Не убирайте границу.
Разблокировка хранилища, подтверждение запуска и подтверждение действия отвечают на разные вопросы
Локальному хранилищу нужны три разных решения, потому что каждое контролирует свой риск. Разблокировка отвечает на вопрос, могут ли вообще выполняться действия с учётными данными. Подтверждение запуска отвечает на вопрос, может ли этот конкретный процесс агента использовать доступный путь действий в рамках ограниченной работы. Подтверждение отдельного вызова отвечает на вопрос, заслуживает ли именно это использование именно этих учётных данных нового решения человека.
Команды часто путают первые два уровня. Они разблокируют хранилище и предполагают, что теперь любой процесс на компьютере получил право действовать. Так локальная проверка присутствия превращается в широкую программную авторизацию. Другая плохая схема, подтверждать каждый безвредный запрос, потому что команда не определила смысл подтверждения сессии. Операторы одобряют десятки обычных чтений и в итоге перестают читать карточки запросов.
Различие особенно важно, когда задача меняется. Допустим, агенту разрешили проверить неудачную сборку, запросить API развёртывания и собрать журналы. Он обнаруживает, что причиной может быть недостающее разрешение. В исходный запуск изменение контроля доступа не входило. Агент должен остановиться и запросить новое решение, даже если хранилище открыто, а его процесс всё ещё подтверждён. Цель изменилась с диагностики на администрирование.
Разумное разделение выглядит так:
- Открывайте доступ, пока ответственный человек может контролировать запланированную работу.
- Подтверждайте один указанный процесс агента для заявленного запуска, включая обычные действия, соответствующие его условиям.
- Требуйте отдельного подтверждения для вызовов с серьёзными последствиями: публикации, удаления, изменения разрешений, ротации учётных данных и записи в production.
Точные категории действий зависят от команды. Важно классифицировать их по последствиям, а не по числу API-вызовов. Один запрос на отзыв production-аккаунта заслуживает большего внимания, чем пятьдесят запросов метаданных сборки.
Именно здесь фиксированная цепочка решений Sallyport намеренно остаётся узкой: шлюз хранилища блокирует все действия, пока хранилище закрыто, авторизация сессии подтверждает новый процесс агента на время его жизни, а настройка отдельного ключа может требовать подтверждения каждого использования. Операторам не приходится писать язык политик, который во время сбоя превращается в ещё одну программу безопасности для отладки.
Не утверждайте, что защита каждого вызова делает любые учётные данные безопасными. Она лишь позволяет принять решение человека в момент использования. Оператору всё равно нужен достаточный контекст. Если запрос содержит только «использовать production-токен», большая часть ценности контроля уже потеряна. Укажите в плане цель, действие и ожидаемый эффект, а затем сравнивайте запрос с этим планом.
Планируйте доступ по состояниям работы, а не по рабочим часам
Команде стоит представить работу агента как последовательность состояний с явными точками, в которых полномочия начинаются, приостанавливаются, сужаются или заканчиваются. Рабочие часы помогают организовать дежурство, но не описывают саму работу. Задача может начаться в присутствии команды, дождаться внешней системы и продолжиться уже после ухода человека, который её подтвердил.
Используйте в записи задачи четыре состояния: подготовка, активное выполнение, пауза и проверка. На этапе подготовки действия с учётными данными не выполняются. Агент может изучить репозиторий, собрать команды, проверить входные данные и объяснить будущие вызовы без доступа к хранилищу. Активное выполнение начинается только после открытия окна доступа оператором и подтверждения запуска. Пауза означает, что агент достиг условия ожидания, столкнулся с неожиданным решением или вышел за пределы утверждённой области. Проверка замыкает цикл до выдачи полномочий на связанные последующие действия.
Такая простая модель состояний предотвращает распространённый сбой. Инженер запускает агента для очистки развёртывания в 16:30. Агент выполняет тесты, находит устаревшие ресурсы и ждёт завершения облачной операции. В 17:15 он продолжает работу, обнаруживает, что очищать нужно другой аккаунт, и движется дальше, потому что сессия всё ещё существует. Исходный оператор уже ушёл. Даже если все API-вызовы успешны, задача незаметно перешла в другую область без решения ответственного человека.
Правила паузы нужно записать до запуска. Хорошие правила можно наблюдать:
- остановиться, если аккаунт, хост или среда отличаются от записи о запуске;
- остановиться, если агенту нужны учётные данные класса, не указанного в плане;
- остановиться перед созданием, удалением, публикацией или изменением разрешений;
- после неудачной записи остановиться до проверки возвращённой ошибки оператором;
- остановиться, когда указанный оператор становится недоступен.
Пауза не означает сбой. Это аккуратный переход состояния. Агент должен сохранить точную команду или запрос, который собирался выполнить, собранные входные данные и причину остановки. Следующий оператор сможет принять решение, не восстанавливая ход задачи по шумному диалогу в чате.
Это помогает честно оценивать срочность. Если ночной задаче нужно выполнить действие, кто-то должен решить, оправдывает ли влияние на бизнес открытие нового окна доступа. Команды иногда называют срочной любую заблокированную задачу, потому что агент уже потратил десять минут. Это ошибка невозвратных затрат. Граница учётных данных должна заставлять человека выбирать заново, когда обстоятельства меняются.
Идентичность процесса должна быть видна до того, как запуск получит доверие
В подтверждении нужно указывать процесс агента не только по подписи терминала или имени, которое сообщил пользователь. Процесс с названием «deploy-agent» может быть ожидаемым исполняемым файлом, локальным скриптом или программой, запущенной скомпрометированной зависимостью. Оператору нужен содержательный сигнал о том, кто создал и запустил программу, запрашивающую полномочия.
Идентичность подписи кода полезна, потому что связывает решение с исполняемым полномочием, а не с текстом, который может вывести любой процесс. Она не доказывает разумность каждого запроса агента. Но она даёт более сильный ответ на базовый вопрос при инциденте: какой процесс получил разрешение использовать хранилище?
В записи о запуске указывайте точку входа агента и рабочий каталог или репозиторий. Перед подтверждением это даёт оператору две проверки: идентичность процесса, которую показывает система, и ожидаемый командой контекст задачи. Если они не совпадают, отклоните запрос и проверьте компьютер. Не подтверждайте его сначала только потому, что задача кажется знакомой.
Чистый процесс подтверждения требует умеренного трения. Первый вызов с учётными данными от нового процесса запускает подтверждение. Оператор проверяет полномочия процесса и цель запуска. Процесс может продолжать работу в рамках подтверждённой сессии, пока не завершится, оператор не отзовёт его или хранилище не заблокируется. Новый процесс запрашивает подтверждение снова.
Последняя деталь закрывает тонкий обход. Если команда подтверждает именованную сессию терминала вместо процесса, человек может запустить в том же терминале несвязанную программу и получить доверие, выданное предыдущему запуску. Авторизация должна относиться к фактическому процессу агента, а не к окну, аккаунту пользователя или папке проекта.
Sallyport показывает полномочия подписи кода процесса при запросе авторизации сессии. Это именно та деталь, которая нужна оператору перед подтверждением запуска агента. При этом письменную цель запуска стоит держать рядом: идентичность показывает, кто спрашивает, а контракт запуска, относится ли запрос к задаче.
Защиту каждого вызова нужно применять к необратимым полномочиям
Подтверждение каждого вызова полезно, когда оно защищает действия, которые человек может оценить за секунды, но последствия которых придётся исправлять гораздо дольше. Назначайте его учётным данным, способным создавать внешние обязательства, менять доступ, уничтожать данные или влиять на production-сервис. Не включайте его для всех учётных данных по привычке.
Типичная ошибка, пометить весь production-аккаунт как «опасный» и требовать подтверждения каждого запроса. Агент делает много безвредных чтений, оператор быстро подтверждает их, а разрушительная запись появляется среди знакомых запросов. Контроль превращается в метроном. Людям трудно сохранять внимание при повторяющихся подтверждениях с небольшим объёмом информации.
Если провайдер позволяет, разделяйте полномочия. Используйте учётные данные только для чтения, узко ограниченные учётные данные для обычного обслуживания и учётные данные с более серьёзными последствиями для действий, требующих решения при каждом вызове. Если провайдер предоставляет один широкий токен, считайте каждое его использование широким полномочием. Один HTTP-метод сам по себе не делает операцию малорисковой. В плохо спроектированном API POST может получать данные, а GET-эндпоинт запускать работу.
RFC 6750 прямо описывает bearer-токен: любой, кто им владеет, может его использовать. Поэтому передача токена агенту, даже «только для этой задачи», создаёт проблему шире непосредственной операции. Местами утечки могут стать контекст запроса агента, история оболочки, журналы, плагины и будущие передачи работы. Держите токен в локальном хранилище, а наружу возвращайте результат операции.
Для SSH не используйте перенаправление агента как обход локального контроля. В руководстве OpenSSH ssh_config предупреждается, что перенаправление агента авторизации позволяет удалённому хосту использовать локальный агент, и подчёркивается необходимость доверять удалённому хосту. В автономной работе риск шире: агент может подключиться через хост, настройки или назначение которого он не проверил полностью. Используйте прямой путь SSH-действия, укажите разрешённый хост в контракте запуска и ставьте задачу на паузу при появлении jump-хоста или нового назначения.
Защиту каждого вызова нужно привязывать к учётным данным, а не к расплывчатому понятию «режим production». Такой выбор будет понятен и позже. Проверяющий увидит, что эти учётные данные всегда требовали решения, независимо от того, какой агент их запросил и какой проект предоставил запрос.
Контракт запуска не даёт подтверждать работу наугад
Контракт запуска должен помещаться в короткий комментарий к задаче и делать решение о подтверждении проверяемым. Это не план проекта. В нём записан минимальный набор фактов, позволяющий оператору подтвердить, отклонить, приостановить и проверить работу, не читая всю расшифровку действий агента.
Используйте этот шаблон до разблокировки доступа:
Run ID: 2025-03-incident-cleanup-01
Owner: name of approving operator
Purpose: inspect failed release and remove only the listed temporary resource
Agent process: expected executable and repository directory
Targets: staging account, api.example.internal, named SSH host
Allowed actions: read deployment state; delete resource tmp-4821 after match check
Per-call actions: delete request, any permission change, any production request
Stop conditions: target mismatch; unexpected credential; failed write; owner unavailable
Expected evidence: request IDs, resource IDs, command output, final status
Review owner: name of reviewer
Идентификатор с датой в примере нужен для удобства чтения, а не как средство защиты. Выберите идентификатор, который команда сможет найти в системе задач и записях активности. Важнее всего строки с целями, разрешёнными действиями и условиями остановки. Они не дают запуску расшириться из-за следующей задачи, которая показалась агенту правдоподобной.
Контракт также рано показывает плохие планы. В формулировке «Исправить разрешения» нет цели, разрешённого изменения и материалов для проверки. Оператор не может ответственно подтвердить такую работу. «Добавить группу X в роль Y в staging, затем проверить привязку роли запросом на чтение» уже достаточно конкретно. Если агент обнаружит, что группы X не существует или роль Y относится к production, он должен остановиться.
Не делайте шаблон настолько подробным, чтобы люди заполняли его выдуманной точностью. Длинный список эндпоинтов создаёт ложное ощущение контроля, если реальный риск связан с бизнес-операцией, например публикацией сборки или удалением аккаунта. Указывайте эндпоинты, когда они уточняют границу. В остальных случаях называйте ресурс, среду и эффект.
Для повторяющихся задач храните стабильный контракт с историей изменений. Повторяющийся контракт не означает постоянных полномочий. Оператор всё равно открывает окно и подтверждает конкретный запуск процесса. Стабильный текст уменьшает неоднозначность, но не должен превращаться в разрешение, которое никто не перечитывает.
Для заблокированной задачи нужен безопасный путь паузы
Команды начинают искать обходы, когда у заблокированного агента нет достойного способа остановиться. Агент мог собрать половину входных данных, оператор оказался недоступен, а задача кажется почти завершённой. Если варианты сводятся к «закончить сейчас» или «потерять весь прогресс», кто-нибудь экспортирует секрет.
Создайте путь паузы, который сохраняет контекст, но не учётные данные. Агент записывает, что он увидел, какое внешнее действие хочет выполнить, какие несекретные входные данные нужны для продолжения и почему граница авторизации остановила его. Он не должен записывать токен, закрытый ключ, заголовок авторизации или командную строку со встроенным секретом.
Для HTTP-операции в записи паузы могут быть метод, хост, маршрут, идентификатор ресурса, ожидаемый класс статуса и обезличенная форма тела запроса. Для SSH-операции можно указать псевдоним хоста, удалённого пользователя, если это не чувствительные данные, предполагаемую команду, ожидаемый вывод и результат проверки хоста. Оператор сможет изучить запись до открытия следующего окна.
Полезная заметка для передачи работы может выглядеть так:
State: held
Reason: planned cleanup target was absent; agent found a second temporary resource.
Observed: tmp-4821 absent, tmp-5930 created by the same failed release.
Requested next action: delete tmp-5930 after operator confirms it belongs to this incident.
No external write occurred after the original target check failed.
Evidence to review: deployment query result and resource metadata IDs.
Такая заметка даёт следующему оператору настоящий выбор. Он может разрешить второе удаление, отклонить его или запросить дополнительный анализ. Агент не сможет незаметно переосмыслить «удалить указанный временный ресурс» как «удалить всё похожее».
Не позволяйте агенту продолжать повторять отклонённую операцию. Отклонение может означать, что оператор заметил несоответствие, хранилище заблокировалось или защита каждого вызова потребовала решения, которое так и не поступило. Циклы повторов превращают ясную паузу в поток запросов. Считайте отклонение состоянием остановки, пока оператор явно не подтвердит то же действие заново.
То же правило действует, если после запроса записи API отвечает тайм-аутом. Агент не должен считать операцию неудачной и повторять запрос. По возможности он должен безопасно прочитать итоговое состояние, записать неоднозначность и подождать, если операция могла завершиться успешно. Дублирующие записи порождают одни из самых утомительных инцидентов: в журнале команд они выглядят безобидно, пока внешняя система не обработает их.
Проверяйте свидетельства до следующего окна доступа
В конце запуска команда должна проверить результаты до выдачи новых полномочий для связанной работы. Такая проверка обнаруживает отклонения, пока оператор ещё помнит, почему было выполнено действие. Если отложить её до конца недели, задача, чат, терминал и журнал агента начнут рассказывать немного разные истории.
Проверяйте результаты по контракту запуска, а не по общему ощущению, что задача вроде бы завершена. Сопоставьте реальные цели, успешные и неудачные действия, возвращённые идентификаторы и вызовы, выпавшие из ожидаемой последовательности. Ошибка может быть приемлемой. Необъяснимая цель, нет.
Проверка должна быть короткой, но конкретной:
- обращался ли агент только к утверждённым средам и хостам;
- соответствовала ли каждая запись разрешённому действию или имела отдельное подтверждение;
- вернула ли внешняя система ожидаемые идентификаторы ресурсов или запросов;
- останавливался ли агент при каждом указанном условии остановки;
- нужна ли для следующей задачи новая версия контракта, а не расширение этого.
Проверка результата отличается от проверки полномочий. Запись сессии может показать, что процесс получил подтверждение в 10:02 и завершился в 10:19. Запись действий покажет отдельные операции API и SSH внутри этой сессии. Нужны оба представления, чтобы ответить, сделал ли процесс только то, что разрешал запуск.
Аудит с цепочкой хешей даёт отдельное свойство: позднее изменение записи становится обнаружимым. Sallyport формирует представления сессий и активности из зашифрованного аудита, недоступного для записи, а sp audit verify может офлайн проверить эту цепочку по шифротексту без доступа к ключу хранилища. Это полезно, когда нужно установить, менялась ли запись после события, но не заменяет проверку результата оператором, пока факты ещё свежи.
Используйте результаты проверки для улучшения следующего контракта. Если каждый запуск останавливается из-за безвредного запроса метаданных, добавьте его в следующий раз. Если повторяющаяся задача требует подтверждения каждого вызова для эндпоинта только для чтения, перенесите эти учётные данные в обычный класс сессии. Если проверяющие постоянно находят неожиданные записи, сузьте инструкции агента и области учётных данных до нового запуска.
Защита от подмены помогает после спора, но не до него
Защищённая от подмены запись позволяет проверить непрерывность истории. Она не решает, было ли действие разрешённым, разумным или безопасным. Если считать аудиторские данные профилактическим контролем, команда начнёт подтверждать широкие запуски с мыслью, что разберётся позже.
Разница важна при реальном инциденте. Представьте, что сессия агента обратилась к ожидаемому API развёртывания, а затем удалила неожиданный ресурс. Цепочка журнала поможет установить, что запрос на удаление присутствовал в записанной последовательности. Она не восстановит удалённый ресурс, не объяснит, почему процесс получил широкие полномочия, и не докажет, что оператор включал этот ресурс в область задачи.
Проверяйте аудит, когда нужно сохранить запись до эскалации инцидента, передачи расследования или проверки подозрительного запуска. Запустите проверяющую программу по сохранённым материалам журнала, запишите результат и приложите его к заметкам об инциденте. Не редактируйте и не «приводите в порядок» записи активности вручную ради более удобного отчёта. Пояснения должны находиться рядом с записью, а не внутри неё.
Цепочка также меняет подход к доступу к журналам. Иногда считают, что без немедленной расшифровки зашифрованная запись бесполезна. Проверка непрерывности цепочки по шифротексту позволяет установить один ограниченный, но важный факт, не открывая хранилище: соответствует ли сохранённая зашифрованная запись последовательности. Не смешивайте эти понятия. Проверка устанавливает целостность цепочки, расшифровка раскрывает содержимое, и ни то ни другое не даёт права выполнить новое действие.
Команда, которая планирует окна разблокировки, идентифицирует процессы агентов, использует защиту каждого вызова для серьёзных полномочий и быстро проверяет результаты, реже будет нуждаться в аудиторских данных. Когда запись всё же понадобится, у команды уже будут контракт запуска и заметки о паузах, необходимые для её понимания. Журнал без контекста авторизации показывает, что произошло. Журнал вместе с дисциплинированным планом работы показывает, почему команда это разрешила.
Начните с небольшого изменения: требуйте письменное условие остановки до того, как кто-либо разблокирует локальные учётные данные для агента. Одна строка заставляет команду решить, что агент должен делать, когда задача перестаёт соответствовать плану. Она также убирает привычное оправдание для экспорта секрета, когда работа становится неудобной.
Вопросы и ответы
Стоит ли оставлять локальное хранилище учётных данных разблокированным на весь день?
Нет. Разблокируйте хранилище только тогда, когда ответственный оператор может контролировать тот класс работы, который будет выполнять агент. Открытое «на всякий случай» хранилище превращает осознанное событие авторизации в фоновое состояние.
Что должно охватывать одно подтверждение запуска агента?
Считайте подтверждение сессии согласием на то, чтобы один конкретный процесс агента выполнил заявленный запуск. Подтверждение должно прекращаться при завершении процесса, отзыве оператором или существенном изменении задачи. Новый запрос в повторно используемом терминале нельзя автоматически считать новым подтверждением. Сначала проверьте, какой процесс по-прежнему владеет сессией.
Какие действия агента требуют подтверждения при каждом использовании?
Используйте подтверждение каждого вызова для действий, ошибка в которых сразу приводит к внешним последствиям: например, для записи в production, публикации релиза или разрушительного административного запроса. Не требуйте его для безвредных чтений только потому, что система это поддерживает. Постоянные запросы приучают операторов подтверждать их, не читая.
Что делать, если автономной задаче нужны учётные данные после окончания рабочего времени?
Безопаснее всего приостановить задачу, записать её текущее состояние и дождаться следующего окна доступа с дежурным оператором. Если у работы действительно есть срок, ответственный оператор может открыть короткое новое окно и подтвердить чётко ограниченное продолжение. Не решайте проблему задержки копированием токена в файл или чат.
Что должен содержать контракт запуска AI-агента?
Хороший контракт запуска называет оператора, цель, целевую среду, разрешённые типы действий, условия остановки, ожидаемые внешние изменения и момент проверки. Он даёт оператору конкретную основу для сравнения с журналом активности. Одного заголовка задачи почти никогда недостаточно.
Зачем отдельно записывать сессии агента и отдельные вызовы с учётными данными?
Нужны оба журнала, потому что они отвечают на разные вопросы. Запись сессии показывает, какой процесс агента получил полномочия и когда они закончились. Запись действия показывает, что именно этот процесс запросил у системы, защищённой учётными данными. При инциденте одно не заменяет другое.
Безопасно ли перенаправление SSH-агента для автономных агентов программирования?
Не разрешайте это по умолчанию. Перенаправление SSH-агента позволяет удалённой машине запрашивать подписи у локального агента и расширяет место, где злоумышленник может воспользоваться вашими полномочиями. Используйте прямой SSH-путь с явно указанной целью и ограниченным разрешённым хостом.
Как убедиться, что я подтверждаю именно нужный процесс агента?
Подтверждайте процесс только тогда, когда можете определить исполняемый файл и его полномочия подписи кода, а также когда у запуска есть письменная цель и ограниченная область. Одно имя процесса почти ничего не доказывает: любая программа может выбрать знакомое имя. Экран подтверждения должен помогать ответить, кто запустил процесс и что он может сделать сейчас.
Когда команде следует проверять результаты работы агента?
Проверяйте результаты до повторного открытия доступа для следующей связанной задачи, особенно после операций записи. Сопоставьте изменённые ресурсы, возвращённые идентификаторы, ошибки и неожиданные назначения с контрактом запуска. Если результат отличается от ожидаемого, отзовите сессию и разберитесь, прежде чем выдавать агенту новые полномочия.
Предотвращает ли защищённый от подмены журнал аудита вредные действия агента?
Нет. Защищённая от подмены запись помогает установить, что произошло после спора или инцидента, но не останавливает слишком широкую авторизацию, пока она действует. Предотвращение обеспечивают короткие окна разблокировки, ограниченные подтверждения запусков и подтверждение каждого вызова для действий, требующих решения человека.