You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure存储账户访问密钥转储日志识别及KQL优化问询

检测Azure存储账户密钥导出的日志优化方案

问题背景

根据Azure威胁研究矩阵相关内容,查看存储账户访问密钥的操作应生成可识别的日志,但实际复现中发现:仅进入Access Keys页面和点击「显示密钥」按钮的操作,在AzureActivity日志中的记录完全一致,无法区分是否真的触发了密钥查看行为。当前使用的KQL查询仅筛选了LISTKEYS操作,无法精准识别密钥被导出/查看的动作。

日志源与KQL优化方案

1. 通过HttpMethod区分操作类型

Azure门户中,仅进入Access Keys页面的操作为GET请求,不会实际获取密钥;而点击「显示密钥」的操作会触发POST请求,才是真正的密钥获取动作。可以在KQL中添加该字段筛选:

AzureActivity 
| where TimeGenerated > ago(90d)
| where OperationNameValue contains 'MICROSOFT.STORAGE/STORAGEACCOUNTS/LISTKEYS' 
| where HttpMethod == "POST" // 仅保留实际触发密钥获取的请求
| summarize make_set(ActivityStatusValue) by Caller, Resource, HttpMethod

2. 启用存储账户级诊断日志

除了AzureActivity,开启存储账户的诊断日志能获取更细粒度的操作细节:

  • 进入目标存储账户的「诊断设置」,添加诊断日志并勾选StorageAccountLogs类别
  • 日志会同步到Log Analytics工作区,可通过StorageLogs表查询:
StorageLogs
| where TimeGenerated > ago(90d)
| where OperationName == "ListKeys"
| project TimeGenerated, CallerIpAddress, OperationName, StatusCode, AccountName

3. 区分门户与PowerShell操作

使用Get-AzStorageAccountKey执行密钥查询时,AzureActivity日志的Caller字段会标记为AzurePowerShell,可通过以下查询区分操作来源:

AzureActivity 
| where TimeGenerated > ago(90d)
| where OperationNameValue contains 'MICROSOFT.STORAGE/STORAGEACCOUNTS/LISTKEYS' 
| where HttpMethod == "POST"
| extend OperationSource = iff(Caller contains "AzurePowerShell", "PowerShell", "Azure Portal")
| summarize make_set(ActivityStatusValue) by Caller, Resource, OperationSource

关键说明

  • GET请求仅加载页面框架,不会获取密钥明文;只有POST请求才会触发密钥的查询与返回
  • 存储账户诊断日志可提供调用者IP、请求状态码等信息,更适合检测异常访问行为

内容的提问来源于stack exchange,提问作者HarriS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 19:22:12