Журнал аудита для общего coding agent — это запись только для добавления (append-only) с одной строкой на каждый запрос и одной строкой на каждое согласование. Он хранится у владельца машины и доступен ему для экспорта. Постфактум он отвечает на вопросы: кто попросил агента сделать действие, кто разрешил его, что именно выполнилось и сколько это стоило. Если агентом пользуется только владелец, достаточно собственного транскрипта runtime. В тот момент, когда второй человек получает возможность отправлять запросы, этого уже мало.
В этом посте перечислены поля в том порядке, в каком они нужны читателю, а затем то, чему в журнале не место.
Строка запроса
Каждый запрос формирует ровно одну строку, когда переходит в конечное состояние.
Строка согласования
Согласования выносятся в отдельные строки, потому что это решения, а у решений другие читатели, чем у запусков.
Строки запросов и согласований: подтвержденный push выделен янтарным, а истекшее удаление — красным.
Чего не должно быть в журнале
- Секреты. Согласование доступа к учетным данным фиксирует обращение к ключу, а не сам ключ.
- Содержимое файлов. Diffs — это пути и количество строк. Само изменение находится в репозитории, где действуют его собственные правила контроля доступа.
- Полный вывод команд. Хвоста вывода достаточно, чтобы понять причину сбоя. Полные логи могут содержать что угодно.
- Другие комнаты. Журнал каждой комнаты ограничен ею самой. Владелец видит происходящее по всем комнатам, участники — только свою.
Свойства, а не только поля
Только добавление (append-only). Никто не может редактировать журнал, включая владельца. Исправления вносятся новыми строками.
Хранится у владельца. Человек, на чьей машине выполнялась работа, владеет записью и может ее экспортировать. Авторы запросов видят свои строки в комнате.
Полнота при отзыве доступа. Отзыв разрешения или отключение машины отменяет задачи в очереди и дает завершиться текущим, поэтому в журнале не возникает пробелов вида «что-то запустилось, но мы перестали следить».
Учет действий владельца. Владелец не проходит согласования для своего агента, но его запросы логируются аналогично. Журнал, фиксирующий только внешних пользователей, закрывает лишь половину рисков.
Чтение журнала
Чаще всего возникают три вопроса, и поля выше отвечают на каждый одним фильтром.
- «Кто запушил это?» Отфильтруйте строки согласования по правилу = push, прочитайте поля кто запросил и кто решил.
- «Почему этот запрос выполнялся час?» Сравните время создания и запуска; ожидание согласования обычно и есть ответ.
- «Сколько стоило предоставление агента в этом месяце?» Просуммируйте использование в строках запросов, где кто запросил — не владелец.
Часто задаваемые вопросы
Является ли timeline комнаты журналом аудита? Timeline — это подробная, понятная человеку история одного запуска. Журнал аудита — это сводка по запускам по принципу «одна строка на событие», предназначенная для фильтрации и экспорта. muti сохраняет и то, и другое; журнал строится на основе тех же событий, которые выгружает daemon. См. что выгружает daemon.
Как долго он хранится? Строки запросов и согласований хранятся в течение всего срока жизни комнаты. Удаление комнаты является мягким (soft delete); запись сохраняется для владельца.
Может ли автор запроса видеть строки других участников? Они видят timeline комнаты, куда входят запросы всех участников этой комнаты. Экспорт доступен только владельцу.
Нужно ли согласование для запросов владельца, чтобы они попали в журнал? Нет. Запуски владельца логируются без согласований, со значением правило = owner.
Журнал — это то, что превращает фразу «вы сможете отозвать доступ позже» в реальное обещание. Создайте комнату для своего агента — журнал уже включен.
Опубликовано