Back to Checks
At least one AWS Backup plan exists
backup_plans_exist
Service: backupSeverity: low
OfficialBuilt-inVerified
Categories:resilience
Resource Type:AwsBackupBackupPlan
AWS Backup is assessed for the existence of at least one backup plan that schedules and retains recovery points for selected resources.
The evaluation determines whether any plan is configured; when none is found-even if backup vaults exist-the absence of a plan is noted.
Risk
Without a backup plan, resources lack scheduled recovery points, undermining RPO/RTO.
- Irrecoverable data after deletion or corruption (integrity)
- Prolonged outages due to unavailable restores (availability)
- Inconsistent backups that hinder investigations and controlled recovery
Run this check with Prowler
Run in Prowler CloudRun
prowler aws --checks backup_plans_existRecommendation
Establish and enforce backup plans for critical workloads:
- Define schedules, retention, and lifecycle to meet RPO/RTO
- Use tagging to include all required resources by policy
- Enable cross-Region/account copies and immutability where feasible
- Apply least privilege to backup roles
- Regularly test restores and review reports
Remediation
CLI
aws backup create-backup-plan --backup-plan "{\"BackupPlanName\":\"<example_resource_name>\",\"Rules\":[{\"RuleName\":\"<example_resource_name>\",\"TargetBackupVaultName\":\"Default\"}]}"Terraform
# Terraform: minimal AWS Backup Plan to satisfy the check
resource "aws_backup_plan" "<example_resource_name>" {
name = "<example_resource_name>" # Critical: creates the Backup Plan so the check passes
rule {
rule_name = "<example_resource_name>" # Critical: minimal rule
target_vault_name = "Default" # Critical: required vault
}
}NativeIaC
# CloudFormation: create a minimal AWS Backup Plan to pass the check
Resources:
<example_resource_name>:
Type: AWS::Backup::BackupPlan
Properties:
BackupPlan:
BackupPlanName: <example_resource_name> # Critical: ensures at least one Backup Plan exists
Rules:
- RuleName: <example_resource_name> # Critical: minimal required rule
TargetBackupVault: Default # Critical: required vault for the ruleOther
1In the AWS Console, go to AWS Backup
2Click Backup plans > Create backup plan
3Choose Build a new plan
4Enter Plan name: <example_resource_name>
5Under Backup rule, set Rule name: <example_resource_name> and Target backup vault: Default
6Click Create plan
Check Code
from prowler.lib.check.models import Check, Check_Report_AWS
from prowler.providers.aws.services.backup.backup_client import backup_client
class backup_plans_exist(Check):
def execute(self):
findings = []
if backup_client.backup_plans:
report = Check_Report_AWS(
metadata=self.metadata(),
resource=backup_client.backup_plans[0],
)
report.status = "PASS"
report.status_extended = f"At least one Backup Plan exists: {backup_client.backup_plans[0].name}."
report.resource_id = backup_client.backup_plans[0].name
findings.append(report)
elif backup_client.backup_vaults:
report = Check_Report_AWS(metadata=self.metadata(), resource={})
report.region = backup_client.region
report.status = "FAIL"
report.status_extended = "No Backup Plan exist."
report.resource_arn = backup_client.backup_plan_arn_template
report.resource_id = backup_client.audited_account
report.resource_tags = []
findings.append(report)
return findingsReferences
- https://awscli.amazonaws.com/v2/documentation/api/2.0.33/reference/backup/create-backup-plan.html
- https://docs.aws.amazon.com/aws-backup/latest/devguide/about-backup-plans.html
- https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/backup_plan
- https://medium.com/@christopheradamson253/backup-strategies-using-aws-backup-1b17b94a7957