Azure自动化控制框架

一个基于FastAPI和Microsoft Graph的模块化控制平面(MCP)和代理API组合,用于自动化Azure AD(Entra ID)管理任务,包括登录诊断、特权角色自动化等,所有操作均在租户内部完成,数据不离开环境。

  • by gsvibhav
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 gsvibhav/mcp-server

使用说明

🧠 MCP(管理控制平面)+ Azure & Entra ID 自动化代理框架

这个项目是一个 模块化控制平面(MCP) 并且 代理API 用……构建的组合 FastAPI + Microsoft Graph(微软图)。
它实现了跨领域的现实世界管理任务自动化 Azure AD(Entra ID) ——从登录诊断到特权角色自动化——全部 在您的租户(或租户环境中),带有 数据绝不会离开您的环境。


🚀 它的功能

✅(对号,表示正确、确认或同意) ping Microsoft Graph
确认您的应用程序注册、令牌有效性以及Graph连接状态。

✅(这个符号通常表示“正确”或“确认”,在中文中没有直接对应的词汇,但可以根据上下文理解为“正确”或“已确认”的意思。) 检查用户锁定情况
分析登录失败、密码重置以及条件访问的影响。

✅ 自动化PIM(产品信息管理)分配
管理者可以通过代理(支持Slack/Teams/Jira集成)请求并批准限定时间内的符合条件的角色。

✅ 添加你自己的工具
通过简单地添加新功能(如Intune检查、合规性审查、Sentinel查询等)来扩展MCP。


🧩 它是如何拼合在一起的

User / AI Client ─▶ Agent API ─▶ MCP Server ─▶ Microsoft Graph ─▶ Entra ID / Azure AD
          │             │
   Slack / Jira   Local REST calls

所有操作均在本地或您的租户环境中运行。无外部依赖,无隐藏调用。


🛠 先决条件

要求 描述
Python 3.10+ 已在3.10.6版本上测试
Azure 应用注册 需要 RoleManagement.ReadWrite.Directory, Directory.Read.All,和 AuditLog.Read.All
操作系统 支持Windows / Linux / macOS
(可选)Jira & Slack/Teams 用于审批流程

⚙️ 设置

1. 克隆仓库

git clone https://github.com/<your-username>/mcp-agent.git
cd mcp-agent

2. 创建一个虚拟环境

python -m venv .venv
.\.venv\Scripts\activate     # Windows
# source .venv/bin/activate    # Linux/macOS

3. 安装依赖项

pip install -r requirements.txt

4. 创造 .env 文件

MCP 服务器(.env):

TENANT_ID=<your-tenant-id>
CLIENT_ID=<app-client-id>
CLIENT_SECRET=<client-secret>
PIM_SCOPE_ALLOWLIST=/
PIM_SIMULATE=false

代理(.env):

MCP_BASE=http://127.0.0.1:8000
AGENT_API_KEY=supersecret
APPROVAL_SHARED_SECRET=topsecret
APPROVAL_CLICK_TOKEN=clicksecret
PUBLIC_BASE_URL=http://127.0.0.1:8001

▶️ 运行服务器

1号航站楼 – MCP服务器

uvicorn server:app --reload --port 8000

2号航站楼 – 代理API

uvicorn agent_api:app --reload --port 8001

检查健康状况:

Invoke-RestMethod http://127.0.0.1:8000/health
Invoke-RestMethod http://127.0.0.1:8001/health

💡 示例:检查用户锁定状态

$body = @{ tool="entra_user_lockout"; input=@{ upn="alice@contoso.com" } } | ConvertTo-Json
Invoke-RestMethod -Method Post -Uri http://127.0.0.1:8000/run -Body $body -ContentType "application/json"

输出:

{
  "upn": "alice@contoso.com",
  "status": "ok_after_failures",
  "failure_count": 2,
  "success_count": 8,
  "recommendation": "No action needed. User signed in successfully later."
}

💬 示例:请求PIM角色

$headers = @{ Authorization = "Bearer supersecret" }
$ctx = @{
  role_name_or_id  = "Helpdesk Administrator"
  scope            = "/"
  duration_minutes = 120
  manager_upn      = "manager@contoso.com"
  justification    = "OPS-1432 temporary access"
}
$body = @{ message = "request pim for user@contoso.com"; context = $ctx } | ConvertTo-Json -Depth 6
Invoke-RestMethod -Uri http://127.0.0.1:8001/agent -Method Post -Headers $headers -Body $body -ContentType "application/json"

代理:

  1. 创建一个Jira工单。
  2. 向Slack/Teams发送审批链接。
  3. 等待经理批准。
  4. 调用MCP执行 真实的PIM(相位调制/相位干涉测量)分配 通过 Microsoft Graph。

🧩 扩展框架

添加一个自定义工具到 mcp_tools.py:

@log_tool
def my_custom_tool(payload: Dict[str, Any]) -> Dict[str, Any]:
    return {"message": "Hello from your custom tool!"}

它将自动出现在下方 /tools 并且 /run。


👨‍💻 作者

赛·维巴夫·古达拉
☁ 云与身份工程师 | Azure • Entra ID • Terraform • Bicep • 安全自动化
探索如何 人工智能代理 能够管理基础设施、身份和合规性,且无需人工干预。


🪪 许可证

MIT 许可证 —— 可自由使用、修改和改进。
只是不要在GitHub上提交凭证或机密信息。


⚡ 下一步行动

  • 添加Intune设备合规性检查
  • 自动执行条件访问策略
  • 通过图表运行Sentinel查询
  • 扩展PIM(产品信息管理)审查自动化

🎯 提示:这个仓库已经可以在 模拟模式 如果你还没准备好进行实时图表写入。 翻转 PIM_SIMULATE=true 在正式上线前进行安全探索。