EU Data Sovereignty on US Cloud Infrastructure

Use AWS, GCP, and Azure while keeping encryption keys under EU jurisdiction. The cloud provider stores only ciphertext.

US CLOUD (AWS / GCP / Azure)
frontendnginx:443
paymentsapi:8080
label: cloudtaser▶ Try Live Demo
redis:6379label: cloudtaser
analyticsspark:7077
postgresdb:5432label: cloudtaser
worker-01batch:9090
ml-traingpu:3000
eBPF agentenforcement
s3-proxy:8443label: cloudtaser
EU SECRET STORAGE
EU Secret Store Frankfurt, DE
REDIS_AUTH_TOKEN
BANK_API_SECRET
DB_PASSWORD
S3_ENCRYPT_KEY
01

The Problem

EU companies face a fundamental conflict when using US cloud providers.

Your EU customer data is one court order away

Under the US CLOUD Act (2018) and FISA Section 702, US authorities can compel any US-headquartered cloud provider to hand over data — regardless of where it's physically stored. The Schrems II ruling (CJEU, 2020) invalidated the EU-US Privacy Shield precisely because of this. Even data in EU regions on AWS, GCP, or Azure is subject to US jurisdiction. The provider holds the encryption keys, the database credentials, and the storage access. A single court order grants full read access to everything.

Provider holds encryption keys — SSE-S3, GCS CMEK, and Azure CMK all allow the provider to decrypt on demand
Database credentials stored in Kubernetes Secrets / etcd — base64-encoded, not encrypted, readable by anyone with cluster access
Object storage (S3, GCS, Azure Blob) — provider has full access to plaintext files, even with "encryption at rest"
GDPR Articles 44-49 require adequate protection for transfers — the EDPB recommends "effective technical supplementary measures" that prevent provider access

The provider stores only ciphertext

CloudTaser implements what the EDPB calls "effective supplementary technical measures" — the cloud provider physically cannot access your data in plaintext. Encryption keys live in an EU-hosted OpenBao (open-source Vault) instance under your control. Secrets are fetched into process memory at runtime. Object storage is encrypted client-side before upload. A court order yields only ciphertext and no keys to decrypt it.

Encryption keys held in EU-jurisdiction OpenBao/Vault — you control the instance, not the cloud provider
Credentials injected into process memory via wrapper — never written to disk, etcd, or K8s Secrets. No vault-agent sidecar needed.
Client-side encryption for S3 using transient secret engine — each object gets a unique DEK, provider stores only AES-256-GCM ciphertext
eBPF kernel-level enforcement (kprobes + tracepoints) — detects /proc/environ reads and unauthorized network exfiltration of secrets
02

The Solution

A cryptographic boundary between your data and the cloud provider.

01

Secrets stay in EU vault

Database passwords, API keys, and encryption keys are stored in an EU-hosted OpenBao (or HashiCorp Vault) instance — under your jurisdiction, not the cloud provider's. Secrets are fetched at pod startup directly into process memory using Kubernetes or token auth. They never appear in Kubernetes Secrets, etcd, ConfigMaps, or on disk. Lease renewal and token refresh happen automatically.

02

Transparent process wrapper injection

A mutating admission webhook intercepts pod creation and wraps the application process — not as a sidecar, but by rewriting the container entrypoint. The operator resolves the original image command from the container registry (OCI), injects an init container with the wrapper binary, and rewrites the command. Works with any image — scratch, distroless, alpine, or custom. No Dockerfile changes, no Helm template edits, no application code changes. Just add an annotation: cloudtaser.io/inject: "true".

03

Client-side encryption for storage

An S3-compatible reverse proxy sits between your application and the storage endpoint (AWS S3, GCS, MinIO). It encrypts each object with a unique data encryption key (DEK) using AES-256-GCM, then wraps the DEK via the OpenBao Transit secret engine using a transient key — the plaintext DEK never persists. Your application points to the proxy instead of the provider endpoint. Decryption is automatic on download. The cloud provider only ever stores ciphertext.

04

Runtime monitoring and enforcement

A kernel-level eBPF agent runs as a DaemonSet and attaches tracepoints and kprobes to monitor secret access patterns. It detects when any process attempts to read /proc/pid/environ (where injected secrets live), when secret material appears in network write buffers, or when unexpected processes access protected memory. The wrapper registers its child PID with the eBPF agent, enabling container-to-host PID translation for accurate monitoring across namespaces.

See it in action

Interactive demos running on real infrastructure. No signup required.

03

Components

Each component handles one part of the sovereignty stack.

Operator Kubernetes process wrapper injection Beta

Mutating admission webhook that intercepts pod creation and injects the CloudTaser wrapper. Resolves original container entrypoints by querying the OCI registry (supports private registries with imagePullSecrets), rewrites the command to launch through the wrapper, and mounts a shared volume with the wrapper binary via an init container. Supports sealed/unsealed operation modes — in sealed mode, the operator brokers vault tokens so pods don't need direct vault credentials. Drop-in replacement for vault-agent-injector with zero sidecar overhead.

Wrapper Secret fetching into process memory Beta

Process wrapper (similar to envconsul) that runs as PID 1 in the container, fetches secrets from your EU-hosted vault, injects them as environment variables, then execs the original application process. Secrets exist only in process memory — never on disk, never in tmpfs volumes (unlike vault-agent file-based injection). Supports Kubernetes auth and token auth. Handles automatic lease renewal and re-authentication. Registers child PIDs with the eBPF agent for runtime protection.

S3 Proxy Client-side encryption for object storage Beta

S3-compatible reverse proxy implementing envelope encryption. Each object gets a unique data encryption key (DEK) generated via OpenBao's Transit secret engine with transient keys — the plaintext DEK exists only in memory during the encryption operation. Objects are encrypted with AES-256-GCM before leaving the cluster. Compatible with any S3-compatible backend (AWS S3, GCS via interop, MinIO). Works with existing S3 SDKs — just change the endpoint URL. Supports multipart uploads and range reads.

eBPF Agent Runtime secret monitoring Beta

Kernel-level monitoring using eBPF tracepoints and kprobes, deployed as a DaemonSet. Attaches to sys_enter_openat to detect /proc/pid/environ reads, monitors network write buffers for secret material exfiltration, and translates container PIDs to host PIDs for cross-namespace visibility. The wrapper registers each protected process with the agent at startup. Supports detection and enforcement modes — enforcement mode can block unauthorized access in real time.

CLI Discovery and deployment Alpha

Command-line tool for planning a migration to CloudTaser. Connects to your cluster, scans all pods and deployments for secret references (environment variables from Secrets, secretKeyRef, volume mounts), and generates a migration plan mapping each secret to a vault path. Helps estimate the scope of a rollout before you start — how many workloads use secrets, which namespaces are affected, and which secrets are shared across deployments.

Platform SaaS control plane Planned

Centralized management for access policies, audit logs, and observability across clusters. Web interface for managing vault connections, viewing secret access patterns, and configuring alerting.

04

How CloudTaser Compares

Standard cloud encryption vs. client-side encryption with EU key sovereignty.

Capability Cloud-Native Encryption CloudTaser
Provider sees plaintext Yes — they hold the keys No — ciphertext only
Keys under EU jurisdiction Keys in provider KMS EU-hosted OpenBao/Vault
CLOUD Act exposure Provider can be compelled No keys to surrender
Application changes Varies by provider None — annotation-based
Secret injection vault-agent sidecar (extra container per pod) Process wrapper (no sidecar, no resource overhead)
Secrets on disk tmpfs volumes / etcd / K8s Secrets Process memory only — never on disk
Object storage encryption SSE — provider holds DEKs Client-side AES-256-GCM, transient DEKs
Runtime secret protection None eBPF kernel-level monitoring
Secret rotation Manual / provider-specific Automatic via vault leases
Multi-cloud Provider-specific APIs Works on GKE, EKS, AKS — same Helm chart