Skip to main content
🎀 Speaking at KubeCon EU 2026 Lessons Learned Orchestrating Multi-Tenant GPUs on OpenShift AI View Session
🎀 Speaking at Red Hat Summit 2026 GPUs take flight: Safety-first multi-tenant Platform Engineering with NVIDIA and OpenShift AI Learn More
DevOps

Sovereign Cloud: Building EU-Compliant Infrastructure That Actually Works

Luca Berton β€’ β€’ 2 min read
#sovereign-cloud#eu-compliance#data-residency#cloud-infrastructure#gdpr

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.

Share:

Luca Berton

AI & Cloud Advisor with 18+ years experience. Author of 8 technical books, creator of Ansible Pilot, and instructor at CopyPasteLearn Academy. Speaker at KubeCon EU & Red Hat Summit 2026.

Luca Berton Ansible Pilot Ansible by Example Open Empower K8s Recipes Terraform Pilot CopyPasteLearn ProteinLens TechMeOut