Skip to content

Phase 3 — Governance (LogPath, PDPA, Purge) 구현 요약

Ref: implementation plan §5.

구현된 항목

기획서 항목구현
P3-2 trace_id 주입Control Plane에서 provision 생성 시 trace_id 생성·전달, trace_events 기록
P3-3 trace_events region 등D1 trace_events (0004)에 region, pulumi_stack, gh_run_id 컬럼 존재; Control Plane에서 region·payload 기록
P3-4 Audit Log 정책audit_logs에만 INSERT, DELETE 없음. Control Plane·Purge Worker에서 tenant_created, subscription_deleted, hard_purge_* 기록
P3-6 Soft Deletecustomer.subscription.deleted → tenants_master.status = ‘Pending_Deletion’, audit_log 기록
P3-7 Hard Purge Jobworkers/purge-job: Cron 30일 경과 후 §5.8 순서(Hetzner workflow_dispatch → R2 prefix 삭제 → D1 tenant 계열 삭제), audit_logs 유지
P3-8 0006migrations/0006_multiregion.sql 적용

Control Plane 변경

  • writeTraceEvent(): STRIPE_WEBHOOK_RECEIVED, BILLING_STATUS_UPDATED, PROVISION_JOB_CREATED 기록
  • writeAuditLog(): tenant_created, subscription_deleted (Pending_Deletion 고지) 기록

Purge Worker (workers/purge-job)

  • Cron 매일 02:00 UTC (설정 가능)
  • POST /purge 수동 실행 가능
  • D1·R2 바인딩; 선택적으로 GITHUB_PAT·PURGE_DESTROY_WORKFLOW_ID로 pulumi-destroy workflow_dispatch

미구현·팀 보완

  • P3-1 결정 ③: trace_events 고빈도 저장(R2 오프로드/하이브리드) — 현재 D1만 사용; 결정 후 R2 또는 배치 쓰기 추가
  • P3-5 Audit Dashboard: Control Plane GET /audit?tenant_id=...&since=...&limit=100 로 audit_logs 조회 가능. 대시보드 UI는 client-web 또는 별도 앱에서 이 API 호출·필터·export 구현.
  • P3-9 SEV1 검증: trace_id 기준 1초 이내 조회 시나리오·테스트

§5.9 첫 Hard Purge 전 점검

첫 30일 경과 Purge 전: §5.5 완료 기준, §5.8 순서, purge_jobs 전이, (선택) 테스트 테넌트로 1건 검증.

Help