# 감사 로그

워크스페이스마다 감사 로그가 하나 있습니다. Mocco는 누군가 거버넌스 대상 결정이나 변경을 할 때마다 항목을 추가하고, 이후 항목을 수정하거나 삭제하지 않습니다. 감사 로그는 항상 켜져 있어서 따로 설정할 것이 없습니다.

## 기록되는 내용

항목 이름은 `area.event` 형식입니다. 다음을 다룹니다.

- **배포 거버넌스**: 실행 시작(`run.triggered`), 게이트 승인 또는 거부(`gate.resumed`, `gate.rejected`), 파이프라인 단계에 자격 증명을 건넸거나 거부한 일(`credential.issued`, `credential.denied`). 잘못된 실행 토큰으로 온 자격 증명 요청은 항목 없이 거부합니다. 실행 ID를 본 사람이라면 누구든 보낼 수 있는 요청이기 때문입니다.
- 파이프라인 밖의 **승인**. 보호된 플래그 변경이나 OTA 승격 같은 것으로, 요청, 승인, 거부, 새 요청으로 대체, 만료가 기록됩니다(`approval.*`).
- **OTA와 강제 업데이트**: 버전 정책 변경, 배포 토큰 추가·교체·삭제, 호스팅 OTA 앱, 인증서, 채널, 신뢰 정책, 업로드, 채널 변경(`ota.*`).
- **기능 플래그**: 환경과 플래그 생성, 변경 적용·제안·거부·충돌·철회·만료, 보호 설정 변경, 킬 스위치와 복원, 클라이언트 공개 여부, 무시한 오래된 플래그 경고(`flag.*`).
- **메신저**: 메신저 설정, ID 시크릿 교체, 카테고리와 게스트 설정 변경, 연락처 차단 또는 삭제(`messenger.*`).
- **API 키**: 생성과 폐기(`apikey.created`, `apikey.revoked`).

각 항목에는 누가, 무엇에 대해, 언제 했는지와 함께 변경의 세부 내용이 기록됩니다. 예를 들어 승인 항목에는 승인자와 역할이 들어갑니다.

## Audit 페이지

워크스페이스의 사이드 내비게이션에서 **Audit**을 엽니다. 워크스페이스 멤버라면 누구나 읽을 수 있습니다. 표에는 항목이 오래된 순서로 나열되고, 기록된 순서대로 번호가 붙습니다.

- **#**: 로그에서 항목의 위치입니다.
- **Action**: 일어난 일입니다. 예: `apikey.revoked`.
- **Actor**: 일을 한 사람의 짧은 ID입니다. 파이프라인의 자격 증명 요청에 응답하는 것처럼 Mocco가 스스로 한 일이면 `system`입니다.
- **Subject**: 항목이 다루는 대상과 짧은 ID입니다. 예: `api_key 4827fb58`.
- **Time**: 일어난 시각이며, 브라우저의 시간대로 표시됩니다.

![Audit 페이지: 번호가 붙은 항목들과 action, actor, subject, time](https://fi-workers-mocco-storage.s3.ap-northeast-2.amazonaws.com/pub/w/93e11fe8-0494-4e3d-b1cb-fe4dffd3ee7e/p/d64785b8-9a23-4fa1-a81d-550af30e203a/helpcenter/8f80e44c-e694-4fcf-8929-85dd2d1eb2a5/audit.png)

표는 몇 초마다 저절로 새로 고쳐집니다. 아직 필터와 검색은 없습니다. 항목을 찾으려면 브라우저에서 페이지 안의 action 이름이나 ID를 검색하세요.

## 변경되지 않았음을 증명하기

각 항목에는 자신의 내용과 바로 앞 항목의 해시가 들어 있어서 로그가 하나의 체인을 이룹니다. 과거 항목을 바꾸거나 삭제하면 그 뒤의 모든 해시가 깨집니다.

페이지를 열면 Mocco가 체인 전체를 다시 검사하고, 그 결과를 검사 시각과 함께 **Audit** 제목 옆에 보여 줍니다. **Chain verified**는 모든 항목이 여전히 일치한다는 뜻입니다. **Chain broken at #N**은 N번 항목이나 그 앞 항목과의 연결이 기록된 내용과 더 이상 맞지 않는다는 뜻입니다. 저장된 로그가 작성된 뒤에 변조되었고, 그 항목부터는 증거로 신뢰할 수 없습니다. 검사는 로그 전체를 읽기 때문에 표가 새로 고쳐지는 동안에는 저절로 반복되지 않습니다. **Re-verify**를 선택하면 다시 실행합니다.

번호에 빈 곳이 있는 것은 정상입니다. 취소된 쓰기가 번호를 썼을 수 있습니다. 삭제된 항목은 빈 번호가 아니라 끊어진 연결로 나타납니다. 체인이 보여 줄 수 없는 변경이 하나 있는데, 가장 최근 항목들을 삭제하는 경우입니다. 남은 로그가 여전히 올바른 더 짧은 체인이기 때문입니다. 이를 잡아낼 수 있는 외부 키 서명은 계획 중입니다.
