向Sentinel事件添加评论
此解决方案允许通过MCP工具向Microsoft Sentinel事件添加注释。它由两个部分组成:
- Azure逻辑应用程序 -通过安全身份验证处理Sentinel API交互
- MCP 服务器 -将该功能作为VS Code Copilot的MCP工具公开
何时使用此解决方案
该解决方案专为以下环境而设计:
- Azure Logic应用程序必须使用 消费 托管模型
- Azure API管理(APIM) 无法部署
- 没有其他托管的MCP服务器网关可用
替代方法
如果这些约束不适用于您的环境,请考虑以下更简单的替代方案:
| 备选方案 | 描述 |
|---|---|
| Azure逻辑应用程序(标准) | 具有HTTP触发器的标准逻辑应用程序可以直接作为MCP服务器公开,而不需要单独的本地MCP服务器组件 |
| Azure API管理 | APIM可以将任何API(包括Logic App端点)公开为MCP服务器,提供集中管理和附加功能 |
如果您可以使用这些替代方案中的任何一个,则无需在此解决方案中使用本地Node.js MCP服务器组件。
建筑
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ VS Code │────▶│ MCP Server │────▶│ Logic App │────▶│ Sentinel │
│ Copilot │ │ (local) │ │ (Azure) │ │ API │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
│
Uses webhook URL
from env variable______________________________________________________________________
第1部分:逻辑应用程序
Logic应用程序 Sentinel-Incident-Add-Comment 提供了一个安全的HTTPS端点,该端点接收Defender事件ID和消息,通过日志分析查询查找相应的Sentinel事件,然后通过HTTP直接调用Sentinel REST API添加注释。
逻辑应用程序部署
步骤1:部署ARM模板
Azure命令行界面:
# Set variables
RESOURCE_GROUP="Sentinel-Incident-Add-Comment-rg"
SENTINEL_RG="your-sentinel-resource-group"
SENTINEL_WORKSPACE="your-sentinel-workspace"
LOCATION="eastus"
# Create resource group (if needed)
az group create --name $RESOURCE_GROUP --location $LOCATION
# Deploy the Logic App
az deployment group create \
--resource-group $RESOURCE_GROUP \
--template-file infra/Sentinel-Incident-Add-Comment.json \
--parameters resourceGroupName=$SENTINEL_RG workspaceName=$SENTINEL_WORKSPACEPowerShell:
$ResourceGroup = "Sentinel-Incident-Add-Comment-rg"
$SentinelRG = "your-sentinel-resource-group"
$SentinelWorkspace = "your-sentinel-workspace"
$Location = "eastus"
# Create resource group (if needed)
New-AzResourceGroup -Name $ResourceGroup -Location $Location
# Deploy the Logic App
New-AzResourceGroupDeployment `
-ResourceGroupName $ResourceGroup `
-TemplateFile "infra\Sentinel-Incident-Add-Comment.json" `
-resourceGroupName $SentinelRG `
-workspaceName $SentinelWorkspace步骤2:分配权限
Logic应用程序的托管身份需求 Microsoft Sentinel响应程序 角色:
# Get the Logic App's Principal ID
PRINCIPAL_ID=$(az logic workflow show -g $RESOURCE_GROUP -n "Sentinel-Incident-Add-Comment" --query identity.principalId -o tsv)
# Assign Sentinel Responder role
az role assignment create \
--assignee $PRINCIPAL_ID \
--role "Microsoft Sentinel Responder" \
--scope "/subscriptions//resourceGroups/$SENTINEL_RG/providers/Microsoft.OperationalInsights/workspaces/$SENTINEL_WORKSPACE"步骤3:获取Webhook URL
部署和配置后,检索webhook URL:
Azure门户:
- 打开Logic应用程序
- 点击 “收到HTTP请求时” 触发
- 复制 HTTP帖子URL
Azure命令行界面:
az rest --method post \
--uri "https://management.azure.com/subscriptions//resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Logic/workflows/Sentinel-Incident-Add-Comment/triggers/When_a_HTTP_request_is_received/listCallbackUrl?api-version=2016-06-01" \
--query value -o tsv______________________________________________________________________
第2部分:MCP服务器
MCP服务器公开 add_comment_to_sentinel_incident 安全调用Logic App webhook的工具。
MCP服务器部署
步骤1:安装依赖项
npm install步骤2:构建服务器
npm run build步骤3:配置VS代码
添加到您的VS代码 settings.json 或工作区设置:
{
"mcp.servers": {
"sentinel-incident-comment": {
"command": "node",
"args": ["c:/gh/mcp-add-comment-to-sentinel-incident/dist/index.js", "--stdio"],
"env": {
"SENTINEL_COMMENT_WEBHOOK_URL": ""
}
}
}
}替换 `` 使用第1部分步骤3中获得的webhook URL。
MCP工具使用
工具: add_comment_to_sentinel_incident
为Microsoft Sentinel事件添加评论。
参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
incidentId | string | 是 | Sentinel事件ID(例如“12345”) |
message | string | 是 | 注释文本(纯文本或HTML) |
从GitHub Copilot调用(自然语言)
配置完MCP服务器后,您可以使用自然语言从GitHub Copilot Chat调用它。以下是一些示例:
简单评论:
“在Sentinel事件12345中添加一条评论,称调查已完成,未发现任何恶意活动”
详细调查总结:
“在事件2847中添加以下发现:用户确认这是合法活动,源IP属于我们的企业VPN,没有检测到任何泄露迹象。建议关闭为假阳性。”
HTML格式的注释:
“为事件5123添加一条HTML格式的评论,标题为‘AI分析结果’、发现项目列表和粗体推荐部分”
GitHub Copilot将自动调用 add_comment_to_sentinel_incident 工具具有适当的参数。
程序化使用(无MCP服务器)
有关直接对Logic App的编程访问(例如,从脚本、自动化管道或其他应用程序),请参阅 逻辑应用程序自述 其中包括使用curl、PowerShell和Python的示例。
响应
成功:
{
"status": "success",
"message": "Comment added to incident 12345",
"incidentId": "12345"
}错误:
{
"status": "error",
"message": "Failed to add comment to incident",
"incidentId": "12345",
"error": { ... }
}______________________________________________________________________
安全注意事项
- Webhook URL保护:逻辑应用程序webhook URL包含SAS签名。把它当作秘密。
- 环境变量:切勿将webhook URL提交到源代码管理。
- 访问控制:Logic应用程序的托管身份控制对Sentinel的访问。确保正确的RBAC。
故障排除
| 问题 | 解决方案 |
|---|---|
| “SENTINEL_COMMENT_WEBHOOK_URL未设置” | 在VS代码MCP设置中设置环境变量 |
| 401未经授权 | 验证逻辑应用程序的托管身份是否配置正确 |
| 403禁止 | 验证逻辑应用程序的托管身份是否具有“Microsoft Sentinel响应程序”角色 |
| 404 Not Found | 检查事件ID是否存在于Sentinel工作区中 |
| 连接超时 | 验证与Azure Logic Apps的网络连接 |
