Governance Anti Patterns Networking - Azure/az-prototype GitHub Wiki
Network isolation, firewall rules, and public exposure detection
Domain: networking
| Check | Description |
|---|---|
| ANTI-NET-001 | Public network access is enabled — disable public access and use private endpoints. This applies to ALL environments including POC. |
| ANTI-NET-002 | Overly permissive network rule detected (0.0.0.0/0) — use specific IP ranges or service tags instead. |
| ANTI-NET-003 | Direct external ingress detected — consider using API Management or Front Door as a gateway for production. |
| ANTI-NET-004 | VNet integration disabled or missing — enable VNet integration for backend connectivity to private resources. |
| ANTI-NET-005 | Empty IP restrictions — configure IP restrictions or use VNet integration to limit access. |
| ANTI-NET-006 | Private endpoint references a VNet as its privateLinkServiceId — VNets are not valid Private Link targets. ARM will reject this with HTTP 400. |
| ANTI-NET-007 | VNet/NSG diagnostic settings must use category = "AllMetrics" only — log categories are not supported and cause ARM errors. |
| ANTI-NET-008 | NSGs do NOT support diagnostic settings — remove the diagnostic settings resource entirely. |
| ANTI-NET-009 | Oversized address space detected — use /22 to /24 for POC subnets, /20 to /22 for VNets. |
| ANTI-NET-010 | NSG rule uses wildcard (*) for source or destination — use specific IP ranges, CIDR blocks, or service tags. |
Public network access is enabled — disable public access and use private endpoints. This applies to ALL environments including POC.
Rationale: Public network access exposes service data planes to internet-based attacks; all PaaS services should disable public access and use private endpoints.
Agents: terraform-agent, bicep-agent
| Services | Triggers On | Correct Patterns |
|---|---|---|
|
|
|
Overly permissive network rule detected (0.0.0.0/0) — use specific IP ranges or service tags instead.
Rationale: Allowing all internet traffic (0.0.0.0/0) in NSG or firewall rules defeats network segmentation and exposes resources to attack.
Agents: terraform-agent, bicep-agent
| Services | Triggers On | Correct Patterns |
|---|---|---|
|
|
Direct external ingress detected — consider using API Management or Front Door as a gateway for production.
Rationale: Direct external ingress bypasses WAF, rate limiting, and centralized authentication that API Management or Front Door provides.
Agents: terraform-agent, bicep-agent
| Services | Triggers On | Correct Patterns |
|---|---|---|
|
|
VNet integration disabled or missing — enable VNet integration for backend connectivity to private resources.
Rationale: Without VNet integration, compute resources cannot access private endpoints or backend services on private networks.
Agents: terraform-agent, bicep-agent
| Services | Triggers On | Correct Patterns |
|---|---|---|
|
|
Empty IP restrictions — configure IP restrictions or use VNet integration to limit access.
Rationale: Empty IP restrictions allow all internet traffic to reach the app directly, bypassing network controls.
Agents: terraform-agent, bicep-agent
| Services | Triggers On | Correct Patterns |
|---|---|---|
|
|
Private endpoint references a VNet as its privateLinkServiceId — VNets are not valid Private Link targets. ARM will reject this with HTTP 400.
Rationale: Private endpoints connect to specific Azure PaaS services, not VNets. ARM will reject this with HTTP 400.
Agents: terraform-agent, bicep-agent
| Services | Triggers On | Correct Patterns |
|---|---|---|
|
|
|
VNet/NSG diagnostic settings must use category = "AllMetrics" only — log categories are not supported and cause ARM errors.
Rationale: VNets and NSGs do not support log category groups. Using categoryGroup = "allLogs" causes ARM HTTP 400 validation errors.
Agents: terraform-agent, bicep-agent
| Services | Triggers On | Correct Patterns |
|---|---|---|
|
|
|
NSGs do NOT support diagnostic settings — remove the diagnostic settings resource entirely.
Rationale: NSGs do not support diagnostic settings at all (no logs, no metrics). The ARM API will reject with HTTP 400.
Agents: terraform-agent, bicep-agent
| Services | Triggers On | Correct Patterns |
|---|---|---|
|
|
|
Oversized address space detected — use /22 to /24 for POC subnets, /20 to /22 for VNets.
Rationale: A /16 allocates 65,536 IPs and a /8 allocates 16 million — wildly excessive for POC workloads that typically need fewer than 1,000 addresses.
Agents: terraform-agent, bicep-agent
| Services | Triggers On | Correct Patterns |
|---|---|---|
|
|
|
NSG rule uses wildcard (*) for source or destination — use specific IP ranges, CIDR blocks, or service tags.
Rationale: Wildcard rules negate the purpose of NSGs and allow any traffic through, creating an open network.
Agents: terraform-agent, bicep-agent
| Services | Triggers On | Correct Patterns |
|---|---|---|
|
|
|