Skip to main content
πŸŽ“ Claude Code Masterclass Learn AI-assisted development on Udemy β€” plus the companion book on Leanpub & Amazon. Start Learning
Sovereign Cloud: Building EU-Compliant Infrastructure That Actually Works
DevOps

Sovereign Cloud: Building EU-Compliant Infrastructure...

EU data sovereignty requirements are reshaping cloud architecture. Practical patterns for multi-region deployments, data residency, and regulatory compliance.

LB
Luca Berton
Β· 2 min read

The Sovereignty Mandate

β€œJust use AWS/Azure/GCP” doesn’t work anymore for a growing number of European organizations. Between GDPR, Schrems II, the EU Data Act, and the Cyber Resilience Act, the requirements are clear: certain data must stay within EU jurisdiction, processed by EU-controlled infrastructure, with no possibility of foreign government access.

This isn’t theoretical. Banks, healthcare providers, government agencies, and defense contractors are rebuilding their cloud architectures right now.

What β€œSovereign” Actually Means

Sovereign cloud has three layers:

  1. Data sovereignty: Data physically stays within defined borders
  2. Operational sovereignty: EU entities operate the infrastructure
  3. Software sovereignty: No foreign government can compel access via legal mechanisms (looking at you, CLOUD Act)

Most hyperscalers offer regions in Europe, but that only covers layer 1. Layers 2 and 3 are why sovereign cloud providers exist.

Architecture Patterns

Pattern 1: Sovereign-First with Hyperscaler Burst

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚          Sovereign Cloud (Primary)      β”‚
β”‚     (Ionos, OVHcloud, Scaleway)         β”‚
β”‚                                         β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”‚
β”‚  β”‚ Regulated   β”‚  β”‚ Core        β”‚      β”‚
β”‚  β”‚ Workloads   β”‚  β”‚ Platform    β”‚      β”‚
β”‚  β”‚ (PII, GDPR) β”‚  β”‚ Services    β”‚      β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β”‚
β”‚                                         β”‚
β”œβ”€β”€β”€β”€ Encrypted Transit (WireGuard) ───────
β”‚                                         β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
β”‚  β”‚   Hyperscaler (Burst/Overflow)  β”‚    β”‚
β”‚  β”‚   Non-regulated workloads only  β”‚    β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Pattern 2: Multi-Region Data Mesh

# terraform/sovereign-regions.tf
module "eu_west" {
  source    = "./modules/sovereign-region"
  provider  = ionos
  region    = "de/fra"
  
  data_classification = "restricted"
  encryption_key_hsm  = module.eu_hsm.key_arn
  
  allowed_egress = [
    "eu-central",    # Frankfurt ↔ Amsterdam OK
    "eu-south",      # Frankfurt ↔ Milan OK
  ]
  # No transatlantic egress allowed
}

module "analytics" {
  source    = "./modules/sovereign-region"
  provider  = ovhcloud
  region    = "GRA"  # Gravelines, France
  
  data_classification = "internal"
  # Analytics can process aggregated, anonymized data
}

For the Terraform patterns behind multi-region sovereign deployments, Terraform Pilot has a dedicated module library.

Data Residency Enforcement

Technical controls that actually enforce residency:

# Ansible role for data residency controls
# roles/data_residency/tasks/main.yml
---
- name: Configure DNS to resolve only to EU endpoints
  ansible.builtin.template:
    src: coredns-sovereign.conf.j2
    dest: /etc/coredns/sovereign.conf
  notify: Restart CoreDNS

- name: Deploy Cilium network policies for geo-fencing
  kubernetes.core.k8s:
    kubeconfig: "{{ kubeconfig }}"
    state: present
    definition:
      apiVersion: cilium.io/v2
      kind: CiliumNetworkPolicy
      metadata:
        name: eu-only-egress
        namespace: "{{ item }}"
      spec:
        endpointSelector: {}
        egress:
          - toCIDR:
              # EU IP ranges only
              - 2.16.0.0/13      # DE
              - 5.39.0.0/17      # FR (OVH)
              - 31.3.0.0/16      # NL
              - 37.48.0.0/13     # NL
          - toCIDRSet:
              - cidr: 0.0.0.0/0
                except:
                  - 0.0.0.0/8
            toPorts:
              - ports:
                  - port: "53"
                    protocol: UDP
  loop: "{{ regulated_namespaces }}"

- name: Verify no non-EU DNS resolution
  ansible.builtin.command: >
    dig +short {{ item }} @8.8.8.8
  register: dns_check
  changed_when: false
  loop:
    - "api.internal.{{ domain }}"
    - "db.internal.{{ domain }}"

Encryption Architecture

Data at rest, in transit, and in use β€” with keys managed within EU:

# Key management β€” EU HSM only
- name: Initialize EU-sovereign HSM
  community.general.keycloak_realm:
    auth_keycloak_url: "{{ vault_url }}"
    realm: sovereign-eu
    state: present

- name: Configure Vault auto-unseal with EU HSM
  ansible.builtin.template:
    src: vault-config.hcl.j2
    dest: /etc/vault.d/config.hcl
  vars:
    seal_type: "pkcs11"
    hsm_endpoint: "{{ eu_hsm_endpoint }}"
    # HSM physically located in Frankfurt data center
    # Keys never leave the HSM boundary
# templates/vault-config.hcl.j2
seal "pkcs11" {
  lib            = "/usr/lib/softhsm/libsofthsm2.so"
  slot           = "0"
  pin            = "{{ vault_hsm_pin }}"
  key_label      = "vault-sovereign-key"
  hmac_key_label = "vault-sovereign-hmac"
}

storage "raft" {
  path = "/opt/vault/data"
}

listener "tcp" {
  address     = "0.0.0.0:8200"
  tls_cert_file = "/etc/vault.d/tls/vault.crt"
  tls_key_file  = "/etc/vault.d/tls/vault.key"
}

Compliance Automation

Map regulatory requirements to technical controls and verify continuously:

# playbooks/sovereign_compliance_check.yml
---
- name: Sovereign Cloud Compliance Audit
  hosts: all
  gather_facts: true

  tasks:
    - name: Verify data center location
      ansible.builtin.assert:
        that:
          - "'eu-' in cloud_region or cloud_provider in sovereign_providers"
        fail_msg: "Workload running outside EU sovereign infrastructure"

    - name: Check encryption at rest
      kubernetes.core.k8s_info:
        kubeconfig: "{{ kubeconfig }}"
        api_version: v1
        kind: Secret
        namespace: kube-system
        name: encryption-config
      register: encryption_config
      failed_when: encryption_config.resources | length == 0

    - name: Verify no CLOUD Act exposure
      ansible.builtin.assert:
        that:
          - cloud_provider not in ['aws', 'azure', 'gcp']
            or cloud_provider_sovereign_mode == true
        fail_msg: "Hyperscaler without sovereign operating model detected"

    - name: Check network egress controls
      kubernetes.core.k8s_info:
        kubeconfig: "{{ kubeconfig }}"
        api_version: cilium.io/v2
        kind: CiliumNetworkPolicy
        namespace: "{{ item }}"
        name: eu-only-egress
      loop: "{{ regulated_namespaces }}"
      register: egress_policies
      failed_when: egress_policies.resources | length == 0

    - name: Generate compliance report
      ansible.builtin.template:
        src: sovereign-compliance-report.md.j2
        dest: "reports/sovereign-{{ inventory_hostname }}-{{ ansible_date_time.date }}.md"
      delegate_to: localhost

EU Sovereign Cloud Providers

ProviderHQCertificationsK8s Service
Ionos (1&1)DEISO 27001, C5Managed K8s
OVHcloudFRSecNumCloud, HDSManaged K8s
ScalewayFRISO 27001, HDSKapsule
HetznerDEISO 27001β€” (self-managed)
Open Telekom CloudDEC5, ISO 27001CCE
StackitDEC5, ISO 27001SKE

For building on these platforms with infrastructure-as-code, I cover provider-specific Terraform patterns on Terraform Pilot and Kubernetes deployment recipes on Kubernetes Recipes.

The Cost Reality

Sovereign cloud costs 20-40% more than hyperscaler equivalents. But:

  • GDPR fines can reach 4% of global revenue
  • A single data breach costs average €4.3M
  • Regulatory non-compliance can mean market exclusion

The math works. Especially when you automate the compliance layer with Ansible instead of hiring a team of manual auditors.

Getting Started

  1. Classify your data β€” what actually needs sovereignty vs what doesn’t
  2. Start with one workload β€” pick a regulated application, not your entire estate
  3. Automate from day one β€” sovereign infrastructure without automation is a staffing nightmare
  4. Plan for multi-cloud β€” sovereign providers have smaller feature sets; you’ll need hybrid patterns

For consulting on sovereign cloud architecture and implementation, reach out through Open Empower β€” we specialize in EU-compliant infrastructure for regulated enterprises, which you can also learn more about at lucaberton.com.

#sovereign-cloud #eu-compliance #data-residency #cloud-infrastructure #gdpr
Share:
Cloud Infrastructure Design

Need help with Cloud Infrastructure Design?

Build resilient, cost-effective cloud environments with expert architecture consulting.

Learn more about Cloud Infrastructure Design

Want to operate this yourself, in production?

Take the free AI Platform Engineer Readiness Scorecard to see which skills transfer β€” then build a production-shaped AI platform in the 4-week Bootcamp.

Take the Scorecard β†’
Luca Berton β€” The Production AI Expert, Docker Captain

Luca Berton

The Production AI Expert Β· Docker Captain Β· KubeCon Speaker

15+ years in enterprise infrastructure. Author of 8 technical books, creator of Ansible Pilot (1M+ YouTube views, 648K site users). Former Red Hat engineer. Speaker at KubeCon EU 2026 and Red Hat Summit 2026.

Free 30-min Production AI consultation

Book Now