📑 ログ検索
一致: 3 件(1 ページ中 1)
📜 ログ一覧
| 日時 | Level | Action | Actor | Target | Resource | Result | Meta |
|---|---|---|---|---|---|---|---|
| ERROR | EXPORT_DATA |
hanako (u_003)
203.0.113.12
|
dataset sales_2024
|
/reports/export | DENY |
表示{
"policy": "PII_EXPORT_BLOCK",
"fields": [
"email",
"phone"
]
}
|
|
| WARN | ROLE_ASSIGN |
admin (u_admin)
198.51.100.7
|
role editor
|
/admin/roles | SUCCESS |
表示{
"reason": "project onboarding"
}
|
|
| INFO | USER_LOGIN |
taro (u_001)
203.0.113.10
|
user u_001
|
/auth/login | SUCCESS |
表示{
"ua": "Chrome 139",
"mfa": "TOTP"
}
|
概要
監査ログは、「誰が」「いつ」「どこで」「何を」「結果はどうだったか」を不変記録として残す仕組みです。インシデント調査、コンプライアンス対応、権限・認可の妥当性検証に活用します。
基本
- 最低限のフィールド:
ts(ISO8601),level,action,actor,target,resource,result,meta - イミュータブル保存(改竄防止)とタイムシンク(NTP)
- 検索性(フリーテキスト + 構造化フィルタ)
- エクスポート(CSV/JSON)・アーカイブと保持期間
JSONスキーマ例
{
"ts": "2025-08-01T09:15:24+09:00",
"level": "INFO|WARN|ERROR",
"action": "USER_LOGIN|ROLE_ASSIGN|EXPORT_DATA|...",
"actor": {"id":"u_001","name":"taro","ip":"203.0.113.10"},
"target": {"type":"user|role|dataset","id":"..."},
"resource": "/path-or-endpoint",
"result": "SUCCESS|DENY|FAIL",
"meta": {"key":"value", "...": "..."}
}
基礎
| 観点 | 推奨 | 補足 |
|---|---|---|
| タイムスタンプ | ISO8601 + タイムゾーン | 例: 2025-08-01T09:15:24+09:00 |
| 一意ID | イベントID(UUID) | 重複/再送の識別に使用 |
| 保持期間 | 本番: 1〜7年 | 規制/契約に準拠(PIIは短期分離) |
| 格納先 | WORM/S3 Object Lock/Append-only | 改竄防止 |
| マスキング | PII/秘匿値はハッシュ化 | 例: IPの/24, メールのローカル部 |
導入
- 記録ポリシー策定(対象アクションとレベル)
- アプリ/ミドル/インフラのログ出力を標準化(JSON)
- 収集経路(Agent / HTTP / Queue)を決める
- 保存(低コスト)と検索(高性能)を分離
- 可視化ダッシュボード・アラート連携
開発現場
- PR/デプロイにアクションログを紐づけ(誰がいつ本番変更)
- 権限管理(Role/Policy変更)は必ず二重記録(前後差分)
- エクスポート・大量参照はレート制限 + 監査強化
最新情報
このページはローカルの /data/audit-logs.json を読み込みます。運用では SIEM / Data Lake と連携してください。
応用
- ポリシー違反検知(例:同一IPからの大量失敗 → 自動ロック)
- 脅威ハンティング(時間窓・ユーザー相関)
- 署名付きログ(Hash chain, Merkle tree)
発展
- WORM 保管 + 定期検証(ハッシュ照合)
- PII 分離ストア + 短期保持、サマリのみ長期保存
- 差分スナップショット(権限テーブル変更前後)
例
PHPでJSONログへ追記(安全寄りサンプル)
// 例: append_audit_log($event)
function append_audit_log(array $event, string $file): bool {
$event['ts'] = $event['ts'] ?? date('c');
$event['id'] = $event['id'] ?? bin2hex(random_bytes(16)); // UUID代替
$json = is_readable($file) ? json_decode(file_get_contents($file), true) : [];
$json[] = $event;
// 追記ではなく、まとめて書き戻し(ローテート推奨)
return (bool)file_put_contents($file, json_encode($json, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT));
}
検索クエリの例
q=export AND result=DENY→ 機微データの持ち出し失敗を抽出actor=u_admin→ 管理者の操作履歴action=ROLE_ASSIGN&date_from=2025-08-01
おすすめツール
- Elasticsearch / OpenSearch
- ClickHouse
- Grafana / Kibana
- Vector / Fluent Bit
- Amazon S3 + Object Lock