> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nora.my/llms.txt
> Use this file to discover all available pages before exploring further.

# 감사

> 중요한 모든 액션의 기록, 그리고 SIEM으로 보내기

중요한 액션은 모두 기록됩니다. 감사 트레일이 누가, 언제, 왜 무엇을 했는지 아는 방법입니다. 팀 리뷰, 컴플라이언스, 인시던트 대응에 씁니다.

## 무엇이 감사되나

* **배포와 롤백** Flow와 파이프라인 버전.
* **승인** 행위자·이유·타겟과 함께한 결정.
* **접근 변경** 초대, 역할 변경, 멤버 제거, Flow 별 접근 부여.
* **토큰 이벤트** 발급, 거두기, 첫 사용.
* **시크릿 로테이션** 커넥터, 도구 헤더, 트리거 시크릿. 값은 절대 기록 안 합니다.
* **Provider 키 이벤트** 설정, 삭제.
* **정책 변경** 워크스페이스 정책 편집.
* **개선 배포** 개선 플로우의 출시.
* **데이터 액션** 대량 supersede, 삭제.
* **결제 변경** 플랜 변경, 세금 편집, overage cap 조정.

트레이스 페이로드(프롬프트, 도구 응답)는 감사 항목이 아닙니다. 자체 보존 시스템을 씁니다. 감사는 구조·접근·설정 변경을 다룹니다.

## 감사 뷰

**Settings → Security → Audit** 입니다. 최신순 목록입니다.

* **Actor** 이름 + 이메일(자동화면 "워크스페이스 토큰: X").
* **Action** publish / rollback 등.
* **Target** Flow, 블록, 시크릿 이름, 멤버.
* **Details** 액션별 필드(릴리스 노트, 롤백 이유, 역할 델타).
* **Source** UI / CLI / API / 웹훅.
* **IP / user agent** 액션을 시작한 곳.
* **서명** 모든 항목에 서명이 붙어, 변조를 잡아냅니다.

행위자, 액션 종류, 날짜 범위로 거릅니다.

## 내보내기

**Settings → Security → Audit → Export** 입니다.

* **CSV** 평평한 테이블.
* **JSON** 항목마다 전체 세부.
* **PDF** 인쇄용, 한 줄에 한 항목.

내보낸 파일에 워크스페이스 수준 서명이 붙어, 외부 감사자가 진짜인지 확인합니다.

특정 기간을 한꺼번에 내보내려면 이렇게요.

```bash theme={null}
# CLI (API로 감사 내보내기)
curl -H "Authorization: Bearer $NORA_TOKEN" \
     "https://api.platform.nora.my/v1/audit?from=2026-07-01&to=2026-07-31" \
     > audit-jul-2026.jsonl
```

## 보존

* **Free** 30일.
* **Team** 1년.
* **Enterprise** 설정 가능(최대 7년 또는 무기한).

오래된 항목은 보관되어(내보내기로는 조회됩니다) 기본 뷰에서 숨습니다.

보존 설정은 **Settings → Security → Audit → Retention** 입니다. Owner만 합니다.

## 불변성

감사 항목은 지우거나 고치거나 순서를 바꿀 수 없습니다. 항목이 틀렸으면 바로잡는 항목을 더합니다. 원본은 남습니다. 그래야 감사 트레일을 믿을 수 있습니다.

Owner 라도 감사 항목을 못 지웁니다. 저장 층에서 강제됩니다.

## SIEM 포워딩

보안 운영 센터가 있는 조직은 감사 이벤트를 SIEM으로 보냅니다. **Settings → Security → Audit → Forwarding** 입니다.

* **Slack / Discord 웹훅** 중요한 이벤트(배포, 롤백, 시크릿 로테이션) 알림.
* **PagerDuty** 롤백이나 자동 롤백 트리거에 페이지.
* **Splunk / Datadog / SumoLogic** HTTPS로 JSON 스트림.
* **일반 웹훅** 모든 감사 이벤트를 여러분 엔드포인트로 POST.

목적지마다 필터를 정합니다. 예를 들어 publish와 rollback만 Slack으로, 모든 걸 Splunk 로요.

### 웹훅 페이로드 모양

```json theme={null}
{
  "id": "audit_abc",
  "timestamp": "2026-07-31T09:12:34Z",
  "workspace_id": "acme",
  "actor": {"kind": "user", "id": "u_alice", "email": "alice@acme.com"},
  "action": "flows.publish",
  "target": {"flow": "support-agent", "version": 42},
  "details": {"summary": "refund tightening"},
  "source": "cli",
  "ip": "10.0.0.42",
  "signature": "sha256:..."
}
```

## 서명 확인

항목마다 서명이 붙습니다. 워크스페이스의 공개 감사 키(**Settings → Security → Audit → Verification key**)로 확인합니다.

```python theme={null}
import hmac, hashlib
signature = hmac.new(key, canonical_json(entry).encode(), hashlib.sha256).hexdigest()
assert signature == entry['signature']
```

새거나 변조된 감사 로그가 확인에 실패하도록 합니다.

## 컴플라이언스 모드

**Compliance mode**를 켜면(Flow 별, Settings → Access) 감사가 조여집니다.

* 모든 액션에 이유가 필요합니다(선택이 아닙니다).
* 감사 보존이 컴플라이언스가 요구하는 기간으로 강제됩니다.
* 특정 파괴적 액션에 multi-sign 승인이 필요합니다(감사가 두 사인자를 다 기록합니다).
* 데이터 내보내기에 명시적 승인 흐름이 필요합니다.

컴플라이언스 모드는 Flow 별 한 방향 전환입니다. 끄려면 Owner와 서면 정당화가 필요합니다.

## 감사로 디버깅

감사 뷰가 답하는 흔한 물음은 이렇습니다.

* "이 Flow를 마지막으로 누가 배포했나?" action=`flows.publish`, target=`<flow>`로 거릅니다.
* "왜 롤백했나?" action=`flows.rollback`으로 거르고 항목을 눌러 이유 필드를 봅니다.
* "이 시크릿을 언제 돌렸나?" action=`secrets.rotate`로 거릅니다.
* "지난주 이 Flow 접근을 누가 손댔나?" target=`<flow>`, action prefix=`access.`로 거릅니다.

## 관련

* [감사 트레일(Reliable)](/ko/reliable/versions/audit) 같은 감사 화면을 버전/배포 각도에서 봅니다.
* [접근·정책](/ko/settings/workspace/access) 컴플라이언스 모드 토글이 여기 있습니다.
* [`nora approvals`](/ko/cli/approvals) 승인 결정이 감사됩니다.
