Skip to content

[Phase 1 Sprint 2.5] feat(audit): audit_logs 記録(ANONYMIZE / LOGIN_FAILED)+ アクション語彙整合 #734

Description

@win2cot

設計正本: ADR-0006 §3.4 step8 / §3.3、基本設計書 §4.2.6 / §6.2.3。webapi 側 audit_logs の記録ギャップと、設計書↔enum のアクション語彙乖離を埋める。

背景

スコープ(記録実装)

  • AuditEventTypeANONYMIZE / LOGIN_FAILED を追加
  • 匿名化 step8(SPI 側のみ): SPI removeUser(Keycloak JVM)で匿名化と同 transaction に audit_logs へ action=ANONYMIZE, entity_type='users', entity_id=user.idJDBC 直書き(ADR-0006 §3.4)
    • webapi 側は対象外・将来委譲: webapi の匿名化呼び出し経路(解約・退会 API)が未実装のため webapi 側 ANONYMIZE 記録は実装できない。解約・退会 API 実装時(Phase 2、feature: テナント解約(物理削除/データ凍結)設計 [Phase 2] #167 圏)に委譲する
    • hash_chain 注意: SPI の JDBC 直書きは AuditLogPersistenceAdapter と同一の hash_chain(前レコード SHA-256)計算を踏襲し、改ざん検知チェーンを壊さないこと
  • 認証失敗: TasksAuthenticationEntryPoint(webapi、実装済み)で LOGIN_FAILED を記録(detail = USER_NOT_REGISTERED / USER_INACTIVE / USER_ANONYMIZED。USER_ANONYMIZED は監査必須)
  • 孤児 TODO(#144) 5箇所を repoint:

スコープ(アクション語彙整合 ※記録配線は別 issue)

  • *_DENIED 8値(VIEW_DENIED/EDIT_DENIED/DELETE_DENIED/STATUS_CHANGE_DENIED/VISIBILITY_CHANGE_DENIED/STAKEHOLDER_EDIT_DENIED/TENANT_CROSSED/ROLE_BASED_DENIED)を AuditEventType語彙として追加(各シナリオの記録配線は別 issue [Phase 1 Sprint 2.5] feat(audit): 認可違反の audit_logs 記録配線(*_DENIED 8値, §6.2.3) #736)
  • 命名統一: enum CROSS_TENANT_VIOLATION_ATTEMPT ↔ 設計 §6.2.3 TENANT_CROSSED の整合(どちらに寄せるか本 issue で確定し、enum・利用箇所・設計書を揃える)
  • ANONYMIZE を基本設計書 §4.2.6 の action 標準値一覧に追記(doc 同期。LOGIN_FAILED/*_DENIED は既載)

受け入れ条件

関連: ADR-0006 / 基本設計書 §4.2.6・§6.2.3 / #730(audit 条件の移譲元)/ #144(無関係・誤参照だった)/ #736(*_DENIED 記録配線)/ #167(Phase2 解約 — webapi 側 ANONYMIZE 記録の将来委譲先)

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/backendJava / Spring バックエンド実装変更area/security認証・認可 / NIST 準拠 / セキュリティ設定変更priority/p1High。現スプリント内で完了必須task-type:implコード実装が主体のタスク

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions