如何通过Logic App列出管理组订阅及动态标签并自动导出至SharePoint?
解决Logic App中获取Azure订阅标签并生成动态报表的问题
一、直接获取订阅级标签的正确方式
Logic App内置的“Get tags for each subscription”操作会递归拉取资源标签,并非订阅本身的标签。直接调用Azure Resource Manager (ARM) API可精准获取订阅标签:
- 在Logic App里添加HTTP操作,请求方法设为
GET - 请求URL填写:
https://management.azure.com/subscriptions/{subscriptionId}?api-version=2021-01-01(将{subscriptionId}替换为动态订阅ID变量) - 身份验证选择Managed Identity,确保该身份拥有
Microsoft.Subscriptions/subscriptions/read权限 - 解析返回的JSON响应,提取
tags字段,此处即为订阅本身的完整键值对标签
二、处理无标签订阅的动态列表生成
针对标签可能不存在的情况,用Logic App的变量和条件逻辑处理:
- 初始化一个数组变量(例如
subscriptionReportData),用于存储最终报表数据 - 遍历订阅列表时,对每个订阅执行上述ARM API请求后,添加条件判断:
- 若响应中的
tags不为空,构造结构化对象:{ "订阅名称": "{订阅名}", "标签": {标签键值对} } - 若
tags为空,构造对象:{ "订阅名称": "{订阅名}", "标签": "无标签" }
- 若响应中的
- 将构造好的对象追加到数组变量中
三、避免资源标签干扰的注意事项
- 不要使用遍历订阅内资源的操作来获取订阅标签,这类操作会返回所有嵌套资源的标签,易与订阅标签混淆
- 如果报表需要同时包含资源标签,可在获取订阅标签后,单独添加“List resources in subscription”操作,提取资源标签并与订阅标签分开展示
四、修正Kusto查询以获取标签键值对
之前的Kusto查询仅拿到标签名,是因为未正确解析标签的JSON结构,调整后的查询如下:
AzureActivity | where OperationNameValue == "Microsoft.Subscriptions/subscriptions/write" | extend SubscriptionTags = parse_json(Properties).tags | project SubscriptionId, SubscriptionName, SubscriptionTags | where isnotempty(SubscriptionTags)
该查询从Azure Activity日志中解析订阅的完整标签键值对,需确保日志留存时间覆盖所需的历史范围。
内容的提问来源于stack exchange,提问作者Luix O
相关产品推荐
相关产品推荐

