Session-Prompt: Dashboard absichern + deployen

Kopiere alles ab hier in eine neue Session (im Verzeichnis ~/source/agentic-ventures/):


Aufgabe

dashboard.agenticventures.de absichern und live schalten. Das Dashboard (~/source/av-cockpit/, Next.js 16) ist fertig gebaut aber noch nie deployed. Die Infrastruktur (S3-Bucket + CloudFront) existiert bereits in AWS, ist aber leer und ungeschuetzt.

Nutze den Cloudflare MCP fuer alle DNS- und Access-Operationen. Der MCP ist konfiguriert (~/.claude.jsoncloudflare, OAuth via mcp-remote).

Was bereits erledigt ist

  1. ACM-Zertifikat beantragt (us-east-1, fuer CloudFront):

    • ARN: arn:aws:acm:us-east-1:425924867359:certificate/ae71828c-d9d9-4822-b0be-aadc0a882b02
    • Status: PENDING_VALIDATION
    • Validation-CNAME muss noch in Cloudflare gesetzt werden (siehe Step 1)
  2. CloudFront Distribution existiert:

    • ID: E3KFMPWSKO68UU
    • Domain: d2g64knwpj5kdp.cloudfront.net
    • Origins: av-dashboard-frontend-425924867359.s3.eu-central-1.amazonaws.com + av-dashboard-data-425924867359.s3.eu-central-1.amazonaws.com
    • Noch KEIN Alternate Domain Name, noch KEIN ACM-Cert zugewiesen
  3. S3-Bucket av-dashboard-frontend-425924867359 existiert, ist aber leer (nie deployed)

  4. Kein Cognito — Auth laeuft komplett ueber Cloudflare Access (Zero Trust)

  5. Cloudflare Zone: agenticventures.de, Account bf395d62cc6a9117564c0712fa9e3ad2, Free Plan. Bestehende Tunnel-Records fuer inference, mcp-calcom, mcp-vf, mcp-whatsapp, pdf, slides, uptime, vf-chat.

Steps — in dieser Reihenfolge

Step 1: ACM-Validation-CNAME in Cloudflare setzen

Nutze den Cloudflare MCP um einen CNAME-Record anzulegen:

  • Type: CNAME
  • Name: _25f7a93a9b2e34138efb3c9012164041.dashboard
  • Target: _4dc4e1e01a75e918c7c821c9d5b1336d.jkddzztszm.acm-validations.aws.
  • Proxy: OFF (DNS only — ACM braucht den echten CNAME)
  • Comment: ACM cert validation for dashboard.agenticventures.de

Danach warten bis das Zertifikat validiert ist:

aws acm describe-certificate \
  --certificate-arn "arn:aws:acm:us-east-1:425924867359:certificate/ae71828c-d9d9-4822-b0be-aadc0a882b02" \
  --region us-east-1 --profile av-production \
  --query "Certificate.Status" --output text

Sollte nach 1-5 Minuten von PENDING_VALIDATION auf ISSUED wechseln.

Step 2: CloudFront mit Custom Domain + ACM-Cert updaten

# Aktuelle Config holen
aws cloudfront get-distribution-config --id E3KFMPWSKO68UU --profile av-production > /tmp/cf-config.json
 
# ETag merken (noetig fuer Update)
ETAG=$(python3 -c "import json; print(json.load(open('/tmp/cf-config.json'))['ETag'])")
 
# Config editieren: Aliases + ViewerCertificate anpassen
# Dann via update-distribution zurueckschreiben

Aenderungen in der DistributionConfig:

  • Aliases.Quantity1, Aliases.Items["dashboard.agenticventures.de"]
  • ViewerCertificate{ "ACMCertificateArn": "arn:aws:acm:us-east-1:425924867359:certificate/ae71828c-d9d9-4822-b0be-aadc0a882b02", "SSLSupportMethod": "sni-only", "MinimumProtocolVersion": "TLSv1.2_2021", "CloudFrontDefaultCertificate": false }

Step 3: DNS-CNAME fuer Dashboard in Cloudflare setzen

Nutze den Cloudflare MCP:

  • Type: CNAME
  • Name: dashboard
  • Target: d2g64knwpj5kdp.cloudfront.net
  • Proxy: ON (orange cloud — damit Cloudflare Access greifen kann)
  • Comment: AV Operations Dashboard — CloudFront origin

Step 4: Cloudflare Access Application anlegen

Nutze den Cloudflare MCP (oder Zero Trust Dashboard unter https://one.dash.cloudflare.com/):

  1. Access Application erstellen:

    • Name: AV Dashboard
    • Domain: dashboard.agenticventures.de
    • Type: Self-hosted
    • Session Duration: 24h (oder 7 Tage — Marvin ist einziger User)
  2. Access Policy erstellen:

    • Name: Marvin Only
    • Action: Allow
    • Include Rule: Email = hello@marvinkuehlmann.com
    • Identity Provider: Google (One-time PIN als Fallback)

Das bedeutet: jeder Zugriff auf dashboard.agenticventures.de wird von Cloudflare abgefangen. Nur nach Google-Login mit hello@marvinkuehlmann.com kommt man durch. Kein Cognito noetig.

Step 5: av-cockpit bauen und deployen

cd ~/source/av-cockpit
npm install
npm run deploy

Das Script (scripts/deploy.sh) macht:

  1. NEXT_STATIC=1 next build → Static Export nach out/
  2. aws s3 sync out/ s3://av-dashboard-frontend-425924867359/ --delete --profile av-production
  3. CloudFront-Invalidierung

Step 6: Smoke-Test

  1. Browser: https://dashboard.agenticventures.de
  2. Erwartung: Cloudflare Access Login-Screen (Google)
  3. Nach Login: Dashboard /heute mit Vault-Daten
  4. Pruefen: keine Console-Errors, keine Mixed-Content-Warnings, alle Pages erreichbar

Step 7: Vault-Doku aktualisieren

  • intern/projekte/projekt-dashboard/_index.md → status von planning auf active, next_step aktualisieren
  • intern/firma/web-properties.mddashboard.agenticventures.de eintragen mit Cloudflare-Access-Vermerk

Wichtige Constraints

  • Cloudflare Proxy MUSS an sein (orange cloud) fuer den dashboard-CNAME, sonst greift Access nicht
  • ACM-Validation-CNAME muss DNS-only sein (grey cloud), sonst validiert AWS nicht
  • AWS-Profil: av-production fuer alle AWS-Befehle
  • Keine sensiblen Daten im S3-Bucket-Content — aber trotzdem absichern weil interne Projekt-/Finanz-Daten sichtbar sind
  • CloudFront SSL: TLSv1.2_2021 als Minimum, sni-only

Falls Probleme

  • ACM validiert nicht: CNAME pruefen (dig _25f7a93a9b2e34138efb3c9012164041.dashboard.agenticventures.de CNAME). Cloudflare-Proxy darf NICHT an sein fuer diesen Record.
  • CloudFront 403 nach Deploy: Default Root Object muss index.html sein (ist es bereits). S3 Bucket Policy muss CloudFront OAC erlauben.
  • Cloudflare Access zeigt nicht: Sicherstellen dass der dashboard-CNAME proxied ist (orange cloud). Ohne Proxy kein Access.
  • 502 Bad Gateway: CloudFront-Origin-Config pruefen. SSL-Protokoll zwischen CF-Proxy und CloudFront kann kollidieren — ggf. Cloudflare SSL-Mode auf “Full (strict)” setzen.