S3 Buckets — Inventar + Konvention

Stand 2026-05-12. Bevor ein neuer Bucket angelegt wird: erst diese Datei lesen, dann erweitern. Nicht ohne Eintrag hier.

Inventar

Live-verifiziert 2026-05-12 via aws s3 ls. Vor groesseren Entscheidungen erneut gegenchecken — siehe Live-Check-Befehl unten.

BucketAccountRegionZweckVerzeichnis-KonventionEncryptionRetention
av-cloudtrail-logs-343241684374mgmteu-central-1Org-Trail-Logs aller Accounts (CloudTrail)auto durch CloudTrailaws:s3per CloudTrail-Lifecycle
agentic-os-memorymgmteu-central-1Memory-Bucket fuer Plugins/Skills (Zweck offen — siehe „Offene Punkte”)TBDTBDTBD
marvinkuehlmann.commgmteu-central-1Static Website-Hosting marvinkuehlmann.comn/a (Website-Root)aws:s3keine
videos.marvinkuehlmann.commgmteu-central-1Video-Hostingn/a (Website-Root)aws:s3keine
heygustavo-de-redirectmgmteu-central-1Domain-Redirect heygustavo.den/a (Redirect-Config)aws:s3keine
av-business-eu-central-1av-productioneu-central-1AV-Geschaeftsvault — Vertraege, Firmen-Stammdokumente, AWS-Compliance-Nachweisefirma/<bereich>/, customers/<slug>/<projekt>/aws:kms (alias/av-business)Versioning, Object-Lock, Glacier nach 30d, Expire 2555d (7y HGB)
av-finanzen-eu-central-1av-productioneu-central-1UG-Belege/Rechnungen (absetzbar), GoBD-Aufbewahrung<jahr>/<monat>/<sender-slug>-<datum>-<betrag>.pdfaws:kms (alias/av-finanzen, KeyId 64fafaf9-5959-4029-80a2-d0d9bc8a4935)Versioning, Object-Lock Governance Default 2555d, Lifecycle (Glacier 30d Noncurrent, Expire 2555d, Multipart 7d)
cdk-hnb659fds-assets-425924867359-eu-central-1av-productioneu-central-1CDK Bootstrap (auto-managed)n/a (CDK-internal)aws:s3per CDK-Default
mk-finanzen-eu-central-1mk-privateu-central-1Privat-Belege Marvin (nicht absetzbar) — steuerlich klar getrennt von UG-Spaere<jahr>/<monat>/<sender-slug>-<datum>-<betrag>.pdfaws:kms (alias/mk-finanzen, KeyId 5c6b3389-fc83-45dd-b2eb-98d41b436a29)identisch zu av-finanzen
bas-twin-data-eu-central-1av-beckereu-central-1BAS-Twin Produktiv-DatenDetail in av-beckeraws:kmsper Bucket-Lifecycle
bas-twin-data-test-eu-central-1av-beckereu-central-1BAS-Twin Test-DatenDetail in av-beckeraws:kmsper Bucket-Lifecycle
bas-twin-artifacts-eu-central-1av-beckereu-central-1BAS-Twin Build-ArtifactsDetail in av-beckeraws:kmsper Bucket-Lifecycle
becker-bedrock-logs-eu-central-1av-beckereu-central-1Bedrock-Invocation-Logging (Hardening-Task aus av-becker)auto durch Bedrock-LoggingTBDTBD

Anzahl: 13 Buckets in 4 Accounts. Stand 2026-05-12 nach Becker-Migration + Wildwuchs-Cleanup + Finanzen-Buckets-Anlage.

Live-Check-Befehl:

for p in default av-production av-becker mk-privat; do
  echo "=== $p ==="; aws --profile $p s3 ls
done

SSO-Profile (mgmt, av-prod, becker, mk-priv) brauchen aws sso login --profile mgmt einmal pro 8h. AssumeRole-Profile (default, av-production, av-becker, mk-privat) funktionieren ohne SSO-Login.

Wo lege ich was ab — Entscheidungsbaum

  1. Belege/Rechnungen UG (absetzbar)av-finanzen-eu-central-1 unter <jahr>/<monat>/<sender-slug>-<datum>-<betrag>.pdf → Object-Lock Governance Default 2555d (7y) ist Bucket-Default — nicht pro Objekt setzen noetig → siehe workflow-beleg-eingang

1a. Belege/Rechnungen Privat (nicht absetzbar)mk-finanzen-eu-central-1 unter <jahr>/<monat>/<sender-slug>-<datum>-<betrag>.pdf → Steuerlich saubere Trennung von UG-Spaere — Account-Grenze ist die UG-Grenze → Email-Agent klassifiziert business/privat beim Pull (Haiku, 3 Signale: Gmail-Account + PDF-Empfaenger + Sender-Domain)

  1. Vertraege mit Kunden, NDAs, Auftragsbestaetigungenav-business-eu-central-1 unter customers/<slug>/vertraege/ → Object-Lock pro Objekt setzen (WORM, GoBD-konform)

  2. Firmen-Stammdokumente (UG-Gruendung, Gesellschaftervertrag, Handelsregister) → av-business-eu-central-1 unter firma/recht/

  3. AWS-Compliance-Nachweise (AVV, ISO-Cert-Downloads, Penetration-Reports) → av-business-eu-central-1 unter firma/compliance/

  4. Kunden-Produktiv-Daten (Datensaetze, Embeddings, Modell-Inputs/Outputs) → eigener Bucket im Kunden-Sub-Account (av-<kunde>) → Naming siehe Konvention unten

  5. Eigene Web-Properties (agenticventures.de, heyjulia.de, etc.) → eigener Bucket im Mgmt-Account pro Domain → Naming: <domain> (z.B. agenticventures.de)

  6. MCP-as-a-Service Hosting-Datenav-production — eigener Bucket pro MCP wenn persistente Daten → Naming: av-mcp-<name>-<region> (z.B. av-mcp-vault-eu-central-1)

  7. CloudTrail-Logs → bleiben im Mgmt-Trail-Bucket (av-cloudtrail-logs-343241684374), nicht doppeln

  8. CDK Bootstrap-Buckets → pro Account einer, auto-managed durch cdk bootstrap. Nicht anfassen.

Naming-Konvention

PatternBeispielWann
av-<funktion>[-<region>]av-business-eu-central-1UG-eigene Funktions-Buckets in av-production oder mgmt
av-mcp-<name>-<region>av-mcp-vault-eu-central-1MCP-Hosting-Daten
av-<kunde>-<funktion>av-becker-twin-dataEmpfohlen fuer Kunden-Sub-Account-Buckets ab jetzt
<kunde>-<funktion> (Legacy)bas-twin-dataAlt-Bestand — nicht mehr fuer neue Kunden anwenden
<domain>marvinkuehlmann.com, videos.marvinkuehlmann.comStatic Website-Hosting (S3 erzwingt Bucket-Name = Domain)
av-cloudtrail-logs-<account-id>av-cloudtrail-logs-343241684374CloudTrail-Org-Bucket im Mgmt
cdk-hnb659fds-assets-<account-id>-<region>(auto)CDK Bootstrap, nicht selber benennen

Konsequenz fuer av-becker: Die bas-twin-* Buckets bleiben wie sie sind (Legacy), neue Buckets in av-becker ab jetzt mit av-becker--Prefix.

Anti-Wildwuchs-Regel

Bevor ein neuer Bucket angelegt wird:

  1. Existierenden Bucket pruefen. Reicht ein Prefix in av-business? Reicht ein Sub-Account-Bucket den es schon gibt? Wenn ja: nutzen, keinen neuen.
  2. Begruendung schreiben. Wenn neuer Bucket noetig: in dieser Datei den Eintrag VORHER anlegen mit Zweck + Verzeichnis-Konvention. Erst dann anlegen.
  3. Account-Trennung pruefen. Liegt der Bucket im richtigen Account? (UG-eigen → av-production, Kunde → av-<kunde>, privat → mk-privat, Mgmt-only fuer Logs+Domains)
  4. Encryption + Lifecycle festlegen. Default: KMS-CMK des Accounts (oder eigene wenn Trennung noetig), Versioning, Lifecycle. Nie ohne.
  5. Public-Access geblockt. Immer. Static-Website-Hosting via CloudFront-OAC, nicht via Bucket-Policy.
  6. Eintrag hier ergaenzen. Inventar-Tabelle UND Entscheidungsbaum-Punkt wenn neuer Zweck.

Verlauf

  • 2026-05-12 Becker-Angebote von Mgmt-Bucket agentic-ventures-bas-twin (Wildwuchs) nach av-business/customers/becker/vertraege/ migriert (server-side via temp Bucket-Policy), Source-Bucket geloescht.
  • 2026-05-12 Buckets av-finanzen-eu-central-1 (av-production) und mk-finanzen-eu-central-1 (mk-privat) angelegt. KMS-Aliase alias/av-finanzen + alias/mk-finanzen mit Auto-Rotation. Object-Lock Governance Default 2555d (7y, GoBD), Versioning, Public-Access geblockt, Lifecycle (Glacier 30d, Expire 2555d, Multipart 7d).

Offene Punkte

Drift offen

  • ⚠️ becker-bedrock-logs-eu-central-1 — neu in av-becker, aber in av-becker-Doku nicht erfasst. Vermutlich Bedrock-Invocation-Logging-Hardening. Action: Eintrag in av-becker.md ergaenzen, Lifecycle + Encryption verifizieren.

Strategisch

  • agentic-os-memory — Zweck im Vault unklar. Pruefen ob aktiv genutzt; wenn nicht, loeschen. Wenn ja, in welchem Skill/Plugin referenziert und welche Verzeichnis-Konvention.
  • Beleg-Pipeline: Email-Agent muss erweitert werden (Klassifikation business/privat, PDF-Pull, S3-Upload in den passenden Bucket, Papierkram-Tool-Call, Vault-Stub). Tracking in _index Phase 1.5.
  • Object-Lock-Mode-Upgrade: Heute Governance (Admin-Override moeglich). Nach 1 Monat stabilem Betrieb auf Compliance umstellen — heisst auch der Admin kann 7 Jahre nichts loeschen. Reminder fuer ~2026-06-12.
  • Backfill historischer Belege: ~486 Belege im Gmail-Label Belege, davon 143 Claude-API-Receipts auf privat@ die vermutlich UG-relevant sind. Einmaliger Sortier-Lauf vor Pipeline-Live, sonst kommt nur Neukram in S3.