Backup and recovery: the basics
What does an unprotected Azure resource actually look like?
Backup is the control that decides whether a bad day stays a bad day or becomes an extinction event. In Azure the gap shows up in a few distinct shapes rather than one setting. A virtual machine can run for months with no Recovery Services vault protecting it, so a deletion, a ransomware event or a corrupt disk has no restore point behind it. A managed database can be backed up locally but not geo-redundantly, so the backup lives in the same region as the data and a regional outage takes both at once. Each is its own Defender for Cloud recommendation, but the underlying risk is the same: state that cannot be brought back to a known-good point after a failure.
Microsoft Defender for Cloud turns each of these into its own recommendation under the Microsoft Cloud Security Benchmark control BR-1, 'Ensure regular automated backups'. 'Azure Backup should be enabled for virtual machines' flags every VM with no vault protection. 'Geo-redundant backups should be enabled for PostgreSQL servers' flags a database whose backups would not survive losing its home region. They read as separate problems on the report, but they are one job: every stateful resource has a backup, and that backup can outlive the failure it is meant to protect against.
Most of this gap is drift, not intent. A VM stood up for a quick test that became production and never got a backup policy. A database created before geo-redundancy was a habit, or created in code that left the default local redundancy in place. The work is to find every stateful resource with no backup or only local backup, decide the recovery objective each one actually needs, enable protection, and then prevent new resources from launching unprotected.
In this lesson you will learn how Azure expresses backup protection for virtual machines and managed databases, how to find every stateful resource that has no backup or only same-region backup, and how to bring them up to a deliberate recovery objective without overspending on resources that do not need it. The Controls this lesson covers section lists every Defender for Cloud recommendation in this capability, each linking to a deep page with the exact check and a copy-and-paste fix.
The backup that was running, into the same fire
A recurring theme in real data-loss post-mortems is not the absence of backups but the absence of independent backups. Organisations have lost data to a regional outage or a ransomware event while technically holding a backup, because that backup lived in the same region, the same account or the same trust boundary as the thing it was protecting, and the single event took both. This is exactly why Azure separates 'a backup exists' from 'the backup is geo-redundant'. A local backup answers 'can I undo a mistake?'; a geo-redundant backup answers 'can I survive losing the whole region?', and only the second is true disaster recovery.
Finding unprotected resources across a subscription
Priya is the platform lead at a growing company preparing for its first SOC 2 Type II audit. Defender for Cloud shows backup findings spread across virtual machines in two subscriptions and a flag on a production PostgreSQL database whose backups are local only.
Rather than work the findings one by one, Priya starts by listing which VMs have no Recovery Services vault protection at all, so the genuinely critical workloads can be separated from disposable test boxes before any backup policy is assigned.
Start by listing the VMs Azure Backup reports as not protected. These are the resources with no restore point behind them.
A stateful VM with no protection and no restore point is the highest-value target in this group. A stateless front end you can rebuild from code is a lower priority. Separate the two before you assign policies.
How Defender for Cloud decides a resource is unprotecteddeep dive
The two recommendations in this capability resolve to two different questions. 'Azure Backup should be enabled for virtual machines' checks whether a VM is associated with a backup item in a Recovery Services vault. With no such item, the VM has no scheduled recovery points and the recommendation flags it. The fix is to enable protection against a backup policy that defines the schedule and retention, after which Azure Backup takes application-consistent snapshots on the policy's cadence.
'Geo-redundant backups should be enabled for PostgreSQL servers' is subtler, because it is not about whether a backup exists but about where it lives. The check, mapped to 'Microsoft.DBforPostgreSQL/servers', looks at the backup storage redundancy on the server. Local or zone redundancy keeps the backup inside the home region; geo-redundancy replicates it to the Azure paired region. Only geo-redundancy lets you restore the server in another region after a regional outage. The important constraint is that backup redundancy on a PostgreSQL single server can only be chosen at server creation and cannot be changed afterwards, so remediating this finding means standing up a new server with geo-redundant backup, not flipping a switch on the existing one.
Both recommendations map to Microsoft Cloud Security Benchmark control BR-1, 'Ensure regular automated backups', and Defender for Cloud evaluates them on a periodic assessment cycle, so a fix does not flip the recommendation to Healthy instantly. The strongest position pairs the per-resource fix with an Azure Policy backstop: an audit or deploy policy on VM backup means no new VM can reach production unnoticed without protection, turning 'everything is backed up today' into 'nothing can ship unprotected tomorrow'.
What is the impact of leaving resources unprotected?
The direct impact is permanent data loss. A VM with no backup has no restore point, so a ransomware event, an accidental deletion or a corrupt disk leaves nothing to recover to. A database with only local backups loses both the data and its backup in a single regional failure, which is exactly the scenario disaster recovery exists to survive. The overwhelming majority of catastrophic data-loss incidents were not sophisticated attacks; they were ordinary failures hitting a resource that nobody had ensured was recoverable.
The second-order impact is recovery time. Even where some backup exists, an untested or badly scoped one turns a clean restore into a slow, uncertain rebuild while the business is down. Knowing in advance that every critical resource has a protection policy and a defined recovery objective is the difference between a measured restore and an improvised scramble during the worst hours of an incident.
On the compliance side, every modern framework, ISO 27001, SOC 2, HIPAA, PCI DSS and the UK and EU data-protection regimes, expects evidence of regular automated backups and a tested ability to recover. A passing set of backup recommendations across every subscription, with geo-redundancy on the data you cannot afford to lose, is among the most fundamental and defensible artefacts you can hand an auditor.
How do you protect resources safely?
Work the capability as one loop rather than chasing individual findings. The order matters: classify each resource by what it would cost to lose before you assign backup, so you spend on protection where it counts and document the exclusions where it does not.
1. Inventory every stateful resource by protection state
List the VMs with no Recovery Services vault protection and the databases with local-only backups. Treat this inventory as the source of truth, not the Defender finding count, and tag each resource with whether it holds irreplaceable state or is rebuildable from code.
2. Set a recovery objective per tier
Decide, per class of resource, how recent a recovery point you need and how long backups must be retained. Critical data needs frequent recovery points, long retention and geo-redundancy; a stateless tier behind a load balancer may need no backup at all, only a documented decision that it rebuilds from code.
3. Enable protection, most irrecoverable first
Enable Azure Backup on the stateful VMs against a policy sized to their recovery objective, and move critical databases to geo-redundant backup. Because PostgreSQL single-server backup redundancy is fixed at creation, treat its remediation as a planned migration to a new geo-redundant server, ideally a Flexible Server, rather than an in-place toggle.
4. Backstop it with Azure Policy
Assign an audit (or deploy-if-not-exists) policy so no new VM reaches production without a backup, and audit databases for geo-redundancy. This turns 'everything is protected today' into 'nothing can ship unprotected tomorrow', so the safe state is enforced rather than merely remembered.
# 1. Enable Azure Backup for an unprotected VM against a vault policy.
# The vault and a backup policy (e.g. DefaultPolicy) must already exist.
az backup protection enable-for-vm \
--resource-group rg-prod \
--vault-name rsv-prod-backup \
--vm orders-db-vm \
--policy-name DefaultPolicy
# 2. PostgreSQL backup redundancy is fixed at creation. To remediate the
# geo-redundancy finding, stand up a new Flexible Server with geo-redundant
# backup, then migrate. (--geo-redundant-backup is create-only.)
az postgres flexible-server create \
--resource-group rg-prod \
--name orders-pg-geo \
--location uksouth \
--geo-redundant-backup Enabled \
--backup-retention 14 \
--tier GeneralPurpose --sku-name Standard_D2ds_v4
# 3. Ratchet it shut: audit any future VM that has no backup configured.
# Look the built-in policy up by display name; never hardcode a GUID you
# have not verified.
pid=$(az policy definition list \
--query "[?displayName=='Azure Backup should be enabled for Virtual Machines'].name" \
-o tsv)
az policy assignment create \
--name audit-vm-backup \
--policy "$pid" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000" Quick quiz
Question 1 of 5Defender for Cloud shows unprotected VMs and a database flagged for local-only backups. What is the most efficient way to think about them?
You scored
0 / 5
Keep learning
Go deeper on how Azure expresses backup protection and geo-redundancy across the resources in this capability.
- Quickstart: back up a VM with the Azure CLI How to create a Recovery Services vault and enable protection on a virtual machine.
- Audit and enforce backup during VM creation using Azure Policy How to use the built-in policies to audit, or auto-enable, backup on virtual machines.
- Backup and restore in Azure Database for PostgreSQL flexible server How geo-redundant backup works, that it is set at creation, and how geo-restore recovers to the paired region.
You can now treat Azure backup as one capability rather than a scatter of findings: inventory every stateful resource by protection state, set a deliberate recovery objective per tier, protect the irrecoverable resources first, make the data you cannot afford to lose geo-redundant so it survives the region, and backstop the estate with Azure Policy. The Controls this lesson covers section below links every recommendation in this group to its deep page and fix.
Back to the library