Skip to main content

Overview

This runbook defines backup and restore procedures for PensionsPortal.ie in compliance with DORA Art. 12 (ICT Business Continuity Policy) and GDPR Art. 32 (security of processing). It covers the Neon PostgreSQL database, Vercel Blob document storage, application code, and environment configuration.
PensionsPortal.ie stores GDPR-protected personal data including encrypted PPS numbers. Any backup containing member data is subject to GDPR data protection requirements. Encrypted backup files must be stored securely and access must be logged.

1. Backup Architecture Overview


2. RTO/RPO Targets (DORA Art. 12 Compliance)

These are conservative targets designed to be achievable even under adverse conditions. Neon’s point-in-time recovery typically allows an RPO of approximately 5 minutes on the Pro plan. Under normal conditions, recovery will be significantly faster than the RTO targets below.
Tier 4 (Environment Configuration) is the most vulnerable component. If PPS_ENCRYPTION_KEY is lost and no backup exists, all encrypted PPS numbers become permanently unrecoverable. Run the configuration backup procedure (Section 6) monthly at minimum, and immediately after any secret rotation.

3. Neon PostgreSQL Backup Details

Neon provides continuous backup without any manual configuration required. To review current backup status:
  1. Log in to Neon Console
  2. Select the PensionsPortal.ie project
  3. Navigate to Branches → select the production branch
  4. The branch details panel shows the earliest available restore point
The Free plan’s 7-day retention window does not satisfy DORA Art. 12 requirements for a production pension platform. The production Neon project must be on the Pro plan.

4. Manual Database Backup

Use this procedure when a point-in-time export is needed — for example, before a major migration, or for an audit/legal hold.
Encrypt the dump before storing it:
The unencrypted dump file contains all member PII including encrypted PPS numbers. Delete it immediately after encrypting. Never store unencrypted database dumps on local machines, shared drives, or cloud storage without encryption.

5. Database Restore Procedure

Use this for most recovery scenarios. Neon creates a new branch at the restore point, allowing verification before switching production traffic. Step 1 — Open the restore interface:
  1. Log in to Neon Console
  2. Navigate to ProjectBranches
  3. Select the main (production) branch
  4. Click Restore in the branch details panel
Step 2 — Select the restore point:
  • Choose by timestamp (e.g., “restore to 2 hours ago”)
  • Or select a named snapshot if one exists
Step 3 — Create restore branch:
  • Neon creates a new branch at the selected point in time
  • Note the new branch’s connection string
Step 4 — Verify data integrity on the restore branch:
Step 5 — Switch application to the restored branch:
  1. In Vercel Dashboard → Project → Settings → Environment Variables
  2. Update DATABASE_URL and DATABASE_URL_UNPOOLED to the restored branch URLs
  3. Redeploy the application
Step 6 — Confirm application operates correctly:
  • Application loads and authentication works
  • BrokerAdmin can view schemes and members
  • PPS decryption works for a test member (confirms encryption key matches)
  • Audit logs are being written
Step 7 — Cleanup:
  • Once satisfied, delete the old production branch in Neon Console
  • Promote the restored branch to be the new production branch (or rename it)

Option B — Manual Restore from pg_dump

Use this if a custom dump was taken (Section 4) and needs to be restored.
pg_restore --clean is destructive — it drops all existing objects before restoring. Only use this against a dedicated restore target or in a confirmed disaster recovery scenario where the current data is already lost or corrupted.
Verify the restore:

6. Configuration Backup (Manual — Run Monthly)

Vercel environment variable names (not their secret values) can be viewed in the dashboard. Secret values are never retrievable from Vercel after entry — they must be backed up externally. Procedure — run on the first business day of each month:
  1. Open the company password manager (1Password / Bitwarden)
  2. Locate the “PensionsPortal.ie Production Secrets” vault entry
  3. Verify each of the following secrets is present, up to date, and matches what is deployed:
  1. After verifying, record the backup date in the password manager entry notes
  2. If any secret has been rotated since the last backup, update the password manager entry immediately
The configuration backup procedure should also be run immediately after any secret rotation (e.g., after an incident requiring key rotation). Do not wait for the monthly cycle in those cases.

7. Data Anonymisation Procedure (GDPR Art. 17 — Right to Erasure)

When a data subject (pension scheme member) submits a valid erasure request and no legal hold applies (note: pension records may be subject to a 7-year statutory retention period — verify with legal before proceeding):
Irish pension scheme records may be subject to a statutory 7-year retention period under the Pensions Act 1990 (as amended). Do not process an erasure request for a member of an active scheme, or a member whose records are within the retention window, without written legal sign-off. The DPO must approve all GDPR Art. 17 erasure requests for pension scheme members.
After anonymisation:
  • Confirm the member record no longer displays any PII in the portal
  • Confirm the audit log entry is present
  • Notify the data subject that their erasure request has been fulfilled
  • File correspondence in the DPO records (GDPR Art. 30)