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

Перезагрузка Mac даёт команде чёткую техническую границу. Пользуйтесь ею. Процесс агента завершается, его память исчезает, а каждое подтверждение, относившееся к этому конкретному запуску, должно завершиться вместе с ним. Попытка незаметно продолжить автономную работу после перезапуска обычно превращает узкое и проверяемое разрешение в постоянный доступ с расплывчатым сроком действия.
Это не значит, что перезагрузка должна всё стирать. Команде нужны свидетельства, объясняющие прошлые действия, зашифрованные учётные данные для будущей работы и достаточный контекст задачи, чтобы продолжить её осознанно. Правило простое: сохраняйте записи и защищённые материалы, но удаляйте действующие полномочия. Затем новый процесс должен получить подтверждение человека, прежде чем обращаться во внешний мир.
После перезагрузки авторизация агента должна начинаться с пустого состояния
После перезагрузки у агента не должно быть активных разрешений процесса, разблокированного хранилища, унаследованного секрета сеанса или запомненного подтверждения, которым новый процесс может воспользоваться. Перезапуск завершает работу объекта, получившего разрешение. Считать заменивший его процесс тем же самым только потому, что он использует тот же checkout, команду или имя агента, значит перепутать идентичность.
Часто возражают, что после обновления операционной системы или отключения питания это создаёт лишние неудобства. Одна намеренная пауза действительно появляется. Она заставляет посмотреть на процесс, который теперь просит полномочия, а не на процесс, которому несколько часов назад разрешили работу в других условиях.
Чистая граница перезапуска даёт четыре полезных свойства:
- Она очищает временные материалы: токены доступа в памяти, дескрипторы расшифрованных ключей, ожидающие подтверждения и идентификаторы процессов.
- Она не позволяет агенту пронести подтверждение через период без присмотра, когда оператора уже может не быть рядом.
- Она создаёт надёжную отметку аудита, по которой можно понять, произошло ли действие до или после перезапуска.
- Она выявляет скрытые зависимости от локальных кэшей, фоновых помощников и мультиплексоров подключений.
Не путайте перезагрузку с выходом пользователя из системы. Выход тоже должен завершать полномочия агента, но перезагрузку проще тестировать: она завершает почти все обычные процессы. Если разрешение переживает её, значит кто-то намеренно сохранил его или создал помощник, живущий вне жизненного цикла агента. Оба варианта требуют проверки.
Правило действует, даже если бинарный файл агента подписан и не изменился. Подпись кода помогает определить издателя программы. Она не доказывает, что работающий процесс использует те же инструкции, переменные окружения, состояние репозитория, настройки инструментов и намерения оператора, что и прежний запуск. После перезагрузки подписанный процесс всё равно может получить опасный запрос.
То же относится к запланированной задаче. Допустим, агент подготовил миграцию базы данных, запросил подтверждение, а Mac перезапустился до её выполнения. План может сохраниться в рабочем каталоге. Право выполнить его сохраняться не должно. После запуска агент должен снова показать предполагаемую операцию, а оператор решить, остаётся ли она корректной.
Именно здесь многие проекты становятся небрежными. Они сохраняют долговечную запись со статусом «подтверждено» и называют её сеансом. Такая запись превращается в передаваемое разрешение, потому что на неё может сослаться поздний процесс. Разрешение сеанса должно быть связано с работающим экземпляром процесса и иметь короткий, чёткий срок действия. Когда процесс завершается, запись должна показывать, что авторизация закончилась, а не оставаться доступной для повторного использования.
Сохраняйте свидетельства и настройки, удаляйте действующие разрешения
Команде стоит сохранять факты, объясняющие работу, и настройки, которые безопасно использовать повторно, но удалять или делать недействительными все объекты, дающие немедленные полномочия. Разделите эти категории по хранилищам и жизненным циклам. Если смешать их, запись аудита легко случайно превратится в токен авторизации.
На практике хорошо работает такое разделение:
| Сохраняется после перезагрузки | Завершается при перезагрузке |
|---|---|
| История действий и решений о подтверждении, которую можно только дополнять | Разрешение процесса агента и идентификатор его запуска |
| Зашифрованные API- и SSH-учётные данные | Состояние разблокированного хранилища и дескрипторы расшифрованных данных |
| Описания конечных точек, разрешённый выбор учётных данных и ссылки на задачи | Токены bearer в памяти и состояние HTTP-подключений |
| Сведения о подписанном коде прошлых запусков | SSH-сокеты управления и работающие вспомогательные процессы |
| Описание ожидающей задачи с её предыдущим статусом | Диалоги подтверждения, очереди действий и право на повторную попытку |
Первый столбец поддерживает непрерывность работы. Второй не даёт этой непрерывности превратиться в тихое сохранение привилегий.
Сохраняйте статус прерванной работы, но делайте его описательным. Хорошая запись сообщает, что запуск R-1842 запросил SSH-команду, получил подтверждение и остановился до выполнения из-за перезапуска хоста. Плохая запись сообщает, что запуск R-1842 может выполнить оставшиеся действия после следующего запуска. Первая помогает оператору принять решение. Вторая принимает его заранее, не зная, каким будет поздний процесс.
К учётным данным нужен такой же точный подход. Зашифрованный API-ключ может оставаться в хранилище после перезапуска. Расшифрованная форма не должна оставаться доступной только потому, что машина быстро перезагрузилась. Блокировка хранилища создаёт явную точку, в которой человек за Mac заново подтверждает своё присутствие. Это отдельное решение, не равное разрешению процессу агента использовать конкретные данные.
Sallyport следует этому разделению: заблокированное хранилище блокирует каждое действие, а авторизация сеанса относится к новому подключившемуся процессу агента, а не к запомненному названию задачи. Это два разных решения. Если объединить их, разбирать инциденты станет намного сложнее.
Не сохраняйте подтверждение, пряча его в функциях удобства. Несколько примеров выглядят безобидно, пока не начинают работать вместе:
- Launch Agent перезапускает MCP-клиент и передаёт ему старый файл сеанса.
- SSH-клиент сохраняет сокет управления в
/tmpили каталоге кэша пользователя. - Скрипт копирует bearer-токен в файл окружения, чтобы повторные попытки работали после перезагрузки.
- Планировщик видит незавершённую задачу и выполняет её, не проверив, изменилась ли цель.
Каждая такая функция обещает сохранить прогресс. Но каждая может также сохранить полномочия, не показывая оператору, кто или что теперь ими владеет.
Вместо этого создавайте запись о прерывании. Укажите в ней ссылку на задачу, старый идентификатор запуска, дайджест запланированного списка действий, имена целей и статус вроде stopped_by_reboot. Не включайте рабочие учётные данные, cookie, токен подтверждения или инструкцию, которую может выполнить загрузчик. В следующем запуске показывайте эту запись человеку как контекст. Контекст помогает проверке, а полномочия должны появляться только после нового решения.
Перезагрузка не означает ротацию учётных данных
Перезагрузка должна завершать разрешения агента, но не должна автоматически менять API- или SSH-ключи. Эти меры отвечают на разные типы угроз. Завершение авторизации ограничивает круг тех, кто может использовать существующие данные, и срок такого использования. Ротация заменяет сами данные, когда есть подозрение на раскрытие, потерю, злоупотребление или изменение потребности в доступе.
Команды тратят время и ломают интеграции, если считают каждый перезапуск событием утечки. Но регулярная ротация также создаёт ложное чувство безопасности, если утёкшие данные меняются без выяснения, где именно они оказались. Ротация ключа не исправляет проект, в котором ключ передали агенту, записали в стенограмму или добавили в историю shell.
NIST Special Publication 800-63B разделяет управление сеансами и жизненный цикл средств аутентификации. В документе завершение сеанса и повторная аутентификация рассматриваются как отдельные меры, а замена средства аутентификации решает другую задачу. Для систем с агентами это различие особенно полезно. Завершайте действующий запуск агента при перезагрузке. Меняйте исходные учётные данные только при наличии свидетельств или требования политики.
После перезагрузки выполняйте ротацию, если сама перезагрузка стала следствием достоверного события утечки. Например, секрет попал в журнал запросов, неизвестный процесс получил доступ к окружению агента, ноутбук был потерян или бывший сотрудник сохранил копию учётных данных. В таких случаях перезагрузка вторична. Ротацию вызывает подозрение на утечку.
Долгоживущие bearer-учётные данные требуют особого внимания, потому что работают везде, где это позволяет сеть. Если агент когда-либо получает их открытое значение, шлюз уже потерял чистую границу, благодаря которой завершение разрешения после перезагрузки имеет смысл. Агент может сохранить или передать значение до перезапуска. Новое подтверждение сеанса не сможет его отозвать.
У SSH есть собственные ловушки. Приватный ключ может надёжно храниться в локальном хранилище, но уже открытое SSH-подключение продолжит выполнять удалённые каналы, пока не завершится. Мультиплексирование SSH также может оставить локальный сокет управления, которым воспользуется следующий клиент. Обычно перезагрузка очищает оба состояния, но полагаться на предположения нельзя. Проверьте реальные параметры клиентов и поведение помощников, которые использует команда.
Практическая политика выглядит так: хранить исходные учётные данные в зашифрованном виде, блокировать их при перезагрузке, завершать все разрешения и активные каналы, а затем требовать нового разрешения процесса перед повторным использованием данных через шлюз. Ротацию запускайте из-за утечки или изменений состава команды, а не из-за произвольного события загрузки.
Такая политика помогает честно разбирать инциденты. Если оператор говорит: «Мы перезагрузили машину, значит доступ сброшен», спросите, покидали ли учётные данные защищённое хранилище и поддерживает ли удалённый провайдер независимые сеансы. Перезагрузка сбрасывает локальное состояние выполнения. Она не отзывает токен у облачного провайдера, если тот не получил событие отзыва или ротации.
Разблокировка устройства, присутствие человека и подтверждение процесса не одно и то же
Для безопасного возобновления работы нужны отдельные ответы на три вопроса: может ли Mac получить доступ к защищённым учётным данным, присутствует ли ответственный человек и какой процесс просит ими воспользоваться? Если один сигнал отвечает за всё, ему придают слишком большое значение.
Разблокировка устройства контролирует доступ к локальной пользовательской среде. Она может показать, что кто-то прошёл защиту входа в Mac. На поддерживаемом оборудовании хранилище может использовать Secure Enclave и Touch ID, чтобы секреты оставались недоступными в заблокированном состоянии. Это защищает данные в покое и создаёт чёткую точку действия, но ничего конкретного не говорит о следующем процессе, который запустит фреймворк агента.
Присутствие человека существует в конкретный момент. Биометрическое подтверждение или нажатие кнопки может подтвердить его для определённого решения. Если такая проверка молча разрешает все будущие внешние действия до следующей перезагрузки, её значение становится намного шире намерения оператора. Риск растёт, когда агент-программист может работать часами, читать изменяющиеся файлы репозитория или принимать инструкции из pull request и комментариев к задачам.
Подтверждение процесса отвечает на более узкий вопрос: разрешаю ли я этой новой программе обращаться к шлюзу в рамках текущего запуска? На экране нужно показывать процесс по устойчивым признакам, например по издателю подписи кода, а не просить оператора доверять изменяемому заголовку процесса. Метка agent не является идентичностью. Её может выбрать кто угодно.
Порядок важен. Сначала хранилище должно стать доступным. Затем шлюз идентифицирует процесс. После этого оператор разрешает ему работу в рамках запрошенного запуска. Для особо важных учётных данных запрашивайте подтверждение при каждом использовании. Так у команды появляются три разных механизма с разными задачами, а не одна слишком широкая кнопка «разрешить агенту».
Не используйте имя учётной записи Mac вместо идентичности процесса. Общая локальная учётная запись может запускать несколько терминалов, инструменты сборки, редакторы и хосты агентов. Если одно подтверждение относится ко всей учётной записи, вредоносная команда shell или другой агент смогут использовать полномочия, предназначенные для иного процесса.
Решение о подтверждении также не должно делать вид, будто отвечает на вопросы о масштабе доступа. Разрешение уровня процесса говорит, кто может обращаться к шлюзу во время конкретного запуска. Оно не должно молча означать разрешение на любые учётные данные или действия навсегда. Добавьте выбор учётных данных и, когда это нужно, подтверждение каждого вызова. Тогда важные ключи не унаследуют удобство, предназначенное для менее рискованного API-вызова.
Есть соблазн решить всё сложным языком политик: условиями по времени, исходному пути, ветке, имени хоста, шаблонам команд и запросам. Для специализированных команд безопасности такие системы могут работать, но для обычных разработчиков они создают другую проблему: непредсказуемый результат. Небольшой набор понятных решений проще применять после перезагрузки и объяснять при проверке.
Возобновляйте именованный запуск, а не общее разрешение команды
Команды могут безопасно продолжать прерванную работу, если делают задачу долговечной, а авторизацию временной. Перезапущенному агенту нужен достаточный контекст, но новые полномочия он должен получать как новый процесс. Запомненное разрешение для всего проекта не подходит: оно позволяет несвязанной работе унаследовать старое решение оператора.
Дайте каждой существенной работе постоянную ссылку, понятную людям. Для задач разработки это могут быть путь к репозиторию и ветка. Для операционных задач лучше подойдут номер тикета, запрос на изменение, имя среды или идентификатор инцидента. Такая ссылка не даёт разрешения. Она помогает человеку сравнить новый запуск с ожидаемой работой.
Полезная карточка возобновления или приглашение в терминале содержит пять сведений:
- Идентификатор прошлого запуска и причину его завершения, например
stopped_by_reboot. - Ссылку на работу, ревизию репозитория или артефакт развёртывания, использованный старым запуском.
- Следующее внешнее действие нового процесса, включая назначение и метку учётных данных.
- Сведения об идентичности текущего процесса, а не только старого.
- Возможность подтвердить этот запуск, отклонить его или просмотреть прежнюю запись действий.
Не восстанавливайте всю очередь действий без проверки. Пока Mac был выключен, внешний мир мог измениться. Pull request могли принудительно обновить, DNS-запись могла указывать в другое место, развёртывание могло завершиться другим способом, а окно обслуживания закрыться. Сам факт, что агент раньше составил план, не делает поздние побочные эффекты правильными.
Представим агента, который обновлял парк систем через HTTP API. До перезапуска он успешно изменил хосты A-D, а затем подготовил вызовы для E-H. Mac перезагружается. После запуска агент находит старую очередь и пытается продолжить. Неосторожная реализация повторно использует токен и отправляет вызовы для E-H. Более безопасная читает запись о прерывании, создаёт новый запуск, запрашивает разрешение, получает актуальное состояние и показывает оставшиеся вызовы. Может оказаться, что другой оператор уже изменил F и G. Новое подтверждение дало человеку возможность это заметить.
Для повторных попыток нужна жёсткая граница. Если шлюз отклоняет вызов из-за блокировки хранилища или отсутствия разрешения у процесса, клиент должен остановиться и сообщить о заблокированном действии. Нельзя зацикливаться, открывать повторяющиеся окна, переходить к прямому сетевому доступу или подставлять учётные данные из переменной окружения. Повторная попытка после временной сетевой ошибки допустима только при сохранении действующей авторизации.
Такой подход не требует, чтобы агент забыл свою работу. Сохраняйте план, вывод команды, diff репозитория и понятную заметку о прерывании. Считайте эти материалы свидетельствами для нового решения. На проектном совещании разница кажется небольшой, но во время инцидента становится огромной: сохранённый план объясняет намерение, а унаследованное разрешение выполняет действие без нового ответственного выбора.
Для важных операций попросите перезапущенного агента заново прочитать актуальное состояние перед предложением следующего действия. Это особенно полезно для разрушительных API-вызовов и SSH-команд, результат которых зависит от текущего состояния хоста. Дополнительное чтение не даёт разрешения. Оно проверяет, описывает ли старый план всё ещё существующий мир.
Для HTTP и SSH нужны явные правила перезапуска
HTTP API и SSH требуют новой авторизации агента после перезапуска, но их скрытое состояние различается. Общее расплывчатое обещание «сбросить сеанс» легко пропустит реальные сбои. Опишите поведение сброса для каждого канала и протестируйте пути, которыми агенты действительно пользуются.
Для HTTP разделяйте учётные данные и токен доступа или cookie, выпущенные удалённым сервисом. Шлюз может хранить учётные данные локально в зашифрованном виде и подставлять их в запрос только после подтверждения. Агент должен получать ответ, а не bearer-учётные данные. После перезагрузки удаляйте локальный кэш токенов доступа, заголовки запросов, сохранённые для повторной попытки, cookie-файлы автоматизации и состояние открытых подключений.
Провайдер может сохранить удалённый сеанс после перезапуска, если клиент позднее предъявит действующий refresh-токен или cookie. Поэтому агент не должен владеть такими объектами. Иначе он сможет обращаться к провайдеру напрямую и обходить локальные правила перезапуска. Подставляйте учётные данные и обновляйте токены на стороне действий, где новый авторизованный процесс вызывает эти операции.
Для SSH завершайте подключения клиентов и проверяйте мультиплексирование. OpenSSH может повторно использовать главное подключение через ControlMaster и ControlPath. Для интерактивных пользователей это удобно, но становится непонятно, какой запуск владеет удалённым сеансом. Шлюзу агента нужен stateless-путь выполнения или жизненный цикл, который корректно завершает помощников вместе с запуском агента. Не думайте, что удалённая команда остановилась только потому, что закрылась локальная панель.
Для обоих каналов используйте воспроизводимую проверку перезагрузки:
- Запустите агента и подтвердите безвредный HTTP-запрос или SSH-команду к непроизводственной цели.
- Запишите идентификатор запуска, идентичность процесса, предполагаемый запрос и время последнего завершённого действия.
- Перезагрузите Mac до того, как агент выполнит второе заранее подготовленное действие.
- Снова запустите хост агента, не меняя файлов задачи, и попросите его выполнить второе действие.
- Убедитесь, что первая попытка отклоняется, пока хранилище не станет доступным и новый процесс не получит разрешение. Затем проверьте запись и убедитесь, что второе действие относится к другому идентификатору запуска.
Для шлюза с консольной проверкой аудита запустите её до и после теста:
sp audit verify
Команда должна сообщить, проходит ли проверку зашифрованная цепочка аудита, не требуя разблокировать хранилище. Не пишите автоматизацию, которая разбирает выдуманный текст успеха из команды для человека. Проверяйте документированный код завершения и сохраняйте вывод вместе с записью теста. Sallyport строит журналы сеансов и отдельных вызовов из зашифрованного аудита с хешированной цепочкой, в который нельзя записывать задним числом, поэтому проверка даёт оператору офлайн-контроль целостности после перезапуска.
Тест должен проверять и плохой путь. Попробуйте старую переменную окружения, кэшированный профиль HTTP-клиента, SSH-сокет управления и второй локальный процесс агента. Если любой из них достигает цели без нового разрешения, граница перезагрузки декоративна. Исправьте обход, а не добавляйте операторам ещё одно напоминание.
Аудит должен объяснять и старый, и новый запуск
Аудит после перезагрузки должен показывать, где остановился один запуск и где начался другой. Разделение должно быть заметно, даже если тот же пользователь, репозиторий и фреймворк агента продолжают ту же задачу. Если записи объединяют события в один длинный сеанс, они не ответят, кто разрешил действие после перезагрузки.
Явно сохраняйте конечное состояние старого запуска. Полезные значения: нормальное завершение, отказ из-за блокировки хранилища, отказ в ожидании подтверждения, выключение хоста, сетевая ошибка и отзыв оператором. Не перезаписывайте это состояние при запуске нового процесса. Запись о перезапуске должна ссылаться на предыдущий запуск, а не сливаться с ним.
Для нового запуска записывайте сведения об идентичности процесса, предъявленные при авторизации, время подтверждения и первый внешний вызов. Первый вызов важен, потому что подтверждение не всегда означает использование. Оператор может разрешить запуск, который завершится до действия. Разделение разрешения и выполнения не позволяет при проверке утверждать, что действие произошло, если оператор лишь допустил такую возможность.
Отдельные записи вызовов должны сохранять достаточный контекст для восстановления действия без секрета. Для HTTP фиксируйте назначение, метод, метку учётных данных, класс результата и обезличенное представление метаданных запроса. Для SSH записывайте назначение, метку учётной записи, команду или одобренный дайджест, код завершения и метаданные результата. Способ хранения вывода команды зависит от его чувствительности, но сам факт действия терять нельзя.
Связывание хешами облегчает обнаружение последующих изменений, но не делает вмешательство невозможным. Оно полезно, потому что каждая запись фиксирует предыдущие, а офлайн-проверка может выявить разрыв последовательности. Но оно не доказывает разумность подтверждённого действия и не останавливает человека, имеющего право его выполнить. Команде всё равно нужны проверка и дисциплинированные границы подтверждений.
Держите проверку аудита вне обычного пути агента. Если агент может переписывать или заверять собственные свидетельства, возникает замкнутое утверждение о доверии. Операторы должны иметь возможность запускать проверку независимо, в том числе при заблокированном хранилище. Полезно также проверить, что произойдёт при изменении записи в копии данных аудита, чтобы ожидаемая ошибка была понятна заранее.
Мгновенный отзыв тоже должен фиксировать область действия. Если оператор отзывает сеанс после перезапуска, журнал должен показывать, какой запуск потерял полномочия и какие вызовы после этого были отклонены. Избегайте общей формулировки вроде «доступ агента отключён», если это не произошло буквально. Точные записи не позволяют команде гадать, не сохранил ли отдельный процесс старое разрешение.
Определите правила завершения до того, как их выберет автоматизация
Безопасную политику перезагрузки каждый разработчик должен уметь сформулировать коротко и правильно: перезапуск блокирует защищённые материалы, завершает все разрешения процессов агентов и сохраняет свидетельства вместе с неисполняемым контекстом задачи. Новый процесс получает новое проверенное разрешение. Учётные данные меняются только при необходимости из-за утечки или правил жизненного цикла.
Запишите эту политику в операционных терминах и назначьте ответственного за каждое исключение. Если команда утверждает, что ей нужна непрерывная автоматизация во время перезагрузок, спросите, какое действие продолжится, какая учётная запись будет им владеть, как оно будет контролироваться и почему граница подтверждения человека неприемлема. Возможно, речь идёт о нагрузке сервисной учётной записи, а не об интерактивном агенте-программисте. Создайте для неё отдельный проект, не превращайте незаметно сеанс агента в серверные полномочия.
Заранее определите порядок действий на первый рабочий день после неожиданного перезапуска. Оператор проверяет целостность аудита, выясняет последний завершённый вызов старого запуска, при необходимости разблокирует защищённые материалы, запускает новый процесс агента, проверяет возобновлённую задачу и подтверждает только ту работу, которая всё ещё соответствует текущей ситуации. Это небольшая пауза по сравнению с отменой действия, выполненного по разрешению, о сохранении которого никто не знал.
Не обещайте, что сама логика перезапуска сделает автономную работу безопасной. Она лишь создаёт чистую точку принятия решения. Качество решения по-прежнему зависит от ясной идентичности процесса, узкого использования учётных данных, понятных описаний действий и записей, которые позже сможет проверить другой человек.
Когда следующая перезагрузка прервёт настоящую задачу, не поддавайтесь желанию добавить переключатель «продолжить автоматически». Сохраните план. Сохраните свидетельства. Пусть новый процесс снова попросит разрешение, прежде чем воспользоваться полномочиями.
Вопросы и ответы
Нужно ли снова подтверждать работу AI-агента после перезагрузки Mac?
Да. Перезагрузка должна завершать все действующие разрешения, которыми владеет процесс агента. Процесс завершился, его память исчезла, а привязанное к этому запуску подтверждение больше не связано с ответственным исполнителем. Сохраняйте аудит и определения подключений, но требуйте нового разрешения для нового процесса.
Какие данные авторизации безопасно сохранять после перезагрузки?
Сохраняйте историю аудита, которую можно только дополнять, записи об идентичности для объяснения прошлых действий и зашифрованные учётные данные, защищённые обычной блокировкой хранилища. Не сохраняйте действующие разрешения процесса, секреты сеанса в памяти, состояние разблокированного хранилища или общий флаг «продолжить предыдущую работу». Это факты текущего запуска, а не долговечные записи.
Нужно ли менять API- и SSH-ключи после каждой перезагрузки?
Перезагрузка сама по себе не доказывает утечку API-токена или SSH-учётных данных, поэтому автоматически менять их не нужно. Выполняйте ротацию, если данные могли утечь, если человек с доступом сменил роль или если этого требуют правила срока действия провайдера. Завершение авторизации и ротация учётных данных решают разные задачи.
Достаточно ли разблокировать Mac, чтобы агент продолжил работу?
Нет. Разблокированный экран лишь показывает, что кто-то получил доступ к пользовательскому сеансу Mac. Он не идентифицирует и не подтверждает конкретный процесс агента. Требуйте отдельного подтверждения с указанием идентичности процесса и ограниченным сроком действия перед тем, как процесс сможет обращаться наружу.
Как безопасно продолжить прерванную задачу агента?
Используйте постоянный идентификатор рабочей задачи, например репозиторий, ветку, тикет, запрос на изменение или целевую среду. Оператор должен проверить возобновлённый план, подтвердить новый процесс и предоставить ему минимально необходимый набор действий. Не восстанавливайте общее разрешение только потому, что до перезагрузки агент работал успешно.
Что делать, если после перезагрузки агент повторяет API-вызов?
По умолчанию вызов нужно отклонять, пока человек не подтвердит новый запуск агента. Если для учётных данных требуется подтверждение каждого использования, шлюз должен снова запросить его для этого вызова. Обычный цикл повторных попыток должен воспринимать отказ как сигнал остановиться, а не как повод продолжать запросы или обходить защиту.
Может ли подпись кода заменить подтверждение сеанса агента?
Нет. Подписанный бинарный файл показывает, кто подписал исполняемую программу, а действующая авторизация подтверждает, что человек разрешил этому конкретному процессу работать ограниченное время. Оба сигнала полезны, но один не заменяет другой.
Как не дать кэшированным учётным данным обойти правила перезагрузки?
SSH-мультиплексоры, кэшированные OAuth-токены доступа и долгоживущие bearer-токены часто размывают эту границу. Во время теста перезагрузки завершите унаследованные вспомогательные процессы, отключите или очистите клиентские кэши учётных данных, где это возможно, и убедитесь, что агент не может обратиться к цели без нового разрешения шлюза.
Что должен показывать аудит после возобновления работы агента?
Записывайте время перезагрузки, идентификатор предыдущего запуска, идентичность процесса после перезапуска, все подтверждения, все отклонённые вызовы и первый успешный внешний вызов. Храните эти сведения в записи, которую можно дополнять и независимо проверять. Одной переписки недостаточно, чтобы доказать, что именно агент отправил.
Безопасно ли автоматически продолжать автономную работу после перезапуска?
Это безопасно только если возобновлённая работа считается новым запуском с новым подтверждением и узкой областью действия. Предыдущий план может помочь оператору, но не должен незаметно переносить полномочия на вызовы production API, использование SSH или расходование денег. Удобство не оправдывает сохранение действующего разрешения после перезагрузки.