Recovery targets
Backup strategy
Cloud SQL automated backups
Daily automated snapshots. Point-in-time recovery (PITR) with continuous WAL archiving provides ≤ 5-minute RPO for the last 7 days.
Cloud Storage versioning
Document buckets have object versioning enabled with 30-day retention. Deleted objects are recoverable within the retention window.
Terraform state
State bucket has object versioning + a separate CMEK key. Access is through Workload Identity Federation only.
Cross-region
Backups are stored in a CMEK-encrypted GCS bucket in a different GCP region from the primary database. Automated.
Scenarios and runbooks
Accidental record deletion / corruption
Accidental record deletion / corruption
Use Cloud SQL point-in-time recovery to a new instance at a timestamp just before the incident. Verify data on the restored instance, then export the affected records and replay them into production. Documented runbook step-by-step.
Full database loss (primary instance failure)
Full database loss (primary instance failure)
Provision a new Cloud SQL instance from the latest automated backup. Update the runtime’s
DATABASE_URL secret in Secret Manager. Cloud Run re-provisions with the new URL. Target RTO ≤ 2 hours.Region outage
Region outage
Provision new infrastructure in the secondary region using Terraform. Restore from the cross-region backup bucket. Target RTO ≤ 4 hours. This scenario has not yet been drilled.
Security breach / ransomware
Security breach / ransomware
Isolate affected infrastructure, rotate all secrets, provision clean infrastructure via Terraform, restore from backups taken before the breach window. Full incident response runbook applies — see Incident response.
Document storage loss
Document storage loss
Restore from GCS object versioning (if within retention window) or cross-region backup. Re-index affected documents in the database.
Testing cadence
When each test is completed, this page is updated with the execution date, observed RPO/RTO, and any remediation items.
Data integrity verification
On every restore drill we verify:- Row counts match the pre-restore baseline (±allowed delta for the PITR window).
- Schema matches the migration head via
rails db:schema:dumpcomparison. - Sample record checksums verify PHI encryption integrity.
- Audit logs confirm no tampering in the restore window.
Customer impact
For a DR event that affects customer service:- Status page (
status.denialbase.com) updated within 15 minutes. - Affected customers notified by email.
- Post-incident summary within 5 business days.