Hetzner Object Storage — Bucket-Inventar

S3-API-kompatibel, EU-only (fsn1, nbg1, hel1), pay-per-use. Bucket-Konvention analog buckets, aber mit Hetzner-Quirks (kein Replication, kein Storage-Class-Wechsel, Object-Lock nur bei Bucket-Erstellung aktivierbar).

Buckets pro Project

av-<industriekunde-slug> (geplant, in Anlage)

Aus plan Unit 3:

BucketStatusRegionZweckSettingsLifecycle
<kunde-slug>-datatbdnbg1 oder fsn1 (= App-Server-Region)App-Daten + age-encrypted Backups (WAL-G, pg_dump)Versioning enabled, Public Access blockiert, Object-Lock NICHT aktiviert (DSGVO-Art-17-Löschbarkeit)Noncurrent-Versions Glacier-Äquivalent 30d, Expire 365d, Multipart-Cleanup 7d
<kunde-slug>-audittbdnbg1 oder fsn1LLM-Audit-Logs (age-encrypted JSONL.gz pro Stunde) + sonstige Audit-TrailsVersioning enabled, Public Access blockiert, Object-Lock Compliance-Mode Default-Retention 2555 Days (7y HGB) — Aktivierung GATED auf Lead-Briefing-PII-Klassifikation (D-PLAN-12)Current-Objects Expire 2555d, Noncurrent-Versions Expire 365d, Multipart-Cleanup 7d
<kunde-slug>-test-objectlocktbdnbg1 oder fsn1Vor Prod-Bucket-Anlage testen ob Object-Lock-Mechanik richtig konfiguriert (Default 1-Day-Retention) — wegwerf-BucketObject-Lock 1-Day-Retention, Versioningmanuell löschen nach Test

Werte-Double-Check vor Anlage: Retention-Days = 2555 (NICHT 25550 = 70 Jahre!). Screenshot der Console-Konfig vor Commit, zweite Person/Claude reviewen. Object-Lock ist irreversibel — Setup-Fehler kostet 7 Jahre. (Security-Audit-F-14)

Bucket-Anlage — Step-by-Step

  1. Hetzner Cloud Console → Project wählen → Object Storage → Add Bucket
  2. Name nach Konvention: <kunde-slug>-<zweck> (z.B. acme-data)
  3. Region: gleiche wie der App-Server (gleicher Project-Region — kein Cross-Region-Egress)
  4. Object Lock: nur aktivieren wenn der Bucket-Zweck Compliance-Audit-Trail ist (z.B. <kunde>-audit). Achtung: nicht nachträglich aktivierbar! Wenn nicht klar → erst Test-Bucket
  5. Versioning: enabled (Pflicht — Lifecycle funktioniert nicht bei suspended Versioning)
  6. Public Access: blockiert (Default)
  7. Access Keys generieren (Project → Security → S3 Credentials):
    • <kunde-slug>-data-rw für App-Server (Read + Write auf data-Bucket)
    • <kunde-slug>-audit-write für App-Server (NUR PutObject auf audit-Bucket)
    • <kunde-slug>-audit-read-mfa für Marvin-IAM-User mit MFA (Read-only auf audit-Bucket, nur für Audit-Recherche)
  8. Keys in 1Password speichern: Hetzner / <project> / s3-keys-<rolle>
  9. Lifecycle-Rules setzen via aws s3api put-bucket-lifecycle-configuration --endpoint-url https://<region>.your-objectstorage.com (S3-API-kompatibel)
  10. In diese Tabelle oben eintragen + im Project-File av-<kunde-slug>.md § Storage referenzieren

Konventionen

Endpoint-Pattern

RegionEndpoint
Falkenstein (DE)https://fsn1.your-objectstorage.com
Nürnberg (DE)https://nbg1.your-objectstorage.com
Helsinki (FI)https://hel1.your-objectstorage.com

Pfad-Stil

  • Virtual-hosted-style ist Default (https://<bucket>.<region>.your-objectstorage.com)
  • Path-style funktioniert (für Terraform-S3-Backend, AWS-SDK mit use_path_style: true)
  • Empfehlung: virtual-hosted für App-Code, path-style für Tooling (Terraform, manuelle AWS-CLI)

Bucket-Layout

Bucket-TypTop-Level-PrefixesErklärung
<kunde>-datawalg/, pgdump/, app/WAL-G Continuous Archive, nightly pg_dump, App-spezifische Daten
<kunde>-auditllm/<yyyy>/<mm>/<dd>/<hh>.jsonl.gz.ageLLM-Audit-Logs stündlich, age-encrypted (D-PLAN-14)

Was Hetzner Object Storage NICHT kann (vs AWS S3)

FeatureHetzner StatusWorkaround
Replication (cross-region/cross-bucket)rclone-Sync als Cron, deferred bis 2. Industriekunde
Storage Classes (Glacier, IA)❌ — nur STANDARDLifecycle-Expiration statt Cold-Tier
Bucket LoggingApp-Side-Logging in Postgres audit_log
Bucket Website HostingCloudflare-Tunnel zur App, kein Static-Hosting auf Bucket
Object TaggingMetadaten in App-DB statt Bucket-Tags
Object-Lock nachträglich aktivieren❌ — nur bei Bucket-ErstellungTest-Bucket vor Prod, neuer Bucket bei nachträglichem Bedarf
Cross-Region❌ — Bucket lebt in einer Regionrclone manuell für Off-Site-Copy

Pricing (Stand Mai 2026)

  • Base: 4,99 €/Monat — enthält 1 TB Storage + 1 TB Egress
  • Excess Storage: ~5 €/TB/Monat
  • Excess Egress: 1,00 €/TB Internet-Egress
  • Internal Traffic (zu Hetzner Cloud Server in gleicher Region): kostenlos
  • Limits: 100 TB pro Bucket, 50 Mio Objects pro Bucket

Quelle: Hetzner Object Storage Pricing

Object-Count-Risiko bei Audit-Logs

Pattern aus plan D-PLAN-7: hourly JSONL pro Kunde = 24 Objects/Tag = 8760 Objects/Jahr. Bei 7y-Retention = ~61k Objects pro Kunde — weit unter 50M-Limit.

Bei mehreren Kunden im gleichen Bucket (shared agentic-audit-Bucket): >100 Kunden würde Limit erreichen — dann pro Kunde eigenen Bucket. Aktuelle Konvention (1 Bucket pro Kunde-Project) hält das auseinander.

Cost-Tracking

Object-Storage-Kosten sind pro Project separat in Hetzner-Billing sichtbar. Cost-Alarm-Schwellen (siehe cost-alarme-pro-project) decken Object Storage mit ab.

  • _index — Capability-Dashboard
  • projects — Project-Inventar
  • buckets — Vergleichs-Pattern AWS-S3
  • plan Unit 3 + D-PLAN-6/14 — Object-Storage-Setup in der MVP-Iteration
  • llm-hosting-eu-optionen — strategische Grundlage Hetzner-Hosting