Skip to main content
97 documented footguns and counting
RSS

The Azure Footguns Database

The ways Azure quietly costs you money or exposes you to risk, documented one by one. What it is, why it happens, what it costs, and how to fix it.

Every entry has a stable ID: AZF-0001 is Azure Footgun No. 1. Search or filter by service, category, or ID.

97 footguns

Search results

CostHighAzure Footgun No. 1

A forgotten DDoS Protection Plan bills ~$2,944/mo while protecting nothing

Network DDoS Protection Plans charge a flat monthly fee even with zero VNets attached. A detached plan is pure waste.

~$2,944/month at list price while unassociated Basis: Azure list price. Estimate, not a measurement.

Azure DDoS ProtectionRead
SecurityReliabilityCriticalAzure Footgun No. 2

Key Vault purge protection is off by default, so a deleted vault can be gone for good

Without purge protection, a deleted Key Vault can be permanently purged before the retention window ends, taking the data its keys encrypted with it.

Permanent, unrecoverable loss of keys and secrets if the vault is purged Basis: Azure behavior (authored assessment). Estimate, not a measurement.

Azure Key VaultRead
CostGovernanceMediumAzure Footgun No. 3

An unattached managed disk bills its full provisioned size forever

Delete a VM and its data disks usually survive. A managed disk in the Unattached state bills its full provisioned capacity whether or not anything reads it.

~$135/month at list price for a 1 TiB P30 premium SSD doing nothing Basis: Azure list price. Estimate, not a measurement.

Azure Managed DisksRead
CostGovernanceLowAzure Footgun No. 4

A reserved Standard public IP keeps billing after whatever it fronted is gone

Standard SKU public IPs are always statically allocated and always billed. When the load balancer or NIC they fronted goes away, the IP keeps charging.

~$3.65/month at list price per idle Standard static IP Basis: Azure list price. Estimate, not a measurement.

Azure Virtual NetworkRead
CostMediumAzure Footgun No. 5

An Azure Bastion bills by the hour even on the days nobody connects

Bastion is billed per deployment-hour, not per session. A host left running in a low-traffic or abandoned VNet charges around the clock for sessions nobody opens.

~$140/month at list price for a Basic SKU, billed hourly regardless of use Basis: Azure list price. Estimate, not a measurement.

Azure BastionRead
SecurityHighAzure Footgun No. 6

An NSG rule allowing 0.0.0.0/0 inbound exposes whatever is behind it to the entire internet

A single inbound allow rule with source Any (0.0.0.0/0) turns whatever sits behind it into a target for the internet's background scanning traffic.

Whatever listens behind the rule is reachable from the entire internet Basis: Azure behavior (authored assessment). Estimate, not a measurement.

Azure Network Security GroupsRead
CostGovernanceHighAzure Footgun No. 7

An idle VPN Gateway with zero tunnels bills ~$140/mo and up, 24/7

A VPN Gateway bills a fixed hourly rate whether or not a single tunnel is up. There is no stopped state, so an idle gateway is pure waste.

~$140/month at list price for a VpnGw1 with zero active connections Basis: Azure list price. Estimate, not a measurement.

Azure VPN GatewayRead
CostGovernanceMediumAzure Footgun No. 8

An unattached NAT Gateway routes nothing but still bills ~$32/mo base

A NAT Gateway with no subnet associations provides zero outbound connectivity, but its hourly base rate runs 24/7 with no way to pause it.

~$32/month at list price for the base rate alone, before any data processing Basis: Azure list price. Estimate, not a measurement.

Azure NAT GatewayRead
CostGovernanceHighAzure Footgun No. 9

An idle Application Gateway serving zero requests still bills ~$144/mo and up

A fully configured Application Gateway left running bills a flat hourly rate even when it serves zero requests. The only ways to end the charge are to stop it or delete it.

~$144/month at list price for a Standard_v2 that serves no traffic Basis: Azure list price. Estimate, not a measurement.

Azure Application GatewayRead
CostHighAzure Footgun No. 10

A "Stopped" VM keeps billing full compute; only "Stopped (deallocated)" stops the meter

Shutting a VM down from inside the guest OS leaves it Stopped, not Deallocated. Azure keeps charging full compute, disks, and reserved IPs as if it were running.

the VM's full hourly compute rate, plus disks and reserved IPs, for as long as it sits Stopped Basis: Azure list price. Estimate, not a measurement.

Azure Virtual MachinesRead
CostGovernanceLowAzure Footgun No. 11

Disk snapshots nobody deletes bill per-GB storage forever

A disk snapshot is a point-in-time copy that never expires on its own. Kept past its useful life, it accrues per-GB storage charges every month until someone deletes it.

~$0.05/GB/month at list price for Standard HDD snapshot storage, indefinitely Basis: Azure list price. Estimate, not a measurement.

Azure Managed DisksRead
CostGovernanceHighAzure Footgun No. 12

An App Service Plan with zero apps still bills its full tier rate

An App Service Plan bills for its reserved compute tier, not for the apps on it. Delete every app and the plan keeps charging the full rate for hosting nothing.

~$55/mo (B1) to ~$146/mo (P1v2) at list price with no apps hosted Basis: Azure list price. Estimate, not a measurement.

Azure App ServiceRead
CostMediumAzure Footgun No. 13

A storage account with zero transactions still bills for every GB it holds

A storage account with zero transactions still bills for the data sitting in it. The charge is the stored bytes, not the activity, so an untouched account keeps costing money.

~$0.02/GB/month at list price for stored data: an idle 1 TiB account is ~$20/month for bytes nobody reads Basis: Azure list price. Estimate, not a measurement.

Azure StorageRead
CostGovernanceHighAzure Footgun No. 14

An empty SQL Elastic Pool bills its full provisioned capacity with no databases in it

A SQL Elastic Pool with no databases keeps billing its provisioned eDTU/vCore capacity. The pool charges for the compute it reserves, whether or not a single database sits in it.

~$75–$465/month at list price depending on tier (Basic/Standard/Premium) for a pool with zero databases Basis: Azure list price. Estimate, not a measurement.

Azure SQL DatabaseRead
CostMediumAzure Footgun No. 15

An attached NAT Gateway passing zero traffic keeps billing; there is no paused state

A NAT Gateway still wired to a subnet but moving zero bytes and packets keeps billing its hourly base rate. Azure has no way to pause it.

~$32/month at list price for the base resource charge, plus data-processing, even at zero bytes Basis: Azure list price. Estimate, not a measurement.

Azure NAT GatewayRead
CostGovernanceHighAzure Footgun No. 16

An ExpressRoute circuit that was never provisioned still bills, and its gateway bills separately

An ExpressRoute circuit that never completed provisioning with a provider bills its full monthly rate anyway, and the gateway you stood up for it bills on top.

$51 to $11,235/month at list price by bandwidth and peering, plus a separate gateway charge Basis: Azure list price. Estimate, not a measurement.

Azure ExpressRouteRead
CostGovernanceLowAzure Footgun No. 17

An empty Traffic Manager profile routes nothing and holds a DNS name for no reason

A Traffic Manager profile with no endpoints can resolve nothing, yet it holds a trafficmanager.net name and sits in inventory as finished-looking dead config.

Negligible standalone charge (Traffic Manager has no per-profile fee); the cost is the abandoned config it signals Basis: Azure list price. Estimate, not a measurement.

Azure Traffic ManagerRead
CostLowAzure Footgun No. 18

A Traffic Manager profile with endpoints but zero DNS queries keeps paying for health checks

A profile that still has endpoints but receives zero DNS queries keeps billing per-endpoint health monitoring for a name no client is using anymore.

~$0.36/endpoint/month at list price for health checks that keep running while nobody resolves the name Basis: Azure list price. Estimate, not a measurement.

Azure Traffic ManagerRead
CostGovernanceLowAzure Footgun No. 19

A Private DNS zone with zero VNet links resolves nothing and still bills

A Private DNS zone needs a virtual network link to answer queries. With zero links it resolves nothing, yet it keeps billing its per-zone base charge.

~$0.50/month per zone at list price, plus query charges, while resolving nothing Basis: Azure list price. Estimate, not a measurement.

Azure DNS (Private)Read
CostGovernanceLowAzure Footgun No. 20

A Front Door WAF policy attached to no profile protects nothing and still bills

A Front Door WAF policy only inspects traffic it is linked to. With no security-policy or endpoint links it protects nothing, but it keeps billing its per-policy rate.

~$5-$20/month per policy at list price (classic Front Door WAF) while attached to nothing Basis: Azure list price. Estimate, not a measurement.

Azure Front DoorRead
CostLowAzure Footgun No. 21

An idle Container Registry with zero pulls and pushes bills its tier's daily rate

Azure Container Registry bills a fixed daily rate for its tier regardless of use. A registry with zero pulls and pushes keeps charging as if it were in active service.

~$5/month Basic, ~$20 Standard, ~$50 Premium at list price while idle Basis: Azure list price. Estimate, not a measurement.

Azure Container RegistryRead
CostHighAzure Footgun No. 22

An oversized VM runs at single-digit CPU while billing for a SKU the workload never uses

A VM sits at a fraction of its provisioned CPU and memory, so you pay for a SKU far larger than the workload uses. Nothing is broken, so nothing prompts a resize.

~$210/month at list price for the gap between a D8s_v5 and the D2s_v5 the workload actually needs Basis: Azure list price. Estimate, not a measurement.

Azure Virtual MachinesRead
CostMediumAzure Footgun No. 23

A single resource's daily spend spikes above its baseline while the subscription budget stays quiet

One resource's daily cost jumps sharply above its normal level. Subscription-total budget alerts don't see it, so the spike inflates the bill until month-end.

The overspend equals the gap between a resource's baseline daily cost and its spiked daily cost, sustained until someone notices Basis: Azure behavior (authored assessment). Estimate, not a measurement.

Azure Cost ManagementRead
CostMediumAzure Footgun No. 24

A resource quietly settles into a new, higher cost baseline and the step-up becomes the new normal

A resource's spend steps up to a permanently higher level and stays there. Unlike a spike it never comes back down, so it's easy to accept as the new normal.

The step-up in daily cost, paid every day indefinitely because the new higher level never trips a threshold twice Basis: Azure behavior (authored assessment). Estimate, not a measurement.

Azure Cost ManagementRead

Every footgun, by Azure service

The complete index of all 97 published entries. The search above is faster if you know what you are looking for; this is the list to browse.

Azure Logic Apps

Azure Resource Manager

Azure Storage

Azure Storage / App Service

Azure Storage / SQL / App Service

Azure VPN Gateway

Azure Virtual Network

Azure Web Application Firewall

Stop hunting these one at a time

Every footgun in this database, checked on every scan, inside your own tenant. You find out from a report, not from the bill.

When the 14 days end, billing starts on your Azure invoice at your tier. One toggle in Settings turns it off, any time.