Azure MCP服务器-具有托管身份的ACA
此模板部署 Azure MCP服务器 作为Azure容器应用程序上的远程MCP服务器,可通过HTTPS访问。AI代理来自 微软铸造厂 和 微软复制品工作室 可以安全地调用MCP工具调用来代表您执行Azure操作。
模板支持多种 部署场景 通过单独的参数文件。命名空间会根据您提供的资源ID自动启用。
先决条件
- Azure订阅 所有者 或 用户访问管理员 权限
- Azure开发者命令行界面(azd)
- A. 微软铸造厂 项目(你需要它的Azure资源ID)
- Azure MCP服务器 命令参考 列出所有可用的工具命名空间
部署场景
场景1:存储(原始)
与一起部署 storage 只读Azure存储工具的命名空间。
要求: 存储帐户
copy infra\main.parameters.storage.json infra\main.parameters.json
azd env new mcp-storage
azd env set STORAGE_RESOURCE_ID "/subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Storage/storageAccounts/{name}"
azd up授予RBAC: 存储帐户上的读取器+存储Blob数据读取器。
场景2:监视器/哨兵(安全副驾驶)
与一起部署 monitor 用于通过KQL查询日志分析工作区的命名空间。这是a的主要路径 安全副驾驶 对Sentinel和Defender警报做出反应——Sentinel数据存储在日志分析中。
要求: 日志分析工作区(如果需要安全表,则启用Sentinel)
copy infra\main.parameters.monitor.json infra\main.parameters.json
azd env new mcp-sentinel
azd env set LOG_ANALYTICS_RESOURCE_ID "/subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.OperationalInsights/workspaces/{name}"
azd up授予RBAC(订阅范围): 阅读器+日志分析阅读器+微软哨兵阅读器。订阅级别范围允许通过以下方式查询任何资源的日志 monitor resource log query 以及工作空间级别的查询。
可用的MCP工具:
azmcp monitor workspace list--列出工作区azmcp monitor table list--列表表(SecurityAlert、SecurityIncident、Syslog等)azmcp monitor workspace log query--对Sentinel表运行KQL查询
代理提示示例:
- “显示最新的10个Sentinel安全警报”
- “查询SecurityIncident过去24小时内发生的严重事件”
- “总结过去一小时的CommonSecurityLog条目”
方案 3:成本/Azure 数据资源管理器
与一起部署 kusto 用于直接查询ADX集群的命名空间。
要求: Azure数据资源管理器群集
copy infra\main.parameters.kusto.json infra\main.parameters.json
azd env new mcp-kusto
azd env set KUSTO_RESOURCE_ID "/subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Kusto/clusters/{name}"
azd up授予RBAC: ADX集群上的Reader+AllDatabasesViewer。
可用的MCP工具:
azmcp kusto cluster list/get--列出或检查集群azmcp kusto database list--列表数据库azmcp kusto table list/schema--列出表和模式azmcp kusto query--运行KQL查询azmcp kusto sample--示例表数据
场景4:监视器+Kusto(组合)
两者都可以部署 monitor 和 kusto 用于全面安全分析的命名空间——通过单个MCP服务器中的日志分析和ADX集群查询Sentinel。
要求: 日志分析工作区和Azure数据资源管理器集群
copy infra\main.parameters.monitor-kusto.json infra\main.parameters.json
azd env new mcp-security
azd env set LOG_ANALYTICS_RESOURCE_ID "/subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.OperationalInsights/workspaces/{name}"
azd env set KUSTO_RESOURCE_ID "/subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Kusto/clusters/{name}"
azd up授予RBAC: 场景2和场景3中的所有角色合并在一起。
部署什么
所有场景都部署了相同的核心基础设施:
- 容器应用程序 --使用启用的命名空间运行Azure MCP服务器
- 角色分配 --容器应用程序管理的标识在目标资源上被授予只读角色,条件是启用了哪些命名空间
- Entra应用程序注册 --OAuth 2.0身份验证
Mcp.Tools.ReadWrite.All角色,分配给Foundry项目的托管身份 - 应用洞察 --遥测和监测(默认情况下在参数文件中禁用,设置
appInsightsConnectionString到""启用)
部署输出
部署后,检索 azd 输出:
azd env get-values连接Foundry代理的关键值:
CONTAINER_APP_URL="https://azure-mcp-sentinel-server..eastus2.azurecontainerapps.io"
ENTRA_APP_CLIENT_ID=""从Microsoft Foundry代理使用Azure MCP服务器
部署后,将您的Microsoft Foundry代理连接到在Azure容器应用程序上运行的Azure MCP服务器。代理将使用其托管身份进行身份验证,并获得对配置工具的访问权限。
- 从以下位置获取容器应用程序URL
azd输出:CONTAINER_APP_URL - 从获取Entra应用程序客户端ID
azd输出:ENTRA_APP_CLIENT_ID - 导航到您的Foundry项目:https://ai.azure.com/nextgen
- 首选 构建 → 创建代理
- 选择 +添加 在工具部分
- 选择 自定义 标签
- 选择 模型上下文协议 作为工具并单击 创建 Find MCP
- 配置MCP连接 Create MCP Connection
- 输入 CONTAINER_APP_URL 值作为远程MCP服务器端点 - 选择 微软Entra → 项目管理身份 作为身份验证方法 - 输入你的 ENTRA_APP_CLIENT_ID 作为观众 - 点击 连接 将此连接与代理关联
您的代理现在已准备好为您提供帮助!它可以回答您的问题,并利用Azure MCP服务器的工具代表您执行Azure操作。
代理提示示例
使用Azure MCP工具时,请始终使用以下值:
- 订阅:{AZURE_subscription_ID}
- 租户:{AZURE_tenant_ID}
- 日志分析工作区是资源组{AZURE_RESOURCE_group}中的{Log_Analytics_RESOURCE_ID}
不要向用户询问这些值,也不要在输出中列出这些值。在所有MCP工具调用中自动使用它们。
清理
azd down模板结构
这 azd 模板由以下二头肌模块组成:
main.bicep--协调部署;根据提供的资源ID,有条件地启用命名空间和RBACaca-infrastructure.bicep--部署托管Azure MCP服务器的容器应用程序aca-role-assignment-resource-storage.bicep--分配存储RBAC角色(读取器+存储Blob数据读取器)aca-role-assignment-resource-kusto.bicep--分配ADX RBAC角色(读取器+所有数据库查看器)aca-role-assignment-resource-loganalytics.bicep--分配日志分析RBAC角色(阅读器+日志分析阅读器+Microsoft Sentinel阅读器)entra-app.bicep--使用OAuth 2.0身份验证的自定义应用角色创建Entra应用注册foundry-role-assignment-entraapp.bicep--将Entra应用程序角色分配给Foundry项目的托管身份application-insights.bicep--部署遥测和监控应用程序洞察(有条件)
参数文件
| 文件 | 命名空间 | 用例 |
|---|---|---|
main.parameters.storage.json | storage | Azure存储工具 |
main.parameters.monitor.json | monitor | 哨兵/日志分析KQL查询 |
main.parameters.kusto.json | kusto | Azure数据资源管理器查询 |
main.parameters.monitor-kusto.json | monitor + kusto | 综合安全分析 |
注: 将所需的参数文件复制到main.parameters.json跑步前azd upTheazdCLI读取infra/main.parameters.json按照惯例。
在空订阅上进行测试
对于 监视器/哨兵 新订阅的场景:
- 创建资源组
- 创建日志分析工作区(免费层很好)
- 在工作区(Azure门户)上启用Microsoft Sentinel→ 哨兵→ 添加工作区)
- 在以下位置创建Microsoft Foundry项目 ai.ai.com
- 使用部署
main.parameters.monitor.json - Sentinel将自动填充表,如下所示
SecurityAlert,SecurityIncident,Heartbeat配置数据连接器后
