AWS Multi-Account-Org als Hosting-Standard
Kontext
Bis 2026-05-07 lief der eine produktive eigene Service (mcp-vf-hosted fuer Vibe Factory) auf Railway EU-West (Amsterdam). Privat hat Marvin AWS schon laenger genutzt (siehe cloud-infrastructure), aber nicht systematisch und nicht als Org.
Drei Treiber kommen jetzt zusammen:
-
Becker als erster regulatorischer Industriekunde. becker hat dezidierte DSGVO-Anforderungen und einen GF (Ralf Schmid) der das Hosting-Konzept inhaltlich pruefen wird. Multi-Tenancy auf einem geteilten Railway-Container ist hier nicht mehr verteidigbar — saubere Account-Trennung pro Kunde mit Audit-Trail-Garantie ist Pflicht.
-
MCP-as-a-Service-Vision. Marvin will alle eigenen MCPs (gsuite, m365, papierkram, ticketpay, runway, replicate, lexware, sevdesk, plus mcp-vf-hosted-Pattern) so betreiben, dass er einzelne Personen einfach „freischalten” kann — Endkunden, Partner, andere Software (claude.ai Custom Connector, ChatGPT, Claude Desktop, n8n, beliebige OAuth-Clients). Das erfordert OAuth, Multi-Tenant, Rate-Limiting pro Subject, sauberes Logging — also produktionsreife Cloud-Infra, nicht „ein Container auf Railway”.
-
Sauberer steuerlicher Schnitt. Mit der UG-Gruendung 2026-04-27 muss alles UG-Eigene klar getrennt von Privat sein. Multi-Account loest das strukturell — privat in
mk-privat, UG inav-*, Billing pro Account.
Optionen
Option A — Status quo: Railway plus ad-hoc AWS
Pro:
- Railway-DX ist sehr gut (
git pushdeployed) - Ein bestehender Service laeuft schon dort
- Kein Setup-Aufwand jetzt
Contra:
- Railway als US-Firma, EU-Region nur fuer Datenstandort — fuer regulatorische Audits dasselbe Argument wie AWS aber ohne die Compliance-Gegen-Belege (AVV mit AWS einfacher als mit Railway, AWS hat C5/SOC/ISO-Zertifikate fuer DE-Markt etabliert)
- Keine echte Mandanten-Trennung — alle Kunden in einem Railway-Projekt
- Skaliert nicht zu MCP-as-a-Service (kein OAuth-Server-Hosting, kein Multi-Tenant-Pattern)
- Kein zentraler Audit-Trail ueber mehrere Services
Option B — Single AWS-Account fuer alles
Pro:
- Eine Bill, eine Console, einfaches Setup
- Reicht technisch
Contra:
- Keine Mandanten-Trennung (Becker und Vibe Factory in einem Account = ein Kompromittierungs-Punkt fuer beide Kunden)
- Cost-Allocation pro Kunde nur ueber Tags, fehleranfaellig
- IAM wird ueberkomplex sobald >2 externe Mitarbeiter (Alex Gross, kuenftig Vibe-Factory-PM, Icking-Florian) Zugriff brauchen
- Bei Sicherheits-Vorfall blast radius = alles
Option C — AWS Multi-Account-Org, ein Sub-Account pro Kunde (gewaehlt)
Pro:
- Strukturelle Mandanten-Trennung. Kunde X kann technisch nicht auf Kunde Y zugreifen, auch nicht versehentlich. IAM-Mistakes haben begrenzten Blast Radius.
- Cost-Allocation per Account. AWS zeigt pro Account Kosten — Kunde lesen oder Marge intern auswerten ohne Tag-Hygiene-Disziplin.
- Audit-Trail Org-weit. Ein Org-CloudTrail im Mgmt-Account loggt alles, kann nicht von Sub-Account-Admins abgeschaltet werden.
- Skaliert zu beliebig vielen Kunden. Account-Erstellung dauert ~1 Minute, ist programmatisch, kostet 0 €.
- Identity Center zentral. Permission Sets pro Kunden-Use-Case (
BeckerBasOperatorist das erste Beispiel) — least-privilege strukturell verankert. - Compliance-Dokumentation einfach. „Becker hat seinen eigenen AWS-Account, hier die Account-ID, hier das CloudTrail” ist als Antwort auf Audit-Fragen viel staerker als „wir nutzen Tags zur Trennung”.
Contra:
- Mehr Setup-Aufwand pro Kunde (~10 Min: Account erstellen, Permission Set zuweisen, CLI-Profil ergaenzen, Doku-File anlegen)
- Cross-Account-Resource-Sharing braucht explizite Konfiguration (im Default-Fall aber nicht noetig)
Option D — Hetzner Self-Managed
Pro:
- DSGVO-strukturell (deutsches Unternehmen, Frankfurt-RZ)
- Kein CLOUD-Act-Argument
- Fuer hoch-LLM-Volumen-Kunden aus llm-hosting-eu-optionen empfohlen
Contra:
- Mandanten-Trennung muesste auf Container-Ebene gebaut werden — viel mehr Engineering
- Kein nativer OAuth-Server / Identity-Hub
- Ops-Aufwand (Patches, Monitoring, Backups) signifikant
- Laesst sich mit AWS kombinieren (Hetzner fuer LLM-Self-Hosting wenn noetig, AWS fuer App-Layer)
Entscheidung
Option C — AWS Multi-Account-Org wird der Hosting-Standard fuer Agentic Ventures.
Konkret:
| Account-Typ | Naming | Zweck |
|---|---|---|
| Master | marvinkuehlmann (343241684374) | Org-Admin, Billing, zentrales Audit-Logging, eigene Web-Properties |
| UG-Production | av-production (425924867359) | UG-eigene Workloads, MCP-as-a-Service-Hub mittelfristig |
| Privat | mk-privat (210948569534) | Marvin-Privat, steuerlicher Schnitt |
| Pro Kunde | av-<kunde-slug> | Kunden-Workload (Becker, Vibe Factory, Icking, …) |
Zentrale Komponenten im Mgmt-Account:
- Identity Center (
d-996749743e) als einziger Login-Pfad fuer Marvin und externe Kunden-PMs - Org-CloudTrail
av-mgmt-trailmit Bucketav-cloudtrail-logs-343241684374(alle Sub-Accounts ohne Opt-Out) - SCPs aktiviert (heute keine Policy gebunden — bei Bedarf z.B.
DenyRegionsExceptEU)
Default-Region: eu-central-1 (Frankfurt) fuer alle Workloads, US-Regions nur fuer dezidierte Ausnahmen (z.B. wenn ein Modell EU-only nicht verfuegbar ist).
Per-Account-Pflichten:
- IAM-Identity-Center-Login statt IAM-User (Ausnahme: Service-Accounts wie
bas-bedrock-pilot) - Permission Sets pro Kunden-Mitarbeiter mit Inline-Policy auf genau die Ressourcen die er braucht
- Bedrock-Aktivierung pro Account auf Bedarf (im Becker-Account breit aktiviert, default-Modell pro Use-Case vorgeben)
- Pro Sub-Account ein Doku-File
intern/capabilities/aws/av-<kunde>.mdmit Bestand
Railway-Migration: Alle Code-Sachen wandern mittel-/langfristig auf AWS. Kein hartes Cutoff-Datum — laufende Services bleiben auf Railway bis das AWS-Aequivalent steht und getestet ist (parallel-and-switch). Konkret:
- mcp-vf-hosted — VF-Mono-MCP — primaerer Migrations-Kandidat. Ziel-Architektur: AWS App Runner oder ECS Fargate in
av-production(nicht inav-vibe-factory— der MCP gehoert AV, nicht VF), OAuth weiter via Scalekit (oder Migrate auf Cognito wenn das Kosten-/Komfort-Budget besser ist). - Alle eigenen MCP-Repos (_index) — als hosted Services in
av-production— siehe „MCP-as-a-Service” unten.
Sub-Accounts kuenftiger Kunden:
av-vibe-factory(Vibe Factory) — anlegen sobald Migrationmcp-vf-hostedstartetav-icking(Icking) — leerer Sub-Account fuer eventuelle eigene Workloads die wir fuer Icking betreiben. Aktuell laeuft im Icking-eigenen AWS-Account063507503859nur die AI-Pipeline fuer Smart Dach Next (Mistral-Judge, 5.500 EUR Festpreis). HeyJulia laeuft heute noch gar nicht (Vertrag v4 vom 2026-05-06 wartet auf Antwort) und wird wenn er kommt bei uns gehostet
Aus dem Vault-Konvention-Set: Naming av-<kunde-slug>, Email-Plus-Alias aws+av-<kunde-slug>@agenticventures.de, dokumentiert in naming-konvention.
Konsequenzen
Wirtschaftlich
- Account-Erstellung kostet 0 €. Unterschied zu Railway: Wir bezahlen die tatsaechlich genutzten AWS-Services (S3, Bedrock-Invocations, App Runner / Fargate). Bei niedrigem Volumen (Free-Tier-naehe) kann das billiger oder teurer als Railway sein — Detail-Vergleich pro Service.
- Bedrock-Invocation-Kosten fuer Becker werden im Becker-Account sichtbar — Cost-Allocation gegen den Kunden ist trivial („Pass-Through” oder „Markup”, spaeter zu entscheiden).
- Ops-Aufwand initial hoeher (Permission Sets pro Kunde, Doku, neue Sub-Accounts) — danach skaliert flach.
Technisch
- Neue Code-Deployments laufen ueber AWS-Patterns (App Runner / Fargate / Lambda je nach Workload-Profil), nicht mehr Railway-Konventionen.
- Secrets in AWS Secrets Manager oder SSM Parameter Store statt Railway-ENV.
- IaC-Setup: Terraform oder AWS CDK. Heute nicht festgelegt — Vorschlag CDK-Python (passt zu MCP-Repos die alle Python sind), Entscheidung beim ersten Deploy.
Strategisch (MCP-as-a-Service)
Marvin formuliert die Vision: „Ich will alle unsere MCPs auf AWS haben. Damit ich einfach Leute freischalten kann, wenn die meinen MCP nutzen wollen oder die einfach an Software easy anbinden.” Das ist nicht „lift-and-shift bestehende MCPs”. Das ist ein eigenes Produkt:
- Pro MCP ein hosted Endpoint mit OAuth (per-User-Anmeldung)
- Multi-Tenant: Marvin gibt Kunde X Zugang zu MCP Y, Kunde X kann nicht Kunde Z’s Daten sehen
- Subject-bezogene Rate-Limits + Audit-Trail
- Mehrere Frontends moeglich: Custom Connector in claude.ai, ChatGPT-Custom-GPT, Claude Desktop, n8n etc.
Diese Architektur ist verwandt zum bestehenden mcp-vf-hosted-Pattern (Scalekit + create_proxy), aber breiter und zentralisiert. Eigener Brainstorm faellig — diese ADR commit-tet sich nur darauf, AWS als Plattform zu waehlen, nicht auf die konkrete Multi-Tenant-Auth-Architektur.
Compliance
- Org-Trail = Audit-Trail Org-weit, kein Sub-Account-Admin kann ihn abschalten
- AVV mit AWS pro Kunde der Bedrock nutzt — beim Hosting-Konzept-Anhang dokumentieren
- DSGVO-Argument fuer Becker: „Becker BAS nutzt einen dedizierten AWS-Account 084400305827 in der Region Frankfurt, mit zentralem Audit-Trail im Mgmt-Account, Identity-Center-Login mit MFA, least-privilege Permission Sets pro Mitarbeiter.”
- CLOUD-Act-Argument bleibt: AWS = US-Anbieter. Fuer Industriekunden mit harter „kein US-Recht” kann/muss Self-Hosted (Hetzner) als Alternative angeboten werden — siehe llm-hosting-eu-optionen. Bisher hat Becker mit AWS-Bedrock-Frankfurt + AVV das Risiko akzeptiert.
Was wegfaellt
- Railway-Account bleibt aktiv solange Services dort laufen, wird mittelfristig gestoppt
- Cloudflare bleibt als TLS/WAF/Rate-Schicht vor AWS-Origins (kein Wechsel)
Naechste Schritte
- Bedrock-Invocation-Logging im Becker-Account aktivieren — DSGVO-Audit-Trail fuer LLM-Calls.
- Migrations-Plan
mcp-vf-hostedRailway → AWS ausarbeiten — Ziel-Accountav-production, Architektur (App Runner vs Fargate), IaC-Tooling, Switch-over-Plan. - MCP-as-a-Service-Brainstorm separat — Multi-Tenant-Auth, Pricing, Discovery.
- AVV mit AWS fuer Becker-Nutzung dokumentieren / abschliessen.
- GuardDuty + Cost-Alerting aktivieren — pro Account oder Org-weit.
Sub-Accounts on-demand statt prophylaktisch. Naming-Konvention av-<kunde> ist dokumentiert (naming-konvention) — wir legen einen Sub-Account an wenn der konkrete Workload kommt, nicht prophylaktisch. Plus-Alias verbrennt sonst dauerhaft ohne Use-Case. Aktuell zurueckgestellt:
av-vibe-factory—mcp-vf-hosted-Migration landet inav-production(der MCP gehoert AV, nicht VF). Anlegen wenn VF-eigene Workloads dazukommenav-icking— Icking betreibt eigenen Account063507503859(AI-Pipeline Smart Dach Next, ausserhalb unserer Org). Cross-Org-Konsolidierung in unser Identity Center geht nicht direkt — siehe cross-org-zugriff-icking. Anlegen wenn HeyJulia-Vertrag rein kommt und Hosting bei uns landet
Related
- _index — operatives Inventar
- llm-hosting-eu-optionen — Bedrock vs Mistral vs Self-Hosted
- zugriffsmodell — Kunden-Trennungs-Doktrin (war schon vor AWS-Multi-Account formuliert, ist konsistent)
- mcp-vf-hosted — der erste Migrations-Kandidat
- stack — Tool-Inventar (Railway als „wird abgeloest” markiert)