Design Patterns

The following patterns are proven and derived from the Wombat principles. They are formulated in a cloud-agnostic manner, with provider-specific notes.

Pattern 1: Region-Pinned Landing Zone

Problem

Without a structured landing zone, individual teams can create resources in arbitrary regions.

Solution

A landing zone with built-in region pinning overrides all other measures through technical upfront constraints.

Structure

Organization Root
โ”œโ”€โ”€ Management Account
โ”‚   โ””โ”€โ”€ Service Control Policy: DenyOutsideApprovedRegions
โ”œโ”€โ”€ Sovereign Workload OU
โ”‚   โ”œโ”€โ”€ Production Account
โ”‚   โ”‚   โ”œโ”€โ”€ Terraform: provider.region = var.aws_region (validated)
โ”‚   โ”‚   โ”œโ”€โ”€ VPC Endpoints: S3, KMS, ECR, STS
โ”‚   โ”‚   โ””โ”€โ”€ CloudTrail: multi-region, log-validation, sovereign S3
โ”‚   โ””โ”€โ”€ Non-Production Account
โ”‚       โ””โ”€โ”€ Same constraints, different data classification
โ””โ”€โ”€ Shared Services Account
    โ””โ”€โ”€ Central Logging: CloudWatch Logs, S3 (eu-central-1 enforced)

Controls

  • WAF-SOV-010: Residency policy reflected in IaC defaults

  • WAF-SOV-020: SCP prevents outside-region deployments

  • WAF-SOV-040: Central logging stored sovereignly

Anti-Pattern

  • Individual accounts without SCP guardrails

  • "Default VPC" with open security group configuration

  • No central logging account


Pattern 2: Sovereign Key Hierarchy

Problem

Standard encryption with provider-managed keys gives the provider theoretical access.

Solution

A three-tier key hierarchy based on data criticality:

Tier 1 โ€“ Public/Low-sensitivity Data
โ””โ”€โ”€ Provider-Managed Key (PMK) โ€“ acceptable

Tier 2 โ€“ Internal/Operational Data
โ””โ”€โ”€ Customer-Managed Key (CMK) in Cloud-KMS
    โ”œโ”€โ”€ Rotation: automatic (annual)
    โ””โ”€โ”€ Key Policy: restrict to specific services/principals

Tier 3 โ€“ PII / Financial / Health Data
โ””โ”€โ”€ BYOK: Customer-Key, Cloud-managed HSM (CloudHSM, Azure HSM, Cloud HSM)
    or
    HYOK: Key in external HSM (Thales, Utimaco, Securosys)
    โ”œโ”€โ”€ Access for cloud provider: technically not possible
    โ””โ”€โ”€ Rotation: manual / process-driven

Controls

  • WAF-SOV-050: Key ownership, rotation, deletion

Recommendations

  • CloudHSM (AWS) or Azure Dedicated HSM for Tier-2/3 keys

  • Document and conduct key ceremonies for HYOK annually

  • Plan cryptographic erasure as GDPR Art. 17 implementation


Pattern 3: Sovereign Observability Stack

Problem

Standard monitoring setups export telemetry data to US-based SaaS providers.

Solution

A sovereign observability stack processes data within approved regions:

Application
โ””โ”€โ”€ OpenTelemetry SDK (vendor-neutral)
    โ”œโ”€โ”€ Traces โ†’ Sovereign Trace Backend (Jaeger/Tempo in eu-central-1)
    โ”œโ”€โ”€ Metrics โ†’ Sovereign Metrics Backend (Prometheus/Thanos in eu-central-1)
    โ””โ”€โ”€ Logs โ†’ CloudWatch/S3 (eu-central-1, retention=90d, KMS-encrypted)
                    โ””โ”€โ”€ Optional export to DPA-secured SIEM

If external SIEM is necessary:

  • Conclude DPA and verify data processing region

  • Data masking before export (remove PII fields)

  • Export via Private Link / VPN (no public internet)

  • Regular review: which data leaves the sovereignty boundary?

Controls

  • WAF-SOV-040: Logging residency

  • WAF-SOV-090: Egress control


Pattern 4: Break-Glass with Zero Standing Privilege

Problem

Permanent admin roles are a permanent attack target.

Solution

Zero Standing Privilege: admin access does not exist permanently, but is only activated on demand.

Normal Operations:
โ”œโ”€โ”€ Developers: read-only or scoped write (application level)
โ”œโ”€โ”€ Operations: operations role (no IAM access)
โ””โ”€โ”€ Platform: platform role (IaC deploy, no data access)

Break-Glass Activation:
โ”œโ”€โ”€ Trigger: documented incident / approval (Dual Control)
โ”œโ”€โ”€ Activation: JIT system (IAM Identity Center / Azure PIM)
โ”œโ”€โ”€ Duration: max. 4h, automatic deactivation after expiry
โ”œโ”€โ”€ Logging: CloudTrail captures all actions
โ””โ”€โ”€ Review: post-incident review within 5 business days, record archived

Controls

  • WAF-SOV-060: Privileged access, SoD

  • WAF-SOV-070: Break-glass process & logging


Pattern 5: Sovereign Egress Gateway

Problem

Applications with open egress configuration can send data to arbitrary destinations.

Solution

Centralized egress point with domain allow-list and anomaly detection:

Workload Subnet (Private)
โ””โ”€โ”€ all outgoing connections โ†’ Egress Gateway

Egress Gateway
โ”œโ”€โ”€ AWS Network Firewall / Azure Firewall / GCP Cloud Armor
โ”œโ”€โ”€ Domain Allow-List (FQDN-based)
โ”‚   โ”œโ”€โ”€ Approved: *.amazonaws.com (via VPC Endpoint)
โ”‚   โ”œโ”€โ”€ Approved: *.internal.company.com
โ”‚   โ””โ”€โ”€ Blocked: * (default deny)
โ”œโ”€โ”€ DNS: Route53 Resolver / Azure Private DNS
โ””โ”€โ”€ Logging: Flow Logs โ†’ sovereign S3

VPC Endpoints (no internet routing):
โ”œโ”€โ”€ com.amazonaws.eu-central-1.s3
โ”œโ”€โ”€ com.amazonaws.eu-central-1.kms
โ”œโ”€โ”€ com.amazonaws.eu-central-1.ecr.api
โ””โ”€โ”€ com.amazonaws.eu-central-1.sts

Controls

  • WAF-SOV-090: Controlled egress

  • WAF-SOV-040: VPC Flow Logs


Pattern 6: Exit-Ready IaC Architecture

Problem

Proprietary IaC with hard-coded provider dependencies makes migration extremely expensive.

Solution

Portable IaC with abstract modules and open standards:

IaC Abstraction Layer
โ”œโ”€โ”€ Module: network/vpc โ†’ AWS VPC or Azure VNet
โ”œโ”€โ”€ Module: storage/object โ†’ S3 or Azure Blob or GCS
โ”œโ”€โ”€ Module: database/relational โ†’ RDS PostgreSQL or Azure PostgreSQL
โ””โ”€โ”€ Module: compute/container โ†’ EKS or AKS or GKE

Data Standards:
โ”œโ”€โ”€ PostgreSQL (open) instead of Aurora Serverless v2 (proprietary)
โ”œโ”€โ”€ OpenTelemetry instead of X-Ray (proprietary)
โ””โ”€โ”€ S3-compatible API instead of proprietary object store features

Exit-Readiness:
โ”œโ”€โ”€ Quarterly Data Export Test: all data exported and validated
โ”œโ”€โ”€ Terraform Plan in target cloud: IaC adapted and planned
โ””โ”€โ”€ Lessons Learned documented

Controls

  • WAF-SOV-100: Exit plan & portability

  • WAF-SOV-080: Dependency & subprocessor inventory