slavicbob/M365-License-Auditor-Tool-MCP

GitHub: slavicbob/M365-License-Auditor-Tool-MCP

一款结合身份风险检测、许可证成本优化、登录威胁分析和自然语言 AI 助手的 Microsoft 365 全栈治理仪表板。

Stars: 0 | Forks: 0

# M365 License Auditor Tool MCP 这是一个全栈 Microsoft 365 治理智能仪表板,结合了身份风险检测、许可证成本优化、登录威胁分析以及自然语言分析师助手。 本项目旨在作为以下方面的高质量作品集展示: - 从 Microsoft Graph 安全检索数据 - 对身份、许可和访问遥测进行可操作的分析 - 具备缓存和可组合洞察的 API 优先后端架构 - 用于操作决策支持的简洁 React 仪表板 - 基于治理和成本数据的 LLM 辅助查询体验 ## 目录 - 概述 - 核心功能 - 架构 - API 端点 - 前端体验 - 数据源和检测逻辑 - 实际应用场景 - 业务应用 - 技术栈 - 本地设置 - 环境变量 - 注意事项和限制 - 路线图建议 - 作品集定位 ## 概述 M365 License Auditor Tool MCP 帮助 IT、SecOps 和 FinOps 团队回答以下关键问题: - 从身份治理的角度来看,哪些用户属于高风险? - 我们在 Microsoft 365 许可证上的开支在哪些方面过高? - 哪些登录模式表明存在可疑活动? - 本周为了降低风险和成本,我们应优先采取哪些行动? 该系统聚合 Microsoft Graph 数据,计算分数和洞察,并同时提供表格详情和管理层摘要。 ## 核心功能 ### 1. 治理风险扫描 在 app/scanner.py 中实现。 将治理检测结果检测并分类为高风险和中风险级别。 主要检测项: - 未启用 MFA 的高级许可证用户 - 持有基础许可证的特权用户(许可证不足的管理员风险) - 未启用 MFA 的特权用户 - 不活跃的许可证用户(阈值设为 90 天以上) - 被分配高级许可证的承包商 - 仍保留许可证的已禁用账户 - 使用自定义安全属性的产假排除逻辑 输出: - 满分 100 的风险评分 - 针对用户级别的发现与建议 - 高风险、中风险、排除用户和已禁用许可证用户的摘要计数 ### 2. 许可证成本优化 在 app/cost.py 中实现。 计算租户许可证支出和优化空间。 主要分析项: - 每月总许可证成本 - 因许可证用户不活跃而产生的每月浪费成本 - 高级用户群体 - 承包商高级许可证分配过多 - 基于 30 天 M365 活动信号的未充分利用的高级用户: - 电子邮件 - Teams - OneDrive - SharePoint - 基于可配置 SKU 降级映射的潜在降级节省 - 主要成本驱动因素和许可证分布 输出: - 满分 100 的成本评分 - 每月和年度化的浪费/节省指标 - 针对单个用户的可操作降级或回收建议 ### 3. 威胁活动分析 在 app/threats.py 中实现。 分析 Entra 登录遥测数据,检测过去 7 天内的可疑行为。 主要检测项: - 登录失败爆发(可能是暴力破解) - 来自 Entra ID 保护信号的风险登录 - 异常国家/地区的成功登录 - 不可能旅行事件(在极短的时间窗口内进行跨国登录) 输出: - 威胁摘要指标 - 按威胁类别划分的详细事件表 - 调查和策略强化建议 ### 4. 管理层概述汇总 在 app/main.py 的 /overview 路由中实现。 将治理、成本和威胁摘要整合为管理层数据快照,包括: - 风险和成本评分 - 威胁量 - 年度化浪费和潜在节省 - 基于类别导航的首选建议操作 ### 5. AI 治理助手 在 app/agent.py 中实现,并通过 /agent 路由暴露。 支持对治理和成本数据集进行自然语言查询。 设计特点: - 数据集压缩,以控制 token 占用 - 截断洞察的同时保留摘要总计 - 查询关键字路由(仅成本、仅扫描或组合查询) - 为前端渲染提供的结构化 JSON 响应契约 ## 架构 ### 后端 - 入口点:app/main.py - 为本地 Vite 前端 (localhost:5173) 启用 CORS - 具备按 key 锁定的内存响应缓存 - 缓存 TTL:30 分钟 - 端点:scan, cost, threats, overview, agent ### Graph 访问层 - 在 app/graph.py 中实现 - MSAL 机密客户端凭证流 - 带有过期处理的 token 复用 - 针对 Graph 429/5xx 响应的重试和感知限流处理 - 带有可选页面限制的分页处理 - 为活动分析引入 CSV 报告 ### 前端 (React + Vite) - frontend/src/App.jsx 中的选项卡式应用外壳 - 页面模块: - 概述 - 治理 - 成本 - 威胁 - AI Agent - 可复用组件: - 摘要卡片 - 可搜索、可排序的用户表 ## API 端点 所有端点均由 FastAPI 提供(默认本地基础 URL:http://127.0.0.1:8000)。 - GET / - 健康/状态检查 - GET /scan?refresh=true|false - 治理扫描摘要和结果 - GET /cost?refresh=true|false - 成本分析摘要和优化洞察 - GET /threats?refresh=true|false - 登录威胁分析摘要和事件洞察 - GET /overview?refresh=true|false - 聚合的管理层仪表板 payload - POST /agent - 请求体:{ "query": "..." } - 返回用于 UI 渲染的强类型 JSON payload ## 前端体验 仪表板支持: - 用于领导层汇报的管理层 KPI 摘要 - 面向分析师工作流的深度下钻结果表 - 全局表格搜索和可排序列 - 一键刷新获取最新概述数据 - 用于探索性分析的 AI 辅助问答 ## 数据源和检测逻辑 主要数据来自 Microsoft Graph API: - 用户、角色和订阅的 SKU - MFA 注册报告 - M365 使用情况报告(CSV 端点) - 审计日志登录 评分模型亮点: - 治理风险评分会对高风险和中风险的发生率进行扣分 - 成本评分会对不活跃的许可用户和承包商高级版比例进行扣分 ## 实际应用场景 - 季度 M365 许可证规模调整计划 - 针对特权身份的安全态势审查 - 检测过时、高风险或过度配置的账户 - 面向 IT 领导层的全租户操作就绪仪表板 - 为身份治理委员会提供基于证据的建议 ## 业务应用 - 减少经常性的 Microsoft 365 许可浪费 - 改善特权访问控制的合规性结果 - 更早发现可疑的登录行为 - 在 SecOps、IAM 和 FinOps 之间建立共享的全局运作视图 ## 技术栈 后端: - Python - FastAPI - MSAL - Requests - Azure OpenAI SDK 前端: - React - Vite - Axios 其他支持: - Microsoft Graph API - 带有应用程序权限的 Entra ID 应用注册 ## 本地设置 ### 1. 克隆并进入项目 - 克隆此存储库 - 打开项目根文件夹 ### 2. 后端设置 在项目根目录下执行: ``` python -m venv .venv .venv\Scripts\activate pip install -r requirements.txt ``` 运行 API 服务器: ``` uvicorn app.main:app --reload --host 127.0.0.1 --port 8000 ``` ### 3. 前端设置 在 frontend 目录下执行: ``` npm install npm run dev ``` 默认前端 URL: - http://127.0.0.1:5173 如有需要,可以使用 VITE_API_BASE_URL 设置前端 API 目标。 ## 环境变量 在项目根目录下创建一个 .env 文件用于后端设置: Microsoft Graph 必需项: - CLIENT_ID - CLIENT_SECRET - TENANT_ID AI 助手必需项: - AZURE_OPENAI_KEY - AZURE_OPENAI_ENDPOINT - AZURE_OPENAI_DEPLOYMENT 可选项目: - AZURE_OPENAI_API_VERSION(代码默认值:2024-12-01-preview) - AGENT_MAX_RECORDS_PER_INSIGHT(默认值:100) - SIGNIN_PAGE_LIMIT(默认值:50) 前端可选项目 (frontend/.env): - VITE_API_BASE_URL ## 注意事项和限制 本节内容对于展示项目的真实生产情况和作品集可信度至关重要。 ### 1. 必须替换定价占位符 在 app/cost.py 中,许可证定价和降级节省目前包含占位符(例如 XYZ 和 ABC)。这不是可执行的 Python 代码,必须在运行成本分析之前将其替换为真实的数值。 ### 2. 权限范围要求 此项目使用的 Graph 端点需要提升的应用程序权限(例如:审计日志、报告、目录数据)。缺少权限将导致洞察不完整或端点失败。 ### 3. 仅支持内存缓存 缓存是进程本地且非分布式的。它适用于本地使用和演示,但不足以支持水平扩展的生产部署。 ### 4. 启发式检测模型 威胁和治理逻辑使用确定性启发式算法(阈值和规则),不能完全替代完整的 SIEM/SOAR 或事件响应 pipeline。 ### 5. AI 响应依赖性 AI 助手需要配置好的 Azure OpenAI 部署,并且可能会根据模型行为和 prompt 路由返回不同的输出。 ### 6. 数据新鲜度和 API 限制 Graph 报告端点可能会有延迟,且尽管有重试/退避处理,大批量租户可能仍会遇到限流。 ## 路线图建议 提升生产就绪程度的潜在升级方向: - 外部持久化缓存 - 带有快照历史记录的后台定时扫描 - 针对仪表板本身的多租户 RBAC 和身份验证 - 导出功能(CSV/PDF 管理层报告) - 用于修复工作流的策略即代码集成 - 扩展单元和集成测试,包括模拟的 Graph 固件 - 支持 SIEM 连接器 ## 作品集定位 本项目在以下方面展示了实用的云工程和产品思维: - API 工程和集成弹性 - 安全和治理分析设计 - 成本优化智能 - 具备 payload 整形和结构化输出契约的 LLM 功能集成 - 专注于操作员工作流的前端交付 ## 架构图 (ASCII) ``` +--------------------------------------+ | React Frontend | | Vite app with tabs and data tables | | (Overview, Scan, Cost, Threats, AI) | +------------------+-------------------+ | | HTTP/JSON v +--------------------------------------+ | FastAPI Backend | | app/main.py | | - /scan /cost /threats /overview | | - /agent | | - In-memory cache (30 min TTL) | +-----------+--------------+-----------+ | | calls modules | | calls LLM | | +-----------------------+--+ +---+----------------------+ | Analytics Modules | | Azure OpenAI Service | | scanner.py | | (structured JSON output) | | cost.py | +--------------------------+ | threats.py | | agent.py | +------------+-------------+ | | via graph.py (MSAL + retry + paging) v +--------------------------------------+ | Microsoft Graph APIs | | Users, Roles, SKUs, Reports, SignIns | +--------------------------------------+ ``` ## 免责声明 本项目是一个通用且经过脱敏处理的作品集实现,灵感来源于企业自动化场景。不包含任何专有的公司信息、凭证、生产配置或内部业务逻辑。
标签:DLL 劫持, FinOps, Microsoft 365, React, Syscalls, 大语言模型, 安全运营, 扫描框架, 身份风险检测, 运维治理, 逆向工具