공유 코딩 에이전트의 **감사 로그(audit log)**는 머신 소유자가 보관하고 내보낼 수 있는, 요청당 한 줄, 승인당 한 줄로 구성된 추가 전용(append-only) 기록입니다. 이 로그는 사후에 누가 에이전트에게 무엇을 요청했는지, 누가 승인했는지, 실제로 무엇이 실행되었는지, 비용이 얼마나 들었는지를 답해 줍니다. 에이전트를 소유자 본인만 사용한다면 런타임 자체의 트랜스크립트로도 충분합니다. 하지만 다른 사람이 요청을 보낼 수 있게 되는 순간, 그것만으로는 부족합니다.
이 글에서는 독자에게 필요한 순서대로 필드를 정리하고, 로그에서 절대적으로 배제해야 할 항목들을 다룹니다.
요청 라인
모든 요청은 최종 상태(terminal state)에 도달할 때 정확히 한 줄의 로그를 생성합니다.
승인 라인
승인은 하나의 '결정'이며, 결정은 실행 기록과는 읽는 대상이 다르기 때문에 별도의 라인으로 기록됩니다.
Request lines and approval lines, with an approved push in amber and an expired deletion in red.
로그에 절대 포함해서는 안 되는 것
- 비밀 정보(Secrets). 자격 증명 승인 로그에는 키 자체가 아니라 키에 접근했다는 사실만 기록합니다.
- 파일 내용. diff는 경로와 변경 줄 수로만 기록합니다. 실제 변경 사항은 해당 리포지토리의 자체 접근 제어가 적용되는 리포지토리 안에 있습니다.
- 전체 명령 출력. 실패 원인을 파악하는 데는 tail(마지막 출력 일부)만으로도 충분합니다. 전체 로그에는 어떤 데이터든 들어갈 수 있습니다.
- 다른 룸의 데이터. 각 룸의 로그는 해당 룸으로 범위가 한정됩니다. 소유자는 여러 룸에 걸친 로그를 볼 수 있지만, 멤버는 자신이 속한 룸만 볼 수 있습니다.
필드를 넘어 보장해야 할 속성들
추가 전용(Append-only). 소유자를 포함해 그 누구도 로그를 수정할 수 없습니다. 수정 사항은 새로운 라인으로 기록됩니다.
소유자 보관(Owner-held). 작업을 실행한 머신의 소유자가 기록을 보관하고 내보낼 수 있습니다. 요청자는 룸 안에서 자신의 라인을 볼 수 있습니다.
권한 철회 시 완전성 보장. 권한이나 머신을 Revoke하더라도 대기열에 있던 작업은 취소되고 실행 중인 작업은 정상적으로 완료되므로, “무언가 실행되었지만 감시를 중단했다”는 식의 기록 공백이 결코 생기지 않습니다.
소유자 작업 포함. 소유자는 자신의 에이전트에서 승인 절차를 거치지 않지만, 소유자의 요청 또한 동일한 방식으로 기록됩니다. 외부 사용자의 작업만 기록하는 로그는 위험의 절반만 기록하는 것과 같습니다.
로그 읽기
가장 자주 나오는 세 가지 질문은 위의 필드들을 필터링해 한 번에 답할 수 있습니다.
- “누가 푸시했지?” 승인 라인에서 rule = push로 필터링한 뒤, who asked와 who decided를 확인합니다.
- “이 요청은 왜 한 시간이나 걸렸지?” 생성 시각(created)과 시작 시각(started)을 비교해 봅니다. 승인 대기 시간이 원인인 경우가 대부분입니다.
- “이번 달에 내 에이전트를 빌려주는 데 든 비용은 얼마지?” 요청 라인에서 who asked가 소유자가 아닌 항목들의 usage를 합산합니다.
자주 묻는 질문 (FAQ)
룸 타임라인이 곧 감사 로그인가요? 타임라인은 단일 실행에 대한 사람이 읽기 쉬운 상세한 기록입니다. 감사 로그는 필터링과 내보내기에 최적화된, 여러 실행에 걸친 이벤트당 한 줄짜리 요약본입니다. muti는 두 가지를 모두 유지하며, 감사 로그는 daemon이 업로드하는 동일한 이벤트에서 파생됩니다. 자세한 내용은 daemon이 업로드하는 데이터를 참고하세요.
로그는 얼마나 오래 보관되나요? 요청 및 승인 라인은 룸이 유지되는 동안 보관됩니다. 룸을 삭제하면 소프트 삭제(soft-delete) 처리되며, 소유자를 위한 기록은 유지됩니다.
요청자가 다른 사람의 라인을 볼 수 있나요? 해당 룸에 있는 모든 사람의 요청이 표시되는 룸 타임라인은 볼 수 있습니다. 로그 내보내기 권한은 소유자에게만 있습니다.
소유자의 요청도 로그에 기록되려면 승인이 필요한가요? 아닙니다. 소유자의 실행은 별도의 승인 없이 rule = owner로 기록됩니다.
로그는 “나중에 권한을 철회하면 된다”라는 말을 실질적인 약속으로 만들어 주는 장치입니다. 에이전트에 룸을 만들어 보세요. 감사 로그가 함께 제공됩니다.
게시일