AN-03 L1 적합성 수준: Authority 그룹: 작업

Flight Recorder 플라이트 레코더

실행마다 하나, 해시로 연결되며 읽은 것까지 담는 기록.

정의

Flight Recorder는 실행마다 남기는, 추가만 가능하고 해시로 연결된 기록입니다. 실행이 읽은 것(읽기 매니페스트), 쓴 것, 허용되거나 거부된 것, 누가 무엇을 승인했는지를 담습니다. 데이터 곁에 놓여 하나의 질문에 답합니다. “무엇이 이 변경에 영향을 줬을 수 있는가?”

v0.2 명세 초안 최종 수정

해결하려는 문제

사후 분석을 하려 해도 로그는 흩어져 있고, “읽은 것”과 그 뒤에 이어진 동작 사이의 연결이 없으며, 로그는 같은 관리자나 심지어 같은 에이전트가 고칠 수 있습니다.

더 근본적으로는, 병합이나 메모리가 오염되었다고 의심될 때 “그 실행은 무엇을 읽었는가?”에 답할 방법이 없습니다.

동작 방식

  • 두 종류의 내용. 이벤트는 하나씩 기록합니다. 커밋, 리스의 발급과 취소, 게이트 요청과 결정, 정책 거부, 파생, 망각. 읽기 매니페스트는 실행 단위로 모아 둡니다. 어떤 path@commit, 어떤 범위, 어떤 콘텐츠 해시를 읽었는가. 읽기 호출마다 기록하지는 않으며 내용은 절대 기록하지 않습니다.
  • 모든 커밋은 출처 메타데이터를 담습니다. principal, on_behalf_of, run, lease, purpose, 그리고 읽기 매니페스트에 대한 참조.
  • 해시 체인(하루 단위). 선택적으로 서명과 외부 앵커링(두 번째 노드, 오브젝트 잠금이 있는 버킷)을 더합니다. 목표는 “변조가 불가능하다”가 아니라 “변조를 탐지할 수 있다”입니다.
  • 내보내기: OpenTelemetry GenAI 스팬, JSON Lines, 또는 SIEM으로.
  • 프라이버시: 기본적으로 메타데이터만 기록하고 내용은 기록하지 않습니다. 기록의 보존은 내용의 삭제와 독립적이며, 기록 자체에도 접근 통제가 걸립니다.
  • **explain(commit):** 그 커밋 뒤에 있는 실행, 리스, 게이트 결정, 읽기 매니페스트, 입력을 반환합니다.
  • 먼저 기록하고, 그다음에 실행합니다. 중대한 작업은 먼저 의도 기록을 남겨야 합니다.

작게 시작하기

  • 추가만 가능한 SQLite 테이블과 일일 해시.
  • 모든 커밋 메시지에 Run:과 Lease: 같은 Git 트레일러.
  • 이미 쓰고 있는 관측성 스택으로 OpenTelemetry 스팬을 내보냅니다.

인터페이스 스케치

설명을 위한 예시입니다. 필드 이름은 명세 v0.3 이전에 바뀔 수 있습니다.

record.json
{
  "seq": 18211,
  "time": "2026-11-12T09:14:22Z",
  "kind": "commit",
  "run": "run_91ab",
  "principal": "agt_cleo",
  "on_behalf_of": "usr_wei",
  "lease": "lse_7Qk3",
  "purpose": "Draft the Q4 release notes",
  "subject": { "path": "/shared/launch/notes.md", "commit": "91ce3a7" },
  "read_manifest": "rm_5d2e",
  "decision": { "effect": "allow", "rule": "r-17" },
  "taint": { "external": true, "sensitivity": "private" },
  "prev_hash": "sha256:b3a0..."
}

명세가 요구하는 것

  • 중대한 작업은 효력이 생기기 전에 의도 기록을 써야 하며, 쓰기에 실패하면 작업도 실패해야 합니다.
  • 모든 실행에는 읽은 경로, 커밋, 범위(내용은 제외)를 기록한 읽기 매니페스트가 있어야 합니다.
  • 기록은 해시로 연결되어야 하며, 공개된 명령으로 검증할 수 있어야 합니다.
  • explain(commit)은 실행, 리스, 게이트 결정, 읽기 매니페스트에 대한 참조를 반환해야 합니다.
  • 기록의 보존은 내용의 삭제와 독립적이어야 합니다.

빌려 온 것과 새로운 것

아래에 나오는 것은 모두 이미 자리 잡은 부품입니다. 새로운 것은 읽기 매니페스트입니다. “읽기”를 추적할 수 있는 입력의 집합으로 만들어, “오염된 병합”과 “오염된 메모리”를 사후에 조사할 수 있게 합니다.

솔직한 한계

  • 외부 앵커링이 없으면 root 권한을 가진 관리자는 여전히 로그를 파괴할 수 있습니다.
  • 기록 자체에도 민감한 메타데이터가 있으므로 통제해야 합니다.
  • 읽기 매니페스트의 입도는 저장 비용과 추적 가능성 사이의 절충입니다.

열린 질문

  • 높은 처리량에서 읽기 매니페스트의 저장 비용을 어떻게 통제하는가?
  • 여러 노드의 기록을 어떻게 병합하고 검증하는가?

자주 묻는 질문

에이전트가 읽은 내용도 기록하나요?

기본적으로는 기록하지 않습니다. 기록에는 경로, 커밋, 범위, 콘텐츠 해시가 들어갑니다. 민감한 내용을 로그에 복사하지 않고도 원본 데이터를 가리키기에 충분합니다. 내용은 Store에 남아 리스와 라벨로 보호됩니다.

여기서 “변조 증거(tamper-evident)”란 무슨 뜻인가요?

변조를 탐지할 수 있다는 것만 약속합니다. 기록은 해시로 연결되어 있어 하나를 바꾸면 체인 검증이 깨집니다. 외부 앵커링(두 번째 노드나 오브젝트 잠금이 있는 버킷)이 있으면 root 권한을 가진 관리자에게도 견딥니다. 앵커링이 없으면 관리자는 여전히 로그 전체를 파괴할 수 있습니다.

왜 읽기를 기록하나요?

위험은 흔히 읽기에서 오기 때문입니다. 웹 페이지를 읽은 세션이 그 뒤에 오염된 노트를 쓸 수 있습니다. 읽기 매니페스트가 있으면 나중에 “무엇이 이 변경에 영향을 줬는가?”에 답할 수 있습니다.

이 페이지 인용하기

사람, 검색 엔진, 에이전트를 위한 고정 주소와 권장 인용 형식입니다.

권장 인용 형식
Agent NAS project. “Flight Recorder (플라이트 레코더).” agentnas.com, 2026-11-11. https://agentnas.com/ko/concepts/flight-recorder/