sg-gov-resiliency-recovery · git:20261027.6f21efa · 2026-10-27 · sha256 64d2bf5a7565a174
sg-gov-resiliency-recovery git:20261027.6f21efaA
Immutable. This exact content never changes and is served at /api/v1/blob/64d2bf5a7565a174.
--- name: sg-gov-resiliency-recovery description: >- Build or audit availability and recoverability for a Singapore government system against the ICT&SS Policy Reform (IM8 successor) Resiliency (RS-1..RS-3) and Backup & Recovery (BR-1..BR-6) controls: multi-AZ deployment with health checks and failover, load balancing and auto-scaling, periodic load testing, backups stored encrypted in a separate location, immutable backup retention (S3 Object Lock), recovery testing against RTO/RPO, and the disaster recovery plan, business continuity plan, and continuity exercises. Use when deploying or reviewing agency infrastructure for high availability, configuring AWS Backup/Azure Backup, setting backup frequency or retention, planning DR failover, or preparing RTO/RPO commitments. Triggers: multi-AZ or availability zones, auto-scaling, load testing, backup policy or schedule, immutable/ ransomware-proof backups, restore or recovery testing, RTO/RPO, disaster recovery plan, business continuity exercise, single point of failure, IM8 resiliency or backup requirements. --- # sg-gov-resiliency-recovery: RS + BR controls for SG government systems You are building or auditing **whether a Singapore government system stays up and can come back**: the ICT&SS Policy Reform **Resiliency family (RS-1..RS-3)** and **Backup & Recovery family (BR-1..BR-6)**, treated as one concern. RS keeps the service available through zone failures and demand spikes; BR gets data and service back when availability fails anyway. Two points apply throughout: 1. **A backup that has never been restored is unproven.** BR-1 backups only count with BR-2 recovery tests proving full restore of *data and services* within the RTO/RPO, and BR-3 immutability keeps those backups intact through a ransomware attack. 2. **Six of the nine controls carry SSP parameters.** AZ count, load-test cadence, backup frequency, recovery-test cadence, retention days, and exercise cadence are agency tailoring decisions. **Locate the values; never invent them.** A report that asserts "backups daily" without the SSP saying so is itself a finding. ## Source and currency Control text in this skill and `references/rs-br-controls.md` is embedded from **info.standards.tech.gov.sg as of 2026-07-23** (both family pages last updated 24 March 2026). The standards iterate. Verify against the live pages for anything compliance-critical: - RS: https://info.standards.tech.gov.sg/control-catalog/cybersecurity/rs/ - BR: https://info.standards.tech.gov.sg/control-catalog/cybersecurity/br/ ## Reference files - `references/rs-br-controls.md` — full text of RS-1..RS-3 and BR-1..BR-6 (statement, recommendations, risk, parameters) plus cross-family notes. Read it for exact wording in audit responses or SSP documentation. - `references/dr-bcp-templates.md` — skeletons and checklists for the plan-and-exercise controls: DR plan (BR-4), BCP (BR-5), exercise formats and evidence log (BR-2/BR-6), and load-test harness notes (RS-3). Read it when producing those artifacts. ## Before you start: the SSP parameters | Control | Parameter | What the SSP defines | |---|---|---| | RS-1 | rs-1_prm_1 | Number of availability zones to deploy to | | RS-3 | rs-3_prm_1 | Load-testing frequency (days) | | BR-1 | br-1_prm_1 | Backup frequency (days) | | BR-2 | br-2_prm_1 | Recovery-testing frequency (days) | | BR-3 | br-3_prm_1 | Immutable backup retention (days) | | BR-6 | br-6_prm_1 | Business continuity exercise frequency (days) | Ask for the project's SSP (the sibling skill **sg-gov-ssp-navigator** determines which SSP applies); if values are blank, flag the gap as its own finding. RTO and RPO come from business requirements and the risk assessment (BR-4). They are inputs you collect, and RPO must be consistent with the backup frequency (`br-1_prm_1`): an RPO of 1 hour with daily backups is a contradiction to report. ## Procedure Work in order: **stay up → come back → prove it**. For **setup**, produce each configuration/artifact. For **audit**, verify each and record pass / fail / not-applicable-per-SSP with evidence (the ASG/subnet config, the backup vault policy, the object-lock setting, the test records, the plan documents). ### Stage 1 — Stay up (RS-1, RS-2, RS-3) **1a. Multi-AZ (RS-1).** Deploy across the SSP-defined number of AZs: subnets per AZ, load balancer spanning them, compute spread with health checks and automated failover (ASG/managed instance groups; topology spread + pod disruption budgets for Kubernetes), and **data replicated across AZs** (RDS Multi-AZ, zone-redundant storage). A "multi-AZ" app whose database lives in one AZ still has the single point of failure. **1b. Dynamic scaling (RS-2).** Auto-scaling driven by real signals (CPU, request count, queue depth) behind load balancing: scale out before saturation, scale in to cut idle capacity; serverless/managed autoscaling counts. Fixed instance counts sized for peak are a finding in both directions. **1c. Load testing on cadence (RS-3).** Every `rs-3_prm_1` days, against a **production replica**, with load that mimics real user traffic and the expected spike patterns. Pass criteria tie to SLOs and to whether autoscaling engaged. Harness notes in `references/dr-bcp-templates.md`. ### Stage 2 — Come back (BR-1, BR-3, BR-4, BR-5) **2a. Backups, separate and encrypted (BR-1).** All important data and systems backed up at least every `br-1_prm_1` days via CSP-managed tooling (AWS Backup / Azure Backup / GCP Backup and DR), stored **separately from primary storage** (separate account/vault at minimum) and encrypted at rest. For SaaS, confirm the provider's restore capability in writing. Where backups live is constrained by **DP-1 residency** (sg-gov-data-protection); an overseas backup vault is a residency breach. **2b. Immutable retention (BR-3).** Backups cannot be modified or deleted for `br-3_prm_1` days (or the agency retention policy): S3 Object Lock in compliance mode, Azure immutable blob storage, vault lock policies, plus deny-delete IAM on the vault. This is the ransomware control; soft-delete alone is not immutability. **2c. DR plan (BR-4).** A maintained, regularly tested plan restoring critical functions and data within the RTO/RPO: roles, detection and declaration, per-scenario recovery procedures, communications, validation, test log. Template in `references/dr-bcp-templates.md`. The RTO/RPO themselves are business decisions; collect them, don't invent them. **2d. BCP (BR-5).** The business-level continuity plan (degraded-mode operations, manual workarounds, activation and comms), built on the CSA Cybersecurity Toolkit templates; the DR plan is its systems layer. ### Stage 3 — Prove it (BR-2, BR-6) **3a. Recovery testing (BR-2).** Every `br-2_prm_1` days, perform a restore (**data and services, fully**) and measure against RTO/RPO. A snapshot-exists check is not a recovery test. Record date, scenario, RTO/RPO met, gaps, and actions: the record is the audit evidence. **3b. Continuity exercises (BR-6).** Every `br-6_prm_1` days, exercise the BCP (checklist walkthrough, tabletop, or simulation/game-day) and record evidence the same way. Feed gaps back into the plans (BR-4/BR-5 both require their plans to be *maintained*, and exercises surface the updates needed). ## Audit checklist | ID | Check | Where | Param | |---|---|---|---| | RS-1 | Deployed across rs-1_prm_1 AZs; LB + health checks + automated failover; data replicated across AZs | Subnets, ASG/LB, DB config | ✓ | | RS-2 | Auto-scaling on real signals behind load balancing; no fixed peak-sized fleet | Scaling policies | | | RS-3 | Load tests every rs-3_prm_1 days on a prod replica with realistic traffic; results recorded | Test reports | ✓ | | BR-1 | All important data/systems backed up every br-1_prm_1 days; separate location; encrypted | Backup plans/vaults | ✓ | | BR-2 | Recovery tested every br-2_prm_1 days; full data+service restore proven within RTO/RPO | Test records | ✓ | | BR-3 | Backups immutable for br-3_prm_1 days (Object Lock/vault lock); no delete path | Vault/bucket config | ✓ | | BR-4 | DR plan exists, maintained, exercised; RTO/RPO from business requirements; roles/procedures/comms | Plan + test log | | | BR-5 | BCP exists (CSA toolkit-based), covering degraded-mode business operations | Plan | | | BR-6 | BC exercise every br-6_prm_1 days; records with gaps and actions | Exercise records | ✓ | Report per control ID with pass / fail / not-applicable-per-SSP, the evidence found, and the fix. Route findings about *where* backups reside or their encryption mechanics to DP (sg-gov-data-protection), and user-facing downtime notices to the DSS PR controls (sg-gov-service-shell), rather than double-counting them here. ## Related skills in this repo - **sg-gov-ssp-navigator** — which SSP applies, at which level each RS/BR control sits, and where the six parameter values live. Use it before declaring any control out of scope. - **sg-gov-data-protection** — DP-1 residency constrains where backups and DR targets may live; DP-2 owns encryption-at-rest mechanics; DP-5/DP-6 own sanitisation and witnessed destruction when backup media retire. BR owns the backup lifecycle itself. - **sg-gov-service-shell** — the user-facing DSS counterparts: PR-3 24/7 availability (what RS-1/RS-2 deliver) and PR-4 scheduled-downtime notices (what users see when DR/BC events interrupt service). - **sg-gov-container-security** — CS hardens the containers whose placement (topology spread, pod disruption budgets, multi-AZ node groups) implements RS-1 for containerised workloads. - **sg-gov-logging-monitoring** — LM owns the health-check alerting, SLOs, and golden signals that detect the failures RS absorbs, and the monitoring evidence load tests are judged against.