Microsoft Azure

VMs, disks, SQL, and subscription security in one Reader scan.

Azure has its own classic waste patterns: VMs stopped in the OS but never deallocated (still billing), managed disks orphaned by deleted VMs, over-replicated storage, and premium services left running in dev.

Nuvozy reads VMs/VMSS, disks, SQL, AKS, App Service, Cosmos, storage, Key Vault, and networking across your subscriptions with a Reader-only service principal, flagging both spend and subscription-level security posture, and even platforms facing retirement before the deadline bites.

Protecting nothing

An Azure DDoS Network Protection plan carries a flat monthly fee even with no virtual networks attached - so you may be paying the full fee for coverage you're not using.

Still billing

VMs stopped in the OS but not deallocated keep charging; we flag them to actually stop the meter.

Deadline

Retired-platform migrations (APIM stv1, Logic Apps ISE, Edgio CDN, classic App Insights) surfaced before they break.

What we scan on Azure

A representative sample of the Azure checks, grouped by service domain. Cost waste and security risk are surfaced in the same read-only pass. The complete, searchable list is further down this page.

Compute & containers

VMs, VMSS, AKS, App Service, dedicated hosts, Batch.

VMs stopped but not deallocated

Stopped in the OS, still billing; deallocate to stop paying.

Oversized VMs & VMSS

Right-size candidates from real metrics.

AKS node right-sizing

Clusters provisioned beyond demand.

App Service & dedicated host waste

Plans and hosts running for trickle workloads.

Storage & database

Managed disks, storage accounts, SQL, Cosmos, Redis.

Unattached managed disks

Disks orphaned by deleted VMs, still billing.

Storage redundancy right-sizing

GRS/RA-GRS where LRS would do.

SQL Multi-region & elastic-pool fit

Geo-replicas and pools sized beyond need.

Cosmos DB RU over-provisioning

Throughput reserved far above consumption.

Network & long tail

Public IPs, DDoS plans, load balancers, retired platforms.

DDoS plan with no networks attached

A Network Protection plan billed a flat monthly fee in full, even when it protects no virtual networks.

Unattached public IPs

Static IPs pointing at nothing, billing monthly.

Retired-platform migrations

APIM stv1, Logic Apps ISE, Edgio CDN, classic App Insights.

Managed HSM in non-prod

A premium security appliance billing in dev/test.

Security & subscription posture

NSGs, Key Vault, role assignments, Defender, activity logs.

NSG exposure to the internet

Network security groups letting the world in.

Owner sprawl & custom-role risk

Over-broad role assignments across subscriptions.

Key Vault & secret hygiene

Access policy and rotation gaps.

Stale credentials & guest privileges

Identity risk via optional Graph reads.

Every check we run on Azure

All 217 checks, generated directly from the scanner so this list matches what actually runs. Search for a service to see whether your stack is covered.

  • Commitment opt-in

    Azure Hybrid Benefit underused

    Windows / SQL spend in the billing data that appears to run at license-included rates where Azure Hybrid Benefit could apply.

  • Commitment opt-in

    Reservation coverage gap

    On-demand VM/SQL spend that an Azure Reservation would reduce, from Microsoft's own reservation recommendations.

  • Commitment opt-in

    Reservation under-utilization

    Purchased Azure Reservations whose average utilization is below the efficiency threshold. Paying for unused commitment.

  • Commitment opt-in

    Savings plan coverage gap

    Compute benefit / savings-plan utilization is low (or absent), indicating compute spend not covered by a savings plan.

  • Compute

    AI Search Standard+ tiers in non-prod

    AI Search services on Standard or higher SKUs whose name/tags look non-production. Search bills a fixed fee per unit (replica x partition) around the clock. Dev/test indexes almost always fit Basic (or Free).

  • Compute

    AI Search replicas > 1 in non-prod

    Non-production AI Search services running more than one replica. Extra replicas exist for query HA/throughput. Dev/test rarely needs either, and each replica multiplies the per-unit fee. Standard+ non-prod services are covered by AZ_SEARCH_STANDARD_NONPROD instead.

  • Compute

    AKS Standard tier on non-prod clusters

    Dev/test AKS clusters paying the Standard-tier (uptime SLA) management fee (~$73/mo). The Free tier suffices off-prod.

  • Compute

    AKS node pools on managed OS disks

    Node pools using network-attached managed OS disks instead of ephemeral OS disks. Ephemeral disks are free (they live on the VM's local/cache storage), faster, and ideal for stateless nodes. But require a VM size whose cache fits the image, so this stays informational and default-off.

  • Compute

    App plans where every site is stopped

    Paid App Service plans whose sites are ALL stopped. Stopped sites cost nothing, but the plan's instances bill 24/7 regardless. Complements AZ_APP_PLAN_EMPTY (zero sites).

  • Compute

    Batch pools holding dedicated nodes in non-prod

    Batch pools with steady dedicated nodes allocated in accounts/pools that look non-production. Dedicated nodes bill the VM rate 24/7 between job runs. Non-prod pools should scale to zero (autoscale formula or low-priority/Spot nodes).

  • Compute

    Container groups running 30+ days

    ACI container groups alive for 30+ days with restart-policy Always. ACI's per-second pricing is built for bursts. A permanent service is usually cheaper on a small VM, App Service, or AKS.

  • Compute opt-in

    Cost recommendations (Azure Advisor)

    Microsoft Advisor cost recommendations. VM shutdown / resize and reservation purchases. With Advisor's own projected savings.

  • Compute

    Dedicated hosts running 0-1 VMs

    Dedicated hosts placing one VM or none. A host bills its full hourly rate regardless of placements. An empty host is pure waste, and a single-VM host usually costs several times the equivalent standalone VM.

  • Compute

    Dev AKS clusters without Spot node pools

    Non-prod clusters (name/tag inference) whose user pools all run regular-priority VMs. Spot pools cut node compute 60-90% for eviction-tolerant dev workloads. Informational.

  • Compute uses metrics

    Elastic Premium plans with near-zero executions

    Function App Elastic Premium (EP) plans whose function apps executed almost nothing over the lookback. EP pre-warmed instances bill 24/7; idle workloads belong on Consumption.

  • Compute

    Empty App Service plans

    Paid App Service plans hosting zero sites. The plan bills its full instance price whether or not any app is deployed.

  • Compute

    HDInsight clusters running in non-prod

    Running HDInsight clusters whose name/tags look non-production. HDInsight cannot be paused. Every node bills VM rate plus the HDInsight surcharge 24/7, so dev clusters should be deleted and recreated on demand (storage is decoupled).

  • Compute

    Long-deallocated zombie VMs

    VMs deallocated for 30+ days. Compute is free, but their managed disks and static public IPs keep billing every month.

  • Compute

    Non-prod AKS clusters running 24/7

    Dev/test/staging AKS clusters (name/tag inference) running around the clock. `az aks stop` deallocates every node pool off-hours.

  • Compute

    Non-prod VMs not using Spot pricing

    Running non-prod VMs on regular (pay-as-you-go) priority. Spot offers 60-90% discounts for interruptible workloads. Informational: eviction tolerance can't be verified from ARM.

  • Compute

    Non-prod VMs without auto-shutdown

    Running VMs that look non-production with no enabled DevTest auto-shutdown schedule targeting them. Burning nights and weekends for nothing.

  • Compute

    Non-prod container apps with always-on replicas

    Container apps in non-production environments with minReplicas >= 1. Warm replicas bill the idle rate around the clock, while dev/test apps can usually scale to zero and eat the cold start.

  • Compute uses metrics

    Oversized VMs (low CPU)

    Running VMs averaging < 5% CPU with peaks < 40% over the lookback window. One size down typically halves the bill.

  • Compute

    Premium Databricks workspaces in non-prod

    Premium-SKU Databricks workspaces whose name/tags look non-production. The premium tier adds ~$0.15 per DBU on every cluster-hour the workspace runs.

  • Compute

    Premium disks on burstable B-series VMs

    B-series (burstable, cost-optimized) VMs attached to Premium SSD disks. A sizing mismatch: the VM throttles long before Premium IOPS matter. Standard SSD usually suffices.

  • Compute uses metrics

    Scale sets with low average CPU

    VM scale sets whose fleet-average CPU stayed under 10% (peak < 40%) over 14+ days. Reduce instance count or downsize the VM size.

  • Compute

    Synapse Spark pools without auto-pause

    Spark (big data) pools with auto-pause explicitly disabled. The pool's nodes keep billing per vCore-hour after the last session ends until someone remembers to shut them down.

  • Compute

    VMs stopped but not deallocated

    VMs in 'stopped' power state (shut down from the OS) still bill full compute. Only 'az vm deallocate' releases the hardware and stops the meter.

  • Compute

    Windows VMs possibly missing Hybrid Benefit

    Running Windows VMs without Azure Hybrid Benefit. AHB removes the in-VM Windows license charge for orgs with Software Assurance. Informational: license entitlement can't be verified from ARM.

  • Database uses metrics

    Cosmos DB low RU utilization

    Provisioned-throughput accounts whose normalized RU consumption never exceeded 20% of the provisioned ceiling. Scale-down or serverless candidates.

  • Database uses metrics

    Cosmos DB provisioned RU/s on idle accounts

    Provisioned-throughput Cosmos DB (SQL-API) accounts that served almost no request units over the lookback, priced from their actual enumerated per-container/database provisioned RU/s rather than the 400 RU/s account-minimum floor.

  • Database

    Cosmos multi-region writes in non-prod

    Cosmos accounts with multi-region writes enabled that look non-production. Every write region bills its own full RU provision. Multi-write roughly doubles the bill per region.

  • Database uses metrics

    GP flexible servers fit for burstable compute

    General Purpose / Memory Optimized flexible servers with low sustained CPU. The burstable (B-series) tier serves the same load for a fraction of the price.

  • Database

    Geo-replicated SQL secondaries in non-prod

    Geo-replication secondaries on databases whose name/tags look non-production. A geo secondary bills the FULL price of a second database. Rarely justified for dev/test.

  • Database uses metrics

    Idle Cosmos DB accounts

    Provisioned-throughput Cosmos DB accounts that served almost no request units over the lookback. Provisioned RU/s bill around the clock whether queried or not.

  • Database uses metrics

    Idle MySQL flexible servers

    MySQL flexible servers averaging < 5% CPU over 14+ days. Stop, downsize, or delete.

  • Database uses metrics

    Idle PostgreSQL flexible servers

    PostgreSQL flexible servers averaging < 5% CPU over 14+ days. Stop, downsize, or delete.

  • Database uses metrics

    Idle Redis caches

    Redis caches with ~zero connected clients and near-zero commands over the lookback. Cache instances bill hourly whether used or not.

  • Database uses metrics

    Idle SQL Managed Instances

    Managed Instances averaging under 5% CPU over the lookback. MI bills its full vCore count 24/7. An idle one is among the largest single wastes on Azure (4 vCores minimum).

  • Database uses metrics

    Idle SQL databases

    SQL databases averaging < 5% CPU over 14+ days. Provisioned compute bills 24/7 whether queried or not.

  • Database

    Non-prod Managed Instances running 24/7

    Managed Instances that look non-production and are running. MI supports stop/start. A nights-and-weekends schedule cuts the compute bill by roughly two thirds.

  • Database

    Non-prod Synapse SQL pools running 24/7

    Dedicated SQL pools that are Online in environments whose name/tags look non-production. Dedicated pools bill per DWU hour and can be paused on a schedule.

  • Database

    Premium Redis in non-prod environments

    Premium-tier Redis caches whose name/tags look non-production. Premium buys clustering, persistence, and VNet injection. Rarely needed in dev/test.

  • Database uses metrics

    Premium Service Bus with low message volume

    Premium Service Bus namespaces that have entities but moved almost no messages over the lookback. Premium bills ~$668/month per messaging unit regardless of throughput; low-volume workloads fit the Standard tier's per-operation pricing.

  • Database uses metrics

    Provisioned SQL DBs fit for serverless

    Provisioned vCore databases with intermittent low usage. The serverless tier auto-pauses and bills per-second of actual use.

  • Database uses metrics

    SQL DBs using <10% of a large max size

    Databases whose storage_percent metric averages under 10% of a max size above 50 GB. On vCore SKUs the provisioned max size drives the storage bill. Informational sizing signal.

  • Database

    Serverless SQL with auto-pause disabled

    Serverless-SKU databases with auto-pause delay set to -1 (disabled). Without auto-pause a serverless DB bills compute continuously. Defeating the SKU's entire purpose.

  • Database

    Servers with 3+ small DTU DBs (pool candidates)

    Logical servers running three or more small standalone DTU databases (Basic/S0-S2) outside any elastic pool. One shared pool usually costs less than the sum of the singles.

  • Database

    Stopped flexible servers (storage still billing)

    Stopped PostgreSQL/MySQL flexible servers. Compute is paused, but provisioned storage and backups keep billing. And Azure auto-restarts the server after 30 days.

  • Database

    Zone-redundant SQL DBs in non-prod

    Zone-redundant databases that look non-production. Zone redundancy adds a premium on most service tiers. Dev/test rarely needs AZ-level survivability.

  • Governance

    AKS Image Cleaner disabled

    Clusters without the Image Cleaner (Eraser). Stale, potentially vulnerable images accumulate on node disks indefinitely. Free to enable.

  • Governance

    AKS clusters without the Azure Policy addon

    Clusters without the Azure Policy (Gatekeeper) addon. No admission-time guardrails for privileged pods, registries, or labels. Informational.

  • Governance

    AKS node pools behind the control plane

    Node pools whose orchestrator version differs from the cluster's control-plane version. Drifted pools miss security patches and eventually fall outside the supported skew, blocking the next control-plane upgrade.

  • Governance

    AKS user node pools without cluster autoscaler

    Running user-mode node pools with the cluster autoscaler disabled. The pool holds its fixed node count through every quiet hour instead of scaling down.

  • Governance

    API Management on retired stv1 platform

    APIM instances still on the stv1 compute platform, which Microsoft retired (31 Aug 2024 global; 2025 for VNet-injected). Unmigrated instances risk forced migration or shutdown.

  • Governance

    Application Insights classic resources

    Application Insights components not bound to a Log Analytics workspace. Classic Application Insights was retired on 2024-02-29. These resources run on a dead platform with legacy (more expensive) ingestion billing.

  • Governance

    Autoscale settings configured but disabled

    Microsoft.Insights autoscale settings that exist but are turned off. Someone configured scaling rules and then disabled them, so the target runs at a fixed (often peak) size.

  • Governance

    Availability sets with 0-1 VMs

    Availability sets containing one VM or none. A single-VM set provides zero fault-domain benefit while implying an SLA it does not deliver; an empty set is leftover clutter. Both are free. The cost is operational confusion.

  • Governance

    CDN profiles on shut-down providers (Edgio/Akamai)

    Classic CDN profiles on Edgio (formerly Verizon) or Akamai SKUs. Edgio shut down in January 2025 and Akamai exited in 2023. These profiles no longer serve traffic and any DNS still pointing at them is broken or hijackable.

  • Governance

    Classic CDN endpoints stopped

    Endpoints on classic CDN profiles whose resourceState is Stopped. Configured but serving nothing. Dead wiring that keeps custom-domain CNAMEs alive (dangling-DNS risk).

  • Governance

    Cognitive/OpenAI paid tiers in non-prod

    Cognitive Services / Azure OpenAI accounts on paid SKUs (S0 and up) whose name/tags look non-production. Billing is usage-based, so no dollar figure is claimed. But dev/test workloads often fit the free F0 tier, and idle paid accounts are unmonitored spend waiting to happen.

  • Governance

    Container Apps environments with zero apps

    Managed environments hosting no container apps. A consumption-only environment is free while empty, but dedicated workload profiles with a minimum instance count keep billing. And an empty environment is clutter either way.

  • Governance

    Cosmos continuous backup in non-prod

    Cosmos accounts on continuous (point-in-time-restore) backup that look non-production. Continuous backup bills a per-GB surcharge that periodic (2 free copies) does not.

  • Governance opt-in

    Cost anomaly (per service)

    Per-service spend over the last 30 days that is large enough to warrant an anomaly review (no historical baseline fetched).

  • Governance

    Data Explorer clusters stopped or without autoscale

    Azure Data Explorer (Kusto) clusters that are stopped, or running with optimized autoscale off. A stopped-but-allocated cluster and a fixed-size cluster both waste capacity.

  • Governance

    Data Factories with zero pipelines

    Data Factory instances containing no pipelines. An abandoned or never-finished setup. Free while idle, but governance noise (and often paired with orphaned integration runtimes).

  • Governance

    Defender auto-provisioning off

    The Defender for Cloud auto-provisioning default setting is Off. New VMs come up without the monitoring agent. Informational: deliberate in agentless setups.

  • Governance

    Developer-tier APIM serving production

    Developer-tier APIM instances whose name/tags look production. The Developer tier carries NO SLA and no scale-out. An outage waiting to happen in a prod path.

  • Governance

    Event Grid topics with zero subscriptions

    Custom/system topics with no event subscriptions. Published events go nowhere. Free to keep, but dead wiring that hides real integration failures.

  • Governance

    Front Door (classic) instances

    Azure Front Door (classic) profiles. The classic SKU is deprecated (retirement announced for March 2027) and stopped accepting new customers in 2025. Migrate to Front Door Standard/Premium with the zero-downtime migration tool.

  • Governance

    HDInsight clusters on legacy node families

    HDInsight clusters with roles on A-series or other legacy VM families. Old hardware with poor price/performance that newer Dv4/Ev4+ families beat at the same or lower price.

  • Governance

    Integration Service Environments (retired platform)

    Logic Apps ISE instances. The platform was RETIRED on 2024-08-31. Surviving instances are unsupported, may stop working at any time, and still bill thousands per month. Migration to Logic Apps Standard is mandatory.

  • Governance

    Key Vaults on legacy access policies

    Vaults using the legacy access-policy permission model instead of Azure RBAC. Access policies are vault-local, unauditable through standard role assignments, and deprecated. Informational.

  • Governance

    Lifecycle policy without last-access tracking

    Accounts that have a lifecycle management policy but last-access-time tracking disabled. Any tier-by-last-access rules silently can't fire, so cold data never moves to Cool/Archive.

  • Governance

    Log Analytics: no daily cap + long retention

    Workspaces with no daily ingestion cap AND retention beyond the included 31 days. A runaway log source can compound ingestion cost with months of paid retention.

  • Governance

    Logic App workflows disabled 90+ days

    Consumption workflows disabled for 90+ days. Free while disabled, but dead wiring that hides whether anything still depends on them.

  • Governance

    Long-term retention on non-prod SQL DBs

    Long-term backup retention configured on databases that look non-production. LTR storage accrues for years on data nobody will ever restore.

  • Governance

    NSGs associated with nothing

    Network security groups attached to no subnet and no NIC. Free, but dead rule sets rot: they get copy-pasted, and their stale allow rules resurface attached to something real.

  • Governance

    NSGs with no flow log configured

    Network security groups with no NSG flow log on the region's Network Watcher. Without flow logs there is no network forensics trail for who-talked-to-whom investigations.

  • Governance

    Notification Hub namespaces mis-tiered for their use

    Notification Hub namespaces on a Free/Basic SKU whose name/tags look production, or paid namespaces that contain zero hubs (provisioned but unused).

  • Governance

    Orphaned network interfaces

    NICs attached to no VM and no private endpoint. Free, but they hold subnet IPs and accumulate as IaC drift.

  • Governance

    Premium registries in non-prod environments

    Premium-tier registries whose name/tags look non-production. Standard handles dev/test workflows at 40% of the price.

  • Governance

    Premium registries with no geo-replication

    Premium-tier registries with no extra geo-replications configured. Geo-replication is the headline Premium feature; without it, Standard would serve the same workload for less.

  • Governance

    Premium registries without untagged-manifest retention

    Premium registries with the retention policy for untagged manifests disabled. Dangling layers accumulate forever and the storage bill quietly grows.

  • Governance

    Premium/Standard APIM in non-prod

    Premium or Standard API Management instances whose name/tags look non-production. The Developer tier offers full feature parity (no SLA) at a fraction of the price.

  • Governance

    Private DNS zones linked to no VNet

    Private DNS zones with zero virtual-network links. No VNet can resolve them, so every record they hold is unreachable. Each zone bills a small fixed monthly fee.

  • Governance

    Private endpoints in a disconnected state

    Private endpoints whose link connection is Disconnected, Rejected, or stuck Pending. The NIC keeps billing while the endpoint routes nowhere useful.

  • Governance

    Prod resource groups without delete locks

    Resource groups that look production with no CanNotDelete/ReadOnly lock covering them. One bad script away from a deleted environment. Informational, default-off.

  • Governance

    Production AKS clusters on the Free tier

    Clusters that look production but run the Free management tier. No uptime SLA on the API server and a 10-node-pool scale ceiling. The inverse of AZ_AKS_PAID_TIER_NONPROD: this one recommends spending ~$73/month for the SLA.

  • Governance

    Production Cosmos accounts without zone redundancy

    Cosmos DB accounts that look production but have no availability-zone redundancy on any region. A single-zone outage can take the account's region offline.

  • Governance

    Recovery Services vaults protecting nothing

    Vaults with zero protected items. Either an abandoned backup setup or a vault whose protections were all removed. Free, but a governance smell (and often paired with stale policies).

  • Governance

    Recovery Services vaults without immutability

    Backup vaults with immutability not enabled. Immutable vaults block backup data from being shortened or deleted before its retention expires - a strong tamper-protection control.

  • Governance opt-in

    Reliability recommendations (Azure Advisor)

    Microsoft Advisor high-availability / reliability recommendations.

  • Governance

    Route tables associated with no subnet

    Route tables referenced by zero subnets. Free, but stale UDRs are a classic source of 'why is traffic blackholed' incidents when someone reattaches them years later.

  • Governance

    SignalR/Web PubSub mis-tiered for production

    SignalR or Web PubSub services on the Free tier whose name/tags look production. The Free tier caps concurrent connections and messages and carries no SLA.

  • Governance

    Spot VMs tagged as production

    Spot (low-priority) VMs whose name/tags look production. Spot instances can be evicted with 30 seconds notice - a poor fit for a workload labelled prod.

  • Governance

    Standard Static Web Apps not using Standard features

    Static Web Apps on the Standard (paid) tier with no custom domains and no linked functions - none of the features that justify Standard over the Free tier are in use.

  • Governance

    Standard load balancers relying on default SNAT

    Standard load balancers with a non-empty backend pool and load-balancing rules but no explicit outbound rule. They fall back to default SNAT, which is prone to port exhaustion.

  • Governance

    Standard public IPs that are not zone-redundant

    Attached Standard public IPs pinned to a single availability zone or with no zone set. A single-zone IP becomes unreachable if that zone fails.

  • Governance

    Storage accounts without blob soft delete

    Accounts whose blob service has no delete-retention policy. A deleted or overwritten blob is gone immediately.

  • Governance

    Stream Analytics jobs stopped or failed

    Stream Analytics jobs in a Stopped or Failed state. A job that is not running processes no events - and a failed pipeline is a silent data-loss gap until someone restarts it.

  • Governance

    Subscriptions without a budget

    Subscriptions with zero Consumption budgets configured. Budgets are free and the only native guardrail that alerts before a runaway resource becomes a five-figure invoice.

  • Governance

    Synapse workspaces with zero pools

    Synapse workspaces with no dedicated SQL pools and no Spark pools. The workspace itself is nearly free (serverless SQL is pay-per-query). But an empty workspace is usually an abandoned project with its storage account still attached.

  • Governance

    Traffic Manager profiles with no healthy endpoint

    Enabled Traffic Manager profiles whose endpoints are all disabled, degraded, or stopped. The profile routes nothing while health checks on enabled endpoints keep billing.

  • Governance

    User-assigned identities assigned to nothing

    User-assigned managed identities not attached to any collected VM, VMSS, Web/Function App, or AKS cluster. An unattached identity does nothing. But its role assignments stay live, waiting for whoever attaches it next.

  • Governance

    VM extensions in a failed state

    Virtual machines with one or more extensions stuck in a failed provisioning state. A failed Monitor/Defender/CustomScript extension silently breaks monitoring, patching, or security agents while the VM looks healthy.

  • Governance

    VMs without automatic patch assessment

    Running VMs whose patch assessmentMode is not AutomaticByPlatform. Without it there is no automatic patch compliance signal in Azure Update Manager / Defender.

  • Governance

    VMs without boot diagnostics

    VMs with boot diagnostics explicitly disabled. Boot diagnostics is free (managed storage) and is the only way to see the console of a VM that hangs during boot. Without it, a boot loop means restore-from-backup.

  • Governance

    VNet peerings in Disconnected state

    VNet peerings whose state is Disconnected. The remote side was deleted or never completed, leaving a half-configured link that routes nothing.

  • Governance

    VPN/ER connections not connected

    Gateway connections whose status is NotConnected. The tunnel is configured (and the gateway billed) but down.

  • Governance

    Web apps without managed identity

    Running web/function apps with no managed identity. Secrets for downstream Azure services are likely embedded in app settings instead. Informational.

  • Governance

    Zero Azure Policy assignments at subscription

    No Azure Policy assignments exist at the subscription scope. No guardrails on locations, SKUs, tagging, or security defaults anywhere in the subscription.

  • Network

    App Gateway v2 without autoscaling

    Application Gateway v2 instances running fixed capacity instead of autoscaling. Fixed instances bill their capacity units 24/7; autoscale (even min 0) only pays for what traffic actually needs.

  • Network

    Application Gateway v1 (retired April 2026)

    v1 Application Gateways (Standard/WAF). Azure retired the v1 SKU on 28 April 2026. Unmigrated gateways face forced migration or service interruption.

  • Network

    Application Gateways with no backends

    Application Gateways whose backend pools are all empty. The fixed hourly charge (plus WAF) routes zero traffic.

  • Network

    Basic SKU load balancers (retired)

    Basic SKU load balancers were retired September 2025 alongside Basic public IPs. Migrate to Standard SKU.

  • Network

    Basic SKU public IPs (retired)

    Basic SKU public IPs were retired September 2025. Remaining ones must be migrated to Standard SKU. Plan the migration before forced changes break connectivity.

  • Network

    Bastion hosts in non-prod environments

    Bastion hosts whose name/tags look non-production. Bastion bills per hour 24/7. For dev/test, the free Developer SKU or on-demand deployment usually suffices.

  • Network

    DDoS protection plans protecting nothing

    DDoS Network Protection plans with zero protected VNets-~$2,944/month for nothing. One of the largest single-resource wastes on Azure.

  • Network opt-in

    Egress top talkers

    The largest network egress / bandwidth cost lines over the last 30 days, from the Cost Management spend breakdown.

  • Network

    ExpressRoute circuits not provider-provisioned

    ExpressRoute circuits whose connectivity provider side is not provisioned. Azure bills from the moment the service key is created. These circuits cost money and carry zero traffic.

  • Network

    ExpressRoute gateways with no connections

    ExpressRoute virtual network gateways referenced by zero connections. The gateway bills hourly while terminating no circuit at all.

  • Network uses metrics

    Fixed-tier APIM that fits the Consumption tier

    Developer/Basic/Standard API Management instances whose monthly request volume is low enough to fit the serverless Consumption tier (per-call pricing, first 1M calls free) instead of a fixed monthly unit charge.

  • Network

    Load balancers with no backends

    Standard load balancers whose backend pools are all empty. The hourly base charge buys nothing.

  • Network

    NAT gateways attached to no subnet

    NAT gateways not associated with any subnet. The hourly resource charge applies whether or not anything routes through it.

  • Network

    Premium Event Hubs namespaces with zero hubs

    Premium/Dedicated Event Hubs namespaces that contain no event hubs at all. Capacity-unit billing with nothing inside.

  • Network uses metrics

    Premium Event Hubs with low ingress

    Premium/Dedicated Event Hubs namespaces whose incoming-message volume fits comfortably on the Standard tier.

  • Network

    Premium Service Bus namespaces with no entities

    Premium Service Bus namespaces containing zero queues and zero topics-~$677/month per messaging unit for nothing.

  • Network uses metrics

    Standard load balancers carrying no traffic

    Standard load balancers that have load-balancing rules but moved essentially no bytes over the lookback. A Standard LB bills an hourly base plus a per-rule charge whether or not any traffic flows through it.

  • Network

    Unattached public IPs

    Public IP addresses not associated with any NIC, LB frontend, or NAT gateway. Azure bills idle IPs by the hour.

  • Network

    VPN gateways with no connections

    VPN virtual network gateways referenced by zero connections. The gateway bills hourly whether or not a tunnel exists.

  • Security

    AKS API servers open to the Internet

    Running public AKS clusters with no authorized IP ranges. The Kubernetes API endpoint accepts connections from any Internet address.

  • Security

    AKS clusters on unsupported Kubernetes

    Clusters running a Kubernetes minor that has left AKS standard support (best-effort 2026-Q2 window). No CVE patches without an upgrade or paid LTS.

  • Security

    AKS clusters with local accounts enabled

    Clusters where disableLocalAccounts is not set. Local admin kubeconfigs bypass Entra ID auth and RBAC audit.

  • Security

    App Configuration stores open to the internet

    App Configuration stores with public network access enabled and no private endpoint. Configuration (sometimes including secrets references) is reachable from any network.

  • Security

    App Service sites with SCM basic auth enabled

    App Service sites where SCM (Kudu) basic publishing credentials are still allowed. The publish password is a static secret that bypasses Entra ID and its audit trail.

  • Security

    Application Gateways serving HTTP with no HTTPS redirect

    Application Gateways with an HTTP listener but no redirect configuration. Plain-HTTP requests are served as-is instead of being upgraded to HTTPS.

  • Security

    CIS activity-log alerts missing

    Subscriptions without enabled activity-log alerts for the CIS 5.2.x administrative operations (policy assignments, NSG changes, SQL firewall changes, security solutions). Without them, control-plane tampering goes unnoticed.

  • Security

    Classic co-administrators still present

    Legacy classic Co-Administrators on the subscription. Full, unscoped control predating RBAC, invisible to most role reviews. Microsoft retired classic admin roles in 2024.

  • Security

    Cognitive/OpenAI accounts: keys + public network

    Cognitive Services / Azure OpenAI accounts that accept API-key authentication AND allow public network access. One leaked key means unmetered, unattributed usage of the account (and for OpenAI, of your model quota) from anywhere.

  • Security

    Container registries allowing anonymous pull

    Registries with anonymous (unauthenticated) pull enabled. Every image, including internal ones with baked-in secrets, is world-readable.

  • Security

    Container registries allowing image export

    Premium registries with the export policy enabled. Export lets images be copied off-platform with az acr import/transfer - a data-exfiltration path for a network-locked registry.

  • Security

    Container registries with admin user enabled

    Registries with the built-in admin account on. A single shared username/password with full push/pull rights and no identity audit trail.

  • Security

    Cosmos DB key-based auth enabled

    Cosmos DB accounts that still accept primary/secondary key authentication. AAD-only auth (disableLocalAuth) removes the shared-secret attack surface.

  • Security

    Cosmos DB open to all networks

    Cosmos DB accounts with public network access enabled and no IP firewall or VNet rules. Any Internet host can reach the endpoint, gated only by keys/AAD.

  • Security

    Custom roles with wildcard (*) actions

    Custom RBAC roles granting '*' actions with subscription-wide assignable scope. Owner-equivalent roles hiding under custom names (CIS Azure 1.x).

  • Security

    Defender for SQL not enabled (paid feature)

    Logical servers without Defender for SQL (vulnerability assessment + threat protection). Honest framing: enabling it COSTS ~$15/server/month. This is a posture gap, not savings.

  • Security

    Flexible servers not requiring TLS

    PostgreSQL/MySQL flexible servers with require_secure_transport OFF. Clients may connect over unencrypted channels.

  • Security

    Flexible servers with public network access

    PostgreSQL/MySQL flexible servers reachable over the public endpoint. VNet-integrated (private access) deployment removes the Internet-facing surface.

  • Security

    Front Door Standard/Premium without a WAF policy

    Front Door Standard/Premium profiles with no WAF security policy associated. The CDN front end has no application-layer filtering in front of the origins.

  • Security opt-in

    Guest user with privileged role

    Guest / external directory users holding Owner, Contributor, or User Access Administrator. Privileged access for an outside identity.

  • Security

    Key Vaults open to all networks

    Vaults with public network access enabled and no default-deny network ACL. Reachable from any Internet address.

  • Security

    Key Vaults with firewall default-action Allow

    Key Vaults that have network ACL rules configured but leave the default action at Allow - the firewall rules are written yet every network can still reach the vault.

  • Security

    Key Vaults without diagnostic settings

    Key Vaults with no diagnostic settings configured. Vault audit events (secret/key access, policy changes) are not exported to Log Analytics, storage, or Event Hub, so there is no audit trail of who read what.

  • Security

    Key Vaults without purge protection

    Vaults where purge protection is off. Soft-deleted secrets can still be force-purged before the retention window ends.

  • Security

    Key Vaults without soft delete

    Vaults with soft delete disabled. Deleted keys/secrets are gone instantly and irrecoverably.

  • Security

    Managed HSM pools (cost review)

    Every Managed HSM pool, flagged for awareness: each one is a ~$2,300+/month fixed cost. No savings are claimed. Pools serving real compliance requirements are money well spent.

  • Security

    Managed HSM pools in non-prod

    Key Vault Managed HSM pools whose name/tags look non-production. A pool bills ~$2,300+/month from provisioning until purge. Dev/test workloads almost never need a dedicated FIPS 140-3 Level 3 HSM.

  • Security

    Managed disks on platform-managed keys only

    Attached managed disks encrypted with the platform-managed key only (no disk-encryption-set / customer-managed key). Some data-classification policies require CMK. Informational.

  • Security

    Managed disks reachable from the internet

    Managed disks with networkAccessPolicy AllowAll and public network access enabled. Disk export/import SAS URLs are then reachable from the internet rather than over Private Link.

  • Security

    Messaging namespaces with SAS auth on public endpoints

    Event Hubs / Service Bus namespaces that are publicly reachable AND still accept shared-access-signature (local) auth. Informational. SAS is common, but AAD-only is the hardened posture.

  • Security opt-in

    NSG with no matched traffic

    Network security groups whose traffic metric is flat-zero over the window. Their rules are matching nothing and may be stale.

  • Security

    NSGs allowing ALL inbound from anywhere

    NSG rules allowing inbound on every port from any source. The NSG is effectively disabled.

  • Security

    NSGs exposing SSH/RDP to the Internet

    NSG rules allowing inbound 22 (SSH) or 3389 (RDP) from any source. The #1 brute-force entry point on Azure.

  • Security

    NSGs exposing database ports to the Internet

    NSG rules allowing inbound database ports (1433/3306/5432/6379/27017) from any source. Databases should never face the raw Internet. Complements AZ_NSG_OPEN_MGMT_PORTS.

  • Security

    No Defender security contact configured

    Subscriptions without a Microsoft Defender for Cloud security contact. Security alerts have nowhere to go (CIS Azure 2.x).

  • Security

    No SAS expiration policy (CIS)

    Accounts allowing shared-key access without a SAS expiration policy. Nothing nudges clients away from years-long SAS tokens (CIS Azure 3.x).

  • Security opt-in

    Orphaned role assignment (deleted principal)

    RBAC role assignments whose principal no longer exists in the directory. Stale grants that should be cleaned up.

  • Security

    Premium registries publicly open with no IP rules

    Premium registries (the only tier supporting network rules) that are publicly reachable with no IP restrictions.

  • Security

    Premium registries without quarantine policy

    Premium registries with the image quarantine policy disabled. Pushed images are pullable before any scan passes. Informational: quarantine is still a preview feature.

  • Security

    Private-linked Web Apps still open to the internet

    Web Apps that have private endpoints wired up but still have public network access enabled - the intended-private app is also reachable from the internet.

  • Security

    Prod VNets without DDoS Network Protection

    Production-looking VNets without DDoS Network Protection. Honest framing: enabling it COSTS ~$2,944/month per plan. Weigh it against exposure; basic infrastructure protection is already free.

  • Security

    Recovery Services vaults with soft delete disabled

    Backup vaults with soft delete turned off. Soft delete is the ransomware-recovery safety net - it keeps deleted backups recoverable for 14 days even after a malicious delete.

  • Security

    Redis caches with the non-SSL port open

    Redis caches accepting plaintext connections on port 6379. Credentials and cached data transit unencrypted.

  • Security

    SQL auditing retention under 90 days

    SQL servers with auditing enabled but storage retention set below 90 days (CIS 4.1.6 wants >= 90; 0 means unlimited and is fine). Short retention means the trail is gone before most incidents are even noticed.

  • Security

    SQL server firewall open to the Internet

    SQL server firewall rules spanning 0.0.0.0-255.255.255.255. The entire IPv4 Internet can reach the SQL endpoint.

  • Security

    SQL servers accepting TLS < 1.2

    SQL servers whose minimal TLS version is 1.0 or 1.1. Deprecated protocols vulnerable to downgrade attacks.

  • Security

    SQL servers allowing SQL logins

    SQL servers without Entra-only authentication. Classic SQL logins (password-based, non-MFA) still work. Informational.

  • Security

    SQL servers using service-managed TDE keys

    SQL servers whose Transparent Data Encryption protector is a service-managed key rather than a customer-managed (BYOK) Key Vault key. Some policies mandate BYOK. Informational.

  • Security

    SQL servers with public network access

    SQL servers whose public endpoint is enabled. Private Link + disabled public access removes the Internet-facing surface.

  • Security

    SQL servers without auditing

    SQL servers whose server-level auditing is disabled. No trail of logins, queries, or permission changes (CIS 4.1.1).

  • Security

    SQL servers without recurring vulnerability scans

    SQL servers where Vulnerability Assessment has no recurring scans configured. Without them the Defender for SQL posture baseline is never re-evaluated.

  • Security opt-in

    Security recommendations (Azure Advisor)

    Microsoft Advisor security-posture recommendations.

  • Security opt-in

    Stale app / SP credentials

    App registrations or service principals with expired (or imminently expiring) secrets or certificates.

  • Security

    Standard public IPs without DDoS Network Protection

    Attached Standard public IPs with no DDoS protection mode set. Internet-facing endpoints without DDoS Network Protection rely on the platform's basic, best-effort mitigation only.

  • Security opt-in

    Storage account keys not rotated

    Storage accounts with no key-regeneration event in the Activity-Log window. Shared keys may be long-lived and over-exposed.

  • Security

    Storage accounts accepting HTTP

    Storage accounts with supportsHttpsTrafficOnly disabled. Data and SAS tokens can transit in cleartext.

  • Security

    Storage accounts allowing cross-tenant replication

    Accounts with cross-tenant object replication explicitly enabled. Data can be replicated to a storage account in a different Entra tenant.

  • Security

    Storage accounts allowing old TLS

    Storage accounts whose minimumTlsVersion is below TLS 1.2. TLS 1.0/1.1 are deprecated industry-wide.

  • Security

    Storage accounts allowing public blob access

    Storage accounts with allowBlobPublicAccess enabled. Any container can be flipped to anonymous public access.

  • Security

    Storage accounts allowing shared-key auth

    Accounts accepting account-key (shared key) authorization. CIS recommends Entra ID-only auth. Informational. Shared key is still the Azure default and widely used.

  • Security

    Storage accounts with SFTP local users enabled

    Storage accounts with the local-users (SFTP) feature on. Local users authenticate with shared SSH keys or passwords, bypassing Entra ID and its audit trail.

  • Security

    Storage accounts with network default-action Allow

    Storage accounts whose network ACL default action is Allow while IP/VNet rules exist - the rules are written but the open default makes them moot, so any network can reach the data.

  • Security

    Storage accounts without infrastructure encryption

    Storage accounts where requireInfrastructureEncryption is off - data is encrypted once at rest, not double-encrypted, which some regulated workloads require. Set at creation time only.

  • Security

    Too many Owners at subscription scope

    Subscriptions with more than 3 Owner role assignments at subscription scope (CIS 1.24). Every extra Owner is a full-takeover blast radius for one phished credential.

  • Security

    VMs on legacy unmanaged disks

    VMs whose OS/data disks are legacy page blobs in a storage account instead of managed disks. No SSE-by-default guarantees, no per-disk RBAC, retired feature path.

  • Security

    VMs with a public IP on the NIC

    Public IPs bound directly to VM NICs. Direct exposure bypasses load balancers/firewalls and gives every such VM an Internet attack surface. Informational.

  • Security

    VMs without Trusted Launch boot integrity

    VMs with Secure Boot or vTPM disabled. Trusted Launch protects against boot-kit and rootkit tampering; both flags should be on for Gen2 VMs that support it.

  • Security

    VMs without encryption-at-host

    Running VMs without encryptionAtHost. Server-side encryption already protects managed disks at rest. This is the extra host-cache/temp-disk layer. Informational.

  • Security

    WAF-SKU App Gateways not blocking attacks

    WAF-SKU Application Gateways whose firewall is absent, disabled, or in Detection-only mode. Paying the WAF price while attacks pass through unblocked.

  • Security

    Web apps accepting TLS < 1.2

    Web/Function apps whose minimum TLS version is 1.0 or 1.1 (both deprecated).

  • Security

    Web apps allowing plain FTP deploys

    Web/Function apps with ftpsState=AllAllowed. Deployment credentials can transit over unencrypted FTP.

  • Security

    Web apps with remote debugging on

    Web/Function apps with remote debugging enabled. An interactive debugger port exposed on a production endpoint.

  • Security

    Web apps without HTTPS-only

    Web/Function apps still serving plain HTTP. HTTPS-only redirects all HTTP traffic and is free to enable.

  • Security

    Web/Function Apps on end-of-life runtimes

    Sites running runtime stacks past end-of-life (Python <= 3.9, Node <= 18, PHP <= 8.1, .NET Core/.NET 5-7, Ruby). EOL runtimes get no security patches, and App Service stops servicing the underlying images.

  • Security

    Web/Function Apps without client-certificate enforcement

    App Service sites with incoming client certificates not required. Where mutual TLS is expected, this leaves the app accepting any caller the front end lets through. Informational.

  • Storage

    Backups of VMs that no longer exist

    Protected VM backup items whose source VM is gone from the subscription. The backup data keeps billing per GB until protection is stopped and data deleted.

  • Storage

    Full (non-incremental) snapshots

    Snapshots created without the incremental flag bill the full disk size; incremental snapshots bill only changed data.

  • Storage

    Geo-redundant backup storage on non-prod vaults

    Recovery Services vaults with GeoRedundant backup storage whose name/tags look non-production. LRS halves the per-GB backup storage rate for data that doesn't need cross-region recovery.

  • Storage

    Geo-redundant storage accounts in non-prod

    GRS/RA-GRS/GZRS/RA-GZRS storage accounts whose name/tags look non-production. Geo redundancy costs 2-3x LRS per GB, one of the quietest recurring overspends on Azure.

  • Storage

    Legacy GPv1 storage accounts

    General-purpose v1 storage accounts. GPv1 lacks access tiering (Cool/Cold/Archive) and lifecycle management. Upgrading to GPv2 is free and unlocks cheaper tiers.

  • Storage

    Old disk snapshots

    Disk snapshots older than 90 days. Forgotten snapshots accumulate silently at per-GB rates.

  • Storage

    Orphaned resources across subscriptions

    Aggregates unattached disks, public IPs, and NICs found across every subscription in the management group into a single fleet-wide waste figure.

  • Storage

    Premium disks on deallocated VMs

    Premium SSD disks attached to deallocated VMs. Disk billing continues at the Premium rate while the VM is off. Standard SSD costs ~45% less for parked workloads.

  • Storage uses metrics

    Premium file shares provisioned above used capacity

    Premium (FileStorage) accounts whose provisioned share capacity is far above the bytes actually stored. Premium Azure Files bills on provisioned GiB, not used GiB. Every over-provisioned gigabyte is paid for whether written to or not.

  • Storage

    Storage accounts without lifecycle policies

    Hot-tier storage accounts with no lifecycle management policy. Aging blobs never tier down to Cool/Archive automatically.

  • Storage

    Unattached managed disks

    Managed disks in 'Unattached' state. Azure bills the full provisioned size every month whether or not a VM uses it.

Checks marked opt-in use a paid or billing-data cloud API and never run unless you switch them on. A default scan uses only free APIs.

How you connect

A Reader service principal

Register an app, assign the Reader role at subscription or management-group scope, and add the client secret in the dashboard.

Reader (read-only) over ARM. Optional graph/activity-log reads for deeper identity and exposure checks.

How the dollars are calculated

Live Azure VM pricing from the anonymous Retail Prices API, with a curated baseline fallback.

Every finding is backed by the raw cloud API response it came from, with a confidence score and the pricing source labelled, no black-box numbers.

Scan your Azure estate free

Connect a reader service principal and run a read-only scan. Findings come priced in real dollars with a fix and the evidence for each.

Start scanning free

Other clouds we scan