如何快速查找未随Azure Function删除的僵尸Azure Storage资源?
排查无关联Azure Function的僵尸存储资源的方法
本文所述僵尸存储指:曾绑定Azure Function业务、对应Function已删除、无其他上层业务使用仍占用资源的存储账户
方法1:Azure Resource Graph批量查询(推荐)
直接跨订阅/资源组批量筛选候选资源,无需逐台核对日志,查询逻辑为:先拉取所有存活Azure Function关联的存储账户列表,再匹配所有带有Function专属标识的存储账户,过滤出无对应存活Function关联的资源。
查询语句如下:
// 提取所有现存Function App关联的存储账户名称 Resources | where type == 'microsoft.web/sites' | where kind contains 'functionapp' | extend webjobStorage = tostring(properties.siteConfig.appSettings[?name == 'AzureWebJobsStorage'].value) | extend storageName = replace_string(split(webjobStorage, ';')[1], 'AccountName=', '') | project storageName | distinct storageName // 右反联结匹配带Function标识且未被现存Function关联的存储 | join kind=rightanti ( Resources | where type == 'microsoft.storage/storageaccounts' // 筛选曾绑定过Function的存储特征:存在专用隐藏标签 | extend hasFunctionBindHistory = tags['hidden-related:azure-webjobs-host'] is not null | where hasFunctionBindHistory == true | project StorageName=name, ResourceGroup=resourceGroup, SubscriptionId=subscriptionId, Location=location ) on $left.storageName == $right.StorageName
查询返回的列表即为候选僵尸存储,可进一步核对访问特征确认。
方法2:单存储手动排查
如果仅需核对少量存储,可直接通过存储属性判断:
- 查看存储容器列表,是否存在
azure-webjobs-secrets、azure-webjobs-hosts两个Function专属默认容器,存在即说明该存储曾绑定过Function业务 - 查看存储「指标」页面,筛选过去30天的
Transactions指标,若读写请求量持续为0可初步判定无业务使用 - 查看存储「活动日志」,筛选过去90天的操作记录,无Function关联操作且无其他业务访问记录即可判定为僵尸资源
安全提示:删除前请确认存储无其他上层业务(如静态网站、VM磁盘、数据库备份等)依赖,建议先开启存储软删除功能,观察7天无异常报错后再彻底清除资源。
内容的提问来源于stack exchange,提问作者Yuzuki Ayase
相关产品推荐
相关产品推荐

