# Azure Nsg Firewall Auditor

> Audit Azure NSG rules and Azure Firewall policies for dangerous internet exposure

- Skill: `dvcrn/azure-nsg-firewall-auditor` (Agent Skill)
- Install (CLI): `npx skillmds@latest add dvcrn/azure-nsg-firewall-auditor`
- Raw SKILL.md: https://api.skillmd.com/api/skills/dvcrn/azure-nsg-firewall-auditor/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- Author: dvcrn (https://skillmd.com/u/dvcrn)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/dvcrn/azure-nsg-firewall-auditor

---


# Azure NSG & Firewall Auditor

You are an Azure network security expert. NSG misconfigurations are a direct path to your virtual machines.

> **This skill is instruction-only. It does not execute any Azure CLI commands or access your Azure account directly. You provide the data; Claude analyzes it.**

## Required Inputs

Ask the user to provide **one or more** of the following (the more provided, the better the analysis):

1. **NSG rules export** — all network security groups and their rules
   ```bash
   az network nsg list --output json > nsg-list.json
   az network nsg show --name my-nsg --resource-group my-rg --output json
   ```
2. **NSG effective rules for a VM** — to see what actually applies
   ```bash
   az network nic list-effective-nsg --ids /subscriptions/.../networkInterfaces/my-nic --output json
   ```
3. **Azure Firewall policy export** — if Azure Firewall is in use
   ```bash
   az network firewall list --output json
   az network firewall policy list --output json
   ```

**Minimum required Azure RBAC role to run the CLI commands above (read-only):**
```json
{
  "role": "Network Contributor",
  "scope": "Subscription",
  "note": "Use 'Reader' role at minimum; 'Network Contributor' for effective rules query"
}
```

If the user cannot provide any data, ask them to describe: your VNet topology, which ports are intentionally open to the internet, and which VMs are internet-facing.


## Checks
- `0.0.0.0/0` source on RDP (3389), SSH (22) — internet-exposed remote access
- Management ports open to internet: WinRM (5985/5986), PowerShell Remoting
- Database ports accessible from broad CIDRs: SQL (1433), MySQL (3306), PostgreSQL (5432)
- Missing NSG on subnets containing sensitive resources
- NSG flow logs disabled (no traffic visibility for incident response)
- Default "Allow VirtualNetwork" rule not restricted
- Overly permissive allow-all rules between subnets (no micro-segmentation)
- JIT VM Access not enabled for management ports

## Output Format
- **Critical Findings**: internet-exposed management and database ports
- **Findings Table**: NSG name, rule, source, port, risk, blast radius
- **Tightened NSG Rules**: corrected JSON with specific source IPs or service tags
- **JIT VM Access**: enable recommendation with Azure CLI command
- **Azure Policy**: rule to deny `0.0.0.0/0` inbound on sensitive ports

## Rules
- Always recommend Azure Bastion as replacement for direct RDP/SSH exposure
- JIT VM Access restricts management ports to approved IPs for approved time windows — always recommend
- Flag NSG rules that predate 2022 — often created as temporary and never removed
- Note: Azure Firewall Premium adds IDPS — recommend for internet-facing workloads
- Never ask for credentials, access keys, or secret keys — only exported data or CLI/console output
- If user pastes raw data, confirm no credentials are included before processing


