adiallo10/security-ops-dashboard

GitHub: adiallo10/security-ops-dashboard

基于Flask和Chart.js构建的轻量级安全运营仪表板,将合成告警数据可视化为热力图和趋势图,并支持本地或Claude AI生成自然语言趋势解读。

Stars: 0 | Forks: 0

# 安全运维迷你仪表板 一个轻量级的 Flask 仪表板,将合成的安全警报数据转化为 **严重程度热力图、趋势图表和简明的自然语言说明**。点击 “解释此趋势”,后端将总结峰值或模式可能的含义以及下一步需要检查的内容——这使得数据不仅对分析师,也对利益相关者具有可读性。 所有操作均使用合成数据离线运行。AI 解释功能是可选的: 如果没有 API key,它将使用确定性的本地解释器;如果配置了 Claude (Anthropic) key,它将生成更丰富的自然语言摘要。 ## 为什么开发这个项目 仪表板通常只展示了发生了*什么*,却极少说明*这意味着什么*。这个项目增加了一层 轻量级的 AI,将图表转化为简短、易于人类理解的要点——这在 向非技术团队或只想了解核心结论的经理做简报时非常有用。 ## 功能 - **合成数据生成器** —— 跨五大 SIEM/EDR 来源和六大类别的、确定且逼真的警报,并包含一个注入的钓鱼攻击峰值,因此 有真实的趋势可供解释。 - **严重程度摘要磁贴** —— 总数以及低/中/高/严重级别的计数。 - **趋势图** —— 每日警报数,可在“所有警报”和任意 单个类别之间切换(Chart.js 折线图)。 - **热门类别条形图**。 - **活动热力图** —— 显示警报触发时间的星期 × 小时网格。 - **“解释此趋势”** —— `POST /api/explain` 返回简明的自然语言 摘要 + 建议的下一步操作。默认使用本地解释器;如果已配置则使用 Claude。 - **密钥保留在服务端** —— 浏览器仅与 Flask 通信,绝不直接与 Anthropic 交互。 ## 架构 ``` Browser (Chart.js) ──GET /api/alerts──► Flask ──► secops_dashboard.data │ │ └──POST /api/explain───────────────►└──► secops_dashboard.explain ──► (optional) Claude API ``` 所有的聚合逻辑都位于 `secops_dashboard/` 中,并且独立于 Web 层进行了单元测试。 ## 安装说明 ``` python3 -m venv .venv && source .venv/bin/activate pip install -e . # core (Flask) pip install -e ".[ai]" # optional Claude explanations # 可选:使用 Claude API 获取解释 export ANTHROPIC_API_KEY="sk-ant-..." # never commit this flask --app secops_dashboard.server run # 打开 http://127.0.0.1:5000 ``` 生成独立的 JSON 数据集(用于演示或其他工具): ``` python -m scripts.generate_data sample_data/alerts.json ``` ## 测试 ``` python -m unittest discover -s tests -v ``` 测试涵盖了确定性生成、验证所有聚合数据总和是否等于 总数、注入的峰值,以及趋势解释器的峰值/平稳/空数据路径。 ## 项目结构 ``` secops_dashboard/ data.py # synthetic data + aggregations (severity, trend, heatmap) explain.py # local + optional Claude trend explanations server.py # Flask app: /, /api/alerts, /api/explain templates/ index.html # dashboard page static/ app.js # Chart.js rendering + explain button style.css # dark, responsive UI scripts/ generate_data.py tests/ ``` ## 我如何使用 Claude 仪表板的数学计算是纯 Python 实现的 —— Claude 是**“核心意义”层**。当你 点击 *解释此趋势* 时,后端会将选定的数据系列(标签 + 数值 + 严重程度组合)发送给 Claude,并要求其提供一个简短的、适合管理者阅读的解读, 同时附带建议的下一步操作。 设计决策: - **密钥保留在服务端。** 浏览器仅调用 Flask 的 `/api/explain` endpoint;由 Flask 调用 Claude。API key 绝不会被发送到客户端。 - **确定性回退。** 在没有 `ANTHROPIC_API_KEY` 的情况下,本地解释器会 检测峰值/平稳/上升趋势 —— 因此演示始终可以离线运行。 - **基于事实的 prompt。** 该 prompt(见 [`explain.py`](secops_dashboard/explain.py))仅包含真实的数据 点,并严禁捏造细节。 - **Claude 帮助我构建项目的地方:** 调整合成数据生成器,使 注入的钓鱼攻击峰值看起来更逼真,以及为深色主题优化 Chart.js 的默认 选项。 ## 安全说明 - 所有数据均为**合成/模拟数据** —— 没有真实的警报或 PII。 - Claude API key 通过 Flask 代理保留在服务端;它绝不会发送到 浏览器。 ## 许可证 MIT — 见 [LICENSE](LICENSE)。
标签:数据可视化, 调试辅助, 逆向工具