Secret-Konsolidierung
Aktuell sind Secrets/Tokens verstreut über AWS Secrets Manager (25 Secrets), 1Password (≥2 API-Items), eine Reihe von .env.local-Files (12 Stück) und mindestens eine Plaintext-Konfig (~/.claude.json). Es gibt keine zentrale Übersicht, keine Rotation-Disziplin und mindestens einen Klartext-Leak.
Dieses Projekt baut den Überblick auf, migriert was migriert werden sollte, und legt Rotation-Disziplin fest.
Akut-Findings (Stand 2026-05-17)
| Sev | Befund | Ort | Action |
|---|---|---|---|
| ROT | GitHub PAT (gho_…) Plaintext in claude.json | ~/.claude.json → mcpServers.github.env.GITHUB_PERSONAL_ACCESS_TOKEN | (1) Token rotieren auf github.com/settings/tokens. (2) Neuen Token in 1Password Item „GitHub PAT (Claude Code)” + AWS SM agent-platform/github-pat (gibt’s schon!) synchronisieren. (3) claude.json auf op run -- Wrapper umstellen. |
| GELB | Dupliziertes TICKETPAY_API_KEY an 3 Stellen (vf-hosted local-dev .env, mcp-ticketpay .env.local, AWS SM mcp-vf-hosted/upstream-tokens) | siehe Inventar | Konsolidieren auf AWS SM, lokale MCPs holen via Wrapper |
| GELB | Dupliziertes PAPIERKRAM_TOKEN an 3 Stellen | analog | analog |
| GELB | Dupliziertes M365_CLIENT_SECRET an 3 Stellen | analog | analog |
| GELB | AWS SM Secret tmp/owui-admin-key ohne Description, scheint Wegwerf | AWS SM | Prüfen + ggf. löschen |
| GELB | AWS SM Secret stirling-pdf-vf/cloudflared-token — Stirling läuft jetzt cert-basiert, Token-Secret wahrscheinlich unused | AWS SM | Prüfen + ggf. löschen |
| GRÜN | Service-Tokens für hosted MCPs sind sauber in AWS SM | — | beibehalten |
| GRÜN | Hetzner-Token sauber via op run aus 1P | claude.json → hetzner | beibehalten als Referenz-Pattern |
Ziel-Architektur
2-Tier-Modell + Workload-Identity-First.
Workload-Identity (Tier 0, präferiert)
↓ wenn nicht möglich
AWS Secrets Manager (Tier 1) ←— alle Service-Secrets
↓
op://-Pointer in 1Password (Tier 1.5) ←— Recovery-Index
↓
1Password Direct (Tier 2) ←— nur lokale CLI mit Touch-ID-UX-Bedarf
Regeln:
- Wenn ein Cloud-Workload-Container (Fargate/Lambda/ECS) den Secret braucht → IAM-Role oder AWS SM (
secretsmanager:GetSecretValueauf den Service-ARN-Prefix scoped) - Wenn ein lokaler Prozess auf Marvin’s Mac den Secret braucht →
op run --Wrapper, Token-Quelle ist 1Password - Wenn beides → AWS SM ist Source-of-Truth, lokaler Zugriff via
aws secretsmanager get-secret-valuemitav-production-Profil. 1Password hält Read-Only-Pointerop://Personal/aws-sm-<service>/notemit dem AWS-SM-Pfad als Recovery-Layer - Nie Plaintext in claude.json, settings.json,
.envohne.env.local-Naming + Gitignore-Schutz - Rotation: jedes Secret bekommt im Inventar ein
last_rotated+next_rotation-Feld
Sub-Files
- inventar — vollständiges Inventar aller Secrets, gruppiert nach Quelle, mit Migrations-Tier-Empfehlung pro Item
- plan — Migrations-Plan in Phasen
- rotation-kalender — Rotation-Schedule pro Secret
- 1p-aws-sync — Phase 7 (neu, 2026-05-19) — 1P-Environments-Auto-Sync nach AWS-SM, kein Doppel-Pflegen mehr. Lead-Option fuer Multi-Tenant-Onboarding
Phasen-Status
| Phase | Inhalt | Status |
|---|---|---|
| 0 | Inventar erstellen + Akut-Findings | 🟢 done 2026-05-17 |
| 1 | ROT-Findings fixen (GitHub PAT rotieren + migrieren) | 🟡 pending |
| 2 | Duplikate konsolidieren (TicketPAY, Papierkram, M365 single-source-in-AWS-SM) | 🟡 pending |
| 3 | AWS-SM-Cleanup (tmp/*, stirling-pdf-vf prüfen) | 🟡 pending |
| 4 | 1Password-Pointer-Layer aufbauen (AWS-SM-Index in 1P) | 🟡 pending |
| 5 | Rotation-Kalender + Reminder-Setup | 🟡 pending |
| 6 | CLAUDE.md Rule 8 erweitern (konkrete Tier-Verweise) | 🟡 pending |
| 7 | MVP 1P→AWS-SM-Sync via av-key-sync.sh — Friseur live, IAM-Wildcard, CDK-Drift geschlossen | 🟢 MVP live 2026-05-19. Native-Integration als Phase 8 offen — Plan siehe 1p-aws-sync |
Out of Scope
- Migration bestehender Customer-MCP-Secrets (Scalekit-OAuth-Setup) — die sind schon sauber
- Vault-Wechsel von 1Password zu Bitwarden/Doppler/Infisical — bewusst nicht, 1P bleibt
- Rotation-Automation via Lambda — Phase 5 setzt Kalender-Reminder, Automation später wenn Volumen wächst
Next Action
Phase 1 starten — GitHub PAT rotieren (5 min), neuen Token in AWS SM agent-platform/github-pat ablegen, claude.json auf op run umstellen. Detail-Schritte siehe phase-1.