如何通过托管身份从.NET API连接Azure Log Analytics工作区
用托管身份替代Azure AD应用权限连接Log Analytics工作区(C#实现)
完全可以用托管身份替代Azure AD应用权限来连接Log Analytics工作区,不需要注册独立的AD应用,而且更安全(无需管理客户端密钥等敏感信息)。以下是具体实现步骤:
1. 配置托管身份与权限
- 为你的C#应用所在的Azure资源(比如Azure Function、VM、App Service等)开启系统分配托管身份,或者创建用户分配托管身份并关联到该资源。
- 在Log Analytics工作区的IAM访问控制中,为这个托管身份分配合适的角色:比如
Log Analytics Reader(只读查询)或Log Analytics Contributor(读写权限),根据业务需求选择。
2. C#代码实现
使用Azure官方的Azure.Identity和Azure.Monitor.Query库来实现,无需手动处理令牌获取逻辑:
首先安装必要的NuGet包:
Install-Package Azure.Identity Install-Package Azure.Monitor.Query
示例代码:
using Azure.Identity; using Azure.Monitor.Query; var workspaceId = "你的Log Analytics工作区ID"; // DefaultAzureCredential会自动适配环境:Azure托管环境用托管身份,本地开发用Azure CLI/VS登录身份 var credential = new DefaultAzureCredential(); // 初始化Log查询客户端 var logsClient = new LogsQueryClient(credential); // 执行Kusto查询 var kustoQuery = "SecurityEvent | take 10"; var queryResponse = await logsClient.QueryWorkspaceAsync(workspaceId, kustoQuery); // 处理查询结果 foreach (var row in queryResponse.Value) { Console.WriteLine($"事件时间: {row["TimeGenerated"]}, 事件ID: {row["EventID"]}"); }
如果使用用户分配托管身份,只需把DefaultAzureCredential替换为指定客户端ID的ManagedIdentityCredential:
var credential = new ManagedIdentityCredential("你的用户分配托管身份客户端ID");
3. 注意事项
- 确保托管身份的IAM角色分配已生效(通常需要几分钟)。
- 不需要配置任何AD应用相关的敏感信息(客户端ID、密钥、租户ID),避免密钥泄露风险。
- 本地调试时,
DefaultAzureCredential会自动使用你本地登录的Azure身份(比如Azure CLI、Visual Studio登录的账号),无需额外配置。
内容的提问来源于stack exchange,提问作者Zhu
相关产品推荐
相关产品推荐

