Transparent S3 encryption proxy — client-side AES-256-GCM for any S3-compatible backend
3.3K
A transparent HTTP proxy that provides client-side encryption for any S3-compatible storage backend — without changing a single line of application code.
Point your existing S3 clients (CNPG, Velero, Loki, Seafile, Gitea, Terraform, ...) at the gateway instead of directly at S3. The gateway encrypts data on write and decrypts on read. Your S3 backend stores only ciphertext.
┌─────────────┐ ┌──────────────────────┐ ┌────────────────┐
│ S3 Client │─S3 API─▶│ Encryption Gateway │─S3 API─▶│ S3 Backend │
│ (any app) │◀────────│ encrypt / decrypt │◀────────│ AWS, Hetzner, │
└─────────────┘ plain └──────────────────────┘ cipher │ Wasabi, B2... │
text text └────────────────┘
# Generate a 256-bit AES Key Encryption Key (keep this safe — it protects all your data)
openssl rand -base64 32
docker run -p 8080:8080 \
-e BACKEND_ENDPOINT="https://s3.amazonaws.com" \
-e BACKEND_REGION="us-east-1" \
-e BACKEND_ACCESS_KEY="your-backend-key" \
-e BACKEND_SECRET_KEY="your-backend-secret" \
-e KEY_MANAGER_ENABLED=true \
-e KEY_MANAGER_PROVIDER=self_contained \
-e SELF_CONTAINED_TYPE=aes \
-e SELF_CONTAINED_AES_KEYS="1=base64:<your-generated-kek>" \
-e GW_ACCESS_KEY_1="gateway-access-key" \
-e GW_SECRET_KEY_1="gateway-secret-key" \
cloud37io/s3-encryption-gateway:latest
Point any S3 client at http://localhost:8080. Done.
| Tag | Description |
|---|---|
0.9.0 | Specific version pins |
0.9.0-fips | FIPS 140-3 compliant build (AES-256-GCM + HKDF-SHA256 only) |
-fips tag): restricts to FIPS 140-3 approved algorithmsAWS S3 · Hetzner Object Storage · Wasabi · Backblaze B2 · Cloudflare R2 · MinIO · RustFS · Garage
All settings are available as environment variables or via a config.yaml file (mount at /app/config.yaml).
| Variable | Description | Default |
|---|---|---|
BACKEND_ENDPOINT | S3 backend URL | required |
BACKEND_ACCESS_KEY | Backend S3 access key | required |
BACKEND_SECRET_KEY | Backend S3 secret key | required |
GW_ACCESS_KEY_1 | Gateway credential (access key) | required |
GW_SECRET_KEY_1 | Gateway credential (secret key) | required |
KEY_MANAGER_ENABLED | Enable envelope encryption | false |
KEY_MANAGER_PROVIDER | self_contained or cosmian | — |
SELF_CONTAINED_AES_KEYS | KEK(s) in format version=base64:value | — |
ENCRYPTION_PASSWORD | Fallback password for legacy objects | — |
LISTEN_ADDR | Gateway listen address | :8080 |
METRICS_ADDR | Dedicated Prometheus metrics port | — |
Full configuration reference: docs/
helm repo add s3-encryption-gateway https://cloud37.github.io/s3-encryption-gateway/
helm install s3-encryption-gateway s3-encryption-gateway/s3-encryption-gateway
Helm chart on Artifact Hub.
Built and maintained by cloud37 — cloud consulting with offices in Switzerland, Germany, and Italy.
Content type
Image
Digest
sha256:aaee9023c…
Size
14.2 MB
Last updated
1 day ago
docker pull cloud37io/s3-encryption-gateway:dev-fips