Azure Firewall Policyを理解するための前提
Firewall PolicyはAzure Firewallのsecurity/operational settingsを保持するtop-level resourceで、複数Firewallへ関連付けられる。 rule hierarchyはRule Collection Group (RCG) → Rule Collection (RC) → Rule。RCGとRCはpriorityを持つ。
Firewall rule processingは単純なRCG priorityだけではなくrule type順序があり、DNAT → Network → Applicationの順で評価される。 parent policyを設定するとrule collection groupsを継承でき、parent ruleはchildより先に処理される。
NAT rule collectionsはfirewall固有のためparentからinheritされない。必要なDNATはchild policy側で定義する。 Basic/Standard/Premium policyは利用可能featureが異なり、PremiumでTLS inspection/IDPS/URL filteringを扱う。
Control plane と data plane
仕組み
最初にparent policyのRCGをrule typeごとに評価対象へ置く。
DNAT passをpriority順に処理する。matchしたDNATはtranslationしてterminatingする。
Network rule passをpriority順に処理する。matchすればterminating。
Networkでmatchせず対象protocolならApplication rule passへ進む。
どのruleにもmatchしなければdefault denyとなる。
Packet / decision path
障害時はresource一覧ではなく、同じsource/destination/port/protocolで各enforcement pointを順に追います。
- RCG priorityは100刻み等で将来挿入余地を残す。
- parent policyはenterprise baselineだけにし、application-specific exceptionをchildへ置く。
- rule typeを跨ぐpriority番号だけで実行順を判断しない。
- DNATはinheritされないことをrelease/checklistへ明記する。
- Policy association変更はFirewallごとのimpactとrollbackを計画する。
設計判断
| 判断点 | 推奨 | 理由 |
|---|---|---|
| Parent / child | central baselineをparent、workload local rulesをchild。 | 組織統制とDevOps autonomyを分離できる。 |
| Rule grouping | RCGをowner/workload/change domainで分ける。 | 1巨大RCGよりreviewとdelegationをしやすい。 |
| Priority | 空きを残して採番し、順序意図をdoc/IaCで固定。 | 緊急rule挿入で全面renumberを避ける。 |
| SKU | Firewall SKUとPolicy SKU/feature要件を整合させる。 | Premium featureをStandard policyに期待しない。 |
確認手順
Azure Portal / Network Watcher
- Firewall Policy → Rule collection groupsでgroup/collection/type/priority/actionを確認。
- Policy settingsでDNS、Threat intelligence、Private IP ranges (SNAT)、TLS inspection、IDPSをSKUに応じ確認。
- Associated firewalls一覧で意図したFirewallだけに適用されているか確認。
Verification discipline
- subscription / resource group / resource ID / NIC / direction / 5-tupleを記録する。
- 同じ条件でbefore/afterを比較し、既存sessionとnew connectionを区別する。
- configuration、effective state、logs、application resultを別々の証拠として残す。
- 変更成功はcontrol-plane Succeededではなくobservable data-plane behaviorで判定する。
az network firewall policy show -g <rg> -n <policy> -o jsonc
az network firewall policy rule-collection-group list -g <rg> --policy-name <policy> -o tableGet-AzFirewallPolicy -ResourceGroupName <rg> -Name <policy>
障害切り分け
| 症状 | 疑う点 | 証拠 | 次の確認 |
|---|---|---|---|
| child Allowが効かない | parent ruleが先にterminating | parent/child RCGとrule type | baseline exception設計を見直す |
| Application ruleより後のつもりのNetwork ruleが先にmatch | rule type processing order | Firewall logsとRCG type | priority番号だけでなくtype順序で設計 |
| DNATが継承されない | NAT collection non-inheritance | child policy NAT list | 対象Firewall childにDNATを定義 |
| 一部Firewallだけ挙動違い | policy association/SKU/settings drift | associated firewallとpolicy ID | associationをsource of truthへ戻す |
変更時の確認と rollback
- Policy JSONとRCG exportを変更前に保存する。
- parent/child changeは両方のversionを記録し、rollback orderingを決める。
- association rollback後は対象Firewallのactual policy IDとnew-flow logsを確認する。