跟踪 Azure 防火墙规则集更改

本文介绍如何使用 Azure Resource Graph 监视和跟踪对 Azure 防火墙规则集合组的更改。 更改跟踪通过提供规则集修改的详细历史记录来帮助维护安全符合性、审核配置修改和解决问题。

Azure Resource Graph 提供更改分析数据,可帮助你跟踪在 Azure 防火墙规则收集组上检测到更改时间。 可以在订阅、管理组或租户中全面查看属性更改的详细信息并查询更改。

Azure 防火墙规则集合组的更改跟踪使您能够:

  • 监视配置更改:跟踪防火墙规则和策略的所有修改
  • 维护合规性:为安全性和合规性要求生成审核线索
  • 排查问题:确定何时进行了可能影响连接的更改
  • 分析趋势:了解一段时间内规则修改中的模式

先决条件

在跟踪规则集更改之前,请验证是否满足以下要求:

  • 你有一个 Azure 防火墙,其中包含已配置的规则集合组
  • 你具有访问 Azure Resource Graph 的适当权限
  • Azure 防火墙正在使用 Azure 防火墙策略(而不是经典规则)

访问 Azure Resource Graph 管理器

若要运行更改跟踪查询,需要访问 Azure Resource Graph 资源管理器:

  1. 登录到 Azure 门户
  2. 搜索并选择 Resource Graph 浏览器
  3. 在查询窗口中,可以运行以下部分中介绍的更改跟踪查询

基本更改跟踪查询

使用此查询可全面查看对 Azure 防火墙规则集合组的所有更改:

networkresourcechanges
| where properties contains "microsoft.network/firewallpolicies/rulecollectiongroups"
| extend parsedProperties = parse_json(properties)
| extend TargetResource = tostring(parsedProperties.targetResourceId),
         Timestamp = todatetime(parsedProperties.changeAttributes.timestamp),
         Changes = todynamic(parsedProperties.changes),
         ChangeType = tostring(parsedProperties.changeType),
         PreviousSnapshotId = tostring(parsedProperties.changeAttributes.previousResourceSnapshotId),
         NewSnapshotId = tostring(parsedProperties.changeAttributes.newResourceSnapshotId),
         CorrelationId = tostring(parsedProperties.changeAttributes.correlationId),
         ChangesCount = toint(parsedProperties.changeAttributes.changesCount),
         TenantId = tostring(tenantId),
         Location = tostring(location),
         SubscriptionId = tostring(subscriptionId),
         ResourceGroup = tostring(resourceGroup),
         FirewallPolicyName = extract('/firewallPolicies/([^/]+)/', 1, tostring(id))
| mv-expand ChangeKey = bag_keys(Changes)
| extend ChangeDetails = todynamic(Changes[tostring(ChangeKey)])
| extend RuleCollectionName = extract('properties\\.ruleCollections\\["([^"]+)"\\]', 1, tostring(ChangeKey))
| where isnotempty(RuleCollectionName)
| summarize Changes = make_list(pack("ChangeKey", ChangeKey, "PreviousValue", tostring(ChangeDetails.previousValue), "NewValue", tostring(ChangeDetails.newValue)))
    by Timestamp = format_datetime(Timestamp, 'yyyy-MM-dd HH:mm:ss'),
       TenantId,
       SubscriptionId,
       ResourceGroup,
       Location,
       TargetResource,
       FirewallPolicyName,
       RuleCollectionName,
       ChangeType,
       PreviousSnapshotId,
       NewSnapshotId,
       CorrelationId,
       ChangesCount
| project Timestamp,
          TenantId,
          SubscriptionId,
          ResourceGroup,
          Location,
          TargetResource,
          FirewallPolicyName,
          RuleCollectionName,
          ChangeType,
          PreviousSnapshotId,
          NewSnapshotId,
          CorrelationId,
          ChangesCount,
          Changes
| order by Timestamp desc

了解查询结果

更改跟踪查询为每个检测到的更改返回以下信息:

领域 Description
时间戳 发生更改时
SubscriptionId 包含防火墙的 Azure 订阅
ResourceGroup 包含防火墙策略的资源组
FirewallPolicyName 受影响的防火墙策略的名称
RuleCollectionName 受影响的规则集合的名称
ChangeType 更改类型(创建、更新、删除)
ChangesCount 已更改的属性数
更改 更改内容的详细列表,包括以前的值和新值
CorrelationId 用于关联相关更改的唯一标识符

根据时间段筛选更动

若要专注于最近的更改,可以向查询添加时间筛选器:

networkresourcechanges
| where properties contains "microsoft.network/firewallpolicies/rulecollectiongroups"
| where todatetime(properties.changeAttributes.timestamp) >= ago(7d)  // Last 7 days
// ... rest of query

按特定防火墙策略进行筛选

若要跟踪特定防火墙策略的更改,请执行以下作:

networkresourcechanges
| where properties contains "microsoft.network/firewallpolicies/rulecollectiongroups"
| where id contains "/firewallPolicies/your-policy-name"
// ... rest of query

设置自动监视

对于持续监视,请考虑设置:

  • 计划查询:使用 Azure 逻辑应用或 Azure 自动化按计划运行查询
  • 警报:基于更改模式创建 Azure Monitor 警报
  • 报表:将结果导出到用于报告的存储或可视化工具

最佳做法

实现规则集更改跟踪时:

  • 定期监控:设置定期执行查询以便及时捕获更改
  • 保留策略:规划长期存储符合性变更数据
  • 访问控制:根据安全要求限制对更改跟踪数据的访问
  • 集成:考虑与现有的 SIEM 或监视工具集成

Troubleshooting

如果结果中未看到预期更改:

  • 验证你使用的是 Azure 防火墙策略(而不是经典规则)
  • 检查查询中的时间段是否涵盖发生更改的时间
  • 确保拥有访问 Azure Resource Graph 所需的权限
  • 确认筛选器中的资源名称正确