Zum Inhalt

Cloudflare Access

Cloudflare Access ist ein Zero-Trust-Authentifizierungsdienst, der die easySale-Dokumentation vor unberechtigtem Zugriff schützt.

Übersicht

Was ist Cloudflare Access?

Cloudflare Access fungiert als Login-Gateway vor der Dokumentation. Benutzer müssen sich authentifizieren, bevor sie Zugriff erhalten.

Funktionsweise:

1. Benutzer öffnet docs.easysale.de
2. Cloudflare Access Login-Bildschirm erscheint
3. Benutzer gibt E-Mail-Adresse ein
4. One-Time-PIN (OTP) wird per E-Mail gesendet
5. Nach Code-Eingabe: Session aktiv (24h)
6. Zugriff auf Dokumentation gewährt ✅

Vorteile:

  • ✅ Kein eigenes Login-System erforderlich
  • ✅ Keine Passwörter - nur E-Mail + OTP
  • ✅ Granulare Zugriffskontrolle
  • ✅ Audit-Logs für Compliance
  • ✅ Kostenlos bis 50 Benutzer/Monat

Ersteinrichtung

Voraussetzungen

  • Cloudflare Account mit aktiviertem Zero Trust
  • Cloudflare Pages Projekt ist erstellt
  • Custom Domain ist konfiguriert

Schritt 1: Zero Trust aktivieren

  1. Öffnen Sie one.dash.cloudflare.com
  2. Falls noch nicht aktiviert: "Get started" klicken
  3. Free Plan auswählen
  4. Team-Domain wählen (z.B. tech-schuppen.cloudflareaccess.com)
  5. Diese Domain wird für den Login verwendet
  6. Ist nicht öffentlich sichtbar

Schritt 2: Access Application erstellen

  1. Zero Trust Dashboard → AccessApplications
  2. "Add an application" klicken
  3. "Self-hosted" auswählen

Schritt 3: Application konfigurieren

Basic Configuration:

Feld Wert
Application name easySale Documentation
Session duration 24 hours
Application domain docs.easysale.de

Optional: - Application logo: Upload eines Logos (wird beim Login angezeigt) - App Launcher visibility: Visible (zeigt App im User-Portal)

Schritt 4: Access Policy erstellen

Policy Name: Tech-Schuppen Team & Authorized Clients

Action: ✅ Allow

Configure rules:

Rule 1 - Tech-Schuppen Team

Rule type:  Emails ending in
Value:      @tech-schuppen.de

Rule 2 - Spezifische Kunden (optional)

Rule type:  Emails
Value:      kunde@beispiel.de, partner@firma.at

Rule Connection: OR (Standard)
→ Jede Regel erlaubt separat Zugang

Schritt 5: Speichern & Aktivieren

  1. "Save application" klicken
  2. Access ist sofort aktiv ✅

Zugriff testen

Test-Prozedur

  1. Öffnen Sie https://docs.easysale.de in einem Inkognito-Fenster
  2. Sie werden zur Cloudflare Access Login-Seite weitergeleitet
  3. Geben Sie eine erlaubte E-Mail-Adresse ein
  4. Prüfen Sie Ihr E-Mail-Postfach für den OTP-Code
  5. Nach Code-Eingabe: Zugriff auf die Dokumentation ✅

Erwartetes Verhalten

Erlaubte E-Mail (@tech-schuppen.de): - ✅ OTP-Code wird gesendet - ✅ Zugriff wird gewährt - ✅ Session bleibt 24 Stunden aktiv

Nicht erlaubte E-Mail: - ❌ Kein OTP-Code wird gesendet - ❌ Zugriff wird verweigert - ❌ Fehlermeldung: "Access Denied"


Benutzer verwalten

Neuen Benutzer hinzufügen

Option 1: Domain-basiert (empfohlen für Team)

Bereits konfiguriert: @tech-schuppen.de
→ Alle E-Mails mit dieser Domain haben automatisch Zugang

Option 2: Spezifische E-Mail-Adresse

  1. Access → Applications → easySale DocumentationEdit
  2. Policies → Policy bearbeiten
  3. Add include → Rule type: Emails
  4. E-Mail-Adresse eingeben (z.B. kunde@beispiel.de)
  5. Save policy

Benutzer entfernen

  1. Access → Applications → easySale DocumentationEdit
  2. Policies → Policy bearbeiten
  3. E-Mail-Adresse aus der Liste entfernen
  4. Save policy

Session-Timeout

Bereits angemeldete Benutzer bleiben bis zum Session-Ende (24h) eingeloggt. Um sofortigen Entzug zu erzwingen, muss die Session manuell beendet werden.

Aktive Sessions anzeigen

  1. Zero Trust Dashboard → LogsAccess
  2. Hier sehen Sie:
  3. Wer hat sich eingeloggt
  4. Wann erfolgte der Zugriff
  5. Von welcher IP-Adresse

Access Policies anpassen

Session-Dauer ändern

  1. Access → Applications → easySale DocumentationEdit
  2. Session duration anpassen (z.B. 8 hours, 7 days)
  3. Save application

Empfohlene Werte:

Interne Team-Docs:    7 days
Kunden-Docs:          24 hours
Hochsensible Docs:    1 hour

Erweiterte Access Rules

IP-basierte Einschränkung

Rule type:  IP ranges
Value:      203.0.113.0/24
→ Nur von bestimmten IP-Bereichen erlaubt

Country-basierte Einschränkung

Rule type:  Country
Value:      AT, DE, CH
→ Nur aus DACH-Region erlaubt

Mehrere Bedingungen kombinieren

Include:  @tech-schuppen.de  AND  Country: AT
→ Nur Team-Mitglieder aus Österreich


Troubleshooting

Problem: OTP-E-Mail kommt nicht an

Mögliche Ursachen:

  1. Spam-Ordner prüfen
  2. E-Mail von no-reply@cloudflareaccess.com suchen

  3. E-Mail-Adresse nicht in Policy

  4. Verifizieren Sie, dass die Domain/E-Mail erlaubt ist
  5. Access → Applications → Policy überprüfen

  6. E-Mail-Server blockiert Cloudflare

  7. Whitelist hinzufügen: cloudflareaccess.com

Problem: "Access Denied" trotz korrekter E-Mail

Lösungen:

  1. Policy überprüfen

    Access  Applications  easySale Documentation  Policies
     Verifizieren Sie Rule-Konfiguration
    

  2. Tippfehler in E-Mail-Adresse

  3. Exakte Schreibweise prüfen (Groß-/Kleinschreibung egal)

  4. Cache leeren

  5. Inkognito-Fenster verwenden
  6. Browser-Cache löschen

Problem: Session läuft zu früh ab

Ursache:
Browser-Cookies werden gelöscht oder "Do Not Track" ist aktiviert.

Lösung: 1. Cloudflare Access Domain in Cookie-Whitelist aufnehmen 2. Browser-Einstellungen: Cookies für cloudflareaccess.com erlauben

Problem: Zu viele Login-Versuche

Fehlermeldung:
Rate limit exceeded

Lösung: - Warten Sie 15 Minuten - Cloudflare blockiert temporär bei zu vielen Anfragen - Kontaktieren Sie Support für höhere Limits


Client-spezifische Dokumentation

Automatisiertes Setup für neue Kunden

Für neue Client-Projekte kann die komplette Cloudflare-Konfiguration automatisiert werden:

Setup-Skript

cd onboarding/client_onboarding/steps/setup

CLIENT_DIR=/path/to/easysale-client-foo \
CLIENT_NAME="Foo GmbH" \
CLIENT_EMAILS="kunde@foo.de,support@foo.de" \
CLOUDFLARE_API_TOKEN="xxx" \
CLOUDFLARE_ACCOUNT_ID="yyy" \
./06_setup_cloudflare_access.sh

Was das Skript automatisch erledigt

  1. Cloudflare Pages Projekt
  2. Projektname: easysale-{slug}-docs
  3. Standard-Domain: easysale-{slug}-docs.pages.dev
  4. Custom-Domain: {slug}-docs.easysale.de

  5. Custom Domain Konfiguration

  6. Fügt Custom Domain automatisch zum Pages-Projekt hinzu
  7. Gibt CNAME-Eintrag für Strato aus (muss manuell gesetzt werden)

  8. Cloudflare Access Application

  9. Application Name: {Client Name} Documentation
  10. Domain Protection: Aktiviert auf Custom Domain
  11. Session Duration: 24 Stunden

  12. Access Policies

  13. ✅ @tech-schuppen.de (automatisch)
  14. ✅ Alle in CLIENT_EMAILS angegebenen Adressen

  15. GitHub Variables

  16. CLOUDFLARE_PAGES_PROJECT → für Deployment-Workflow

Credentials bereitstellen

Option 1: Umgebungsvariablen

export CLOUDFLARE_API_TOKEN="cfat_..."
export CLOUDFLARE_ACCOUNT_ID="abc123..."

Option 2: GitHub Org Secrets (bevorzugt)
Wenn CLOUDFLARE_API_TOKEN und CLOUDFLARE_ACCOUNT_ID als Org Secrets gesetzt sind, werden sie automatisch geladen.

Beispiel: Kunde "Gemüsebau Steiner"

CLIENT_DIR=../easysale-client-gemuesebau-steiner \
CLIENT_NAME="Gemüsebau Steiner" \
CLIENT_EMAILS="info@gemuesebau-steiner.at,buchhaltung@gemuesebau-steiner.at" \
./06_setup_cloudflare_access.sh

Ergebnis: - Pages-Projekt: easysale-gemuesebau-steiner-docs - Fallback-Domain: easysale-gemuesebau-steiner-docs.pages.dev - Custom-Domain: gemuesebau-steiner-docs.easysale.de ✨ - Zugriff für: - @tech-schuppen.de - info@gemuesebau-steiner.at - buchhaltung@gemuesebau-steiner.at

DNS bei Strato setzen:

Domain:  easysale.de
Typ:     CNAME
Name:    gemuesebau-steiner-docs
Wert:    easysale-gemuesebau-steiner-docs.pages.dev
TTL:     3600

Nach dem Setup

  1. DNS-Eintrag bei Strato setzen:

    Domain:  easysale.de
    Typ:     CNAME
    Name:    gemuesebau-steiner-docs
    Wert:    easysale-gemuesebau-steiner-docs.pages.dev
    

  2. DNS-Propagation abwarten (~5-15 Minuten)

  3. Deployment auslösen:

    gh workflow run deploy-docs.yml \
      --repo Tech-Schuppen/easysale-client-gemuesebau-steiner
    

  4. Access testen:

    # Inkognito-Fenster öffnen
    open -na "Google Chrome" --args --incognito \
      https://gemuesebau-steiner-docs.easysale.de
    

Zusammenfassung

Project name:     easysale-gemuesebau-steiner-docs
Fallback-Domain:  easysale-gemuesebau-steiner-docs.pages.dev
Custom-Domain:    gemuesebau-steiner-docs.easysale.de
Access Policy:
  - @tech-schuppen.de
  - info@gemuesebau-steiner.at
  - buchhaltung@gemuesebau-steiner.at

DNS bei Strato:

CNAME  gemuesebau-steiner-docs  →  easysale-gemuesebau-steiner-docs.pages.dev


Manuelles Setup für Client-Projekte

Falls Sie die Konfiguration manuell vornehmen müssen:

Beispiel: Gemüsebau Steiner

Project name:     easysale-gemuesebau-steiner-docs
Domain:           easysale-gemuesebau-steiner-docs.pages.dev
Access Policy:
  - @tech-schuppen.de
  - info@gemuesebau-steiner.at
  - buchhaltung@gemuesebau-steiner.at

Vorteile: - Jeder Client sieht nur seine eigene Dokumentation - Unterschiedliche Zugriffsrechte pro Client - Individuelle Session-Dauern konfigurierbar


Audit & Compliance

Zugriffsprotokolle

Abruf: 1. Zero Trust Dashboard → LogsAccess 2. Filter nach Application: easySale Documentation

Verfügbare Informationen: - Benutzer-E-Mail - Zeitstempel - IP-Adresse - User-Agent (Browser) - Land - Erfolg/Fehlschlag

Aufbewahrung: - Free Plan: 24 Stunden - Paid Plans: 30+ Tage

DSGVO-Konformität

Datenverarbeitung: - E-Mail-Adressen werden zur Authentifizierung gespeichert - IP-Adressen für Security-Logs (24h) - Cloudflare ist GDPR-konform zertifiziert

Datenschutzerklärung:

Zum Schutz unserer Dokumentation verwenden wir Cloudflare Access.
Dabei werden E-Mail-Adressen zur Authentifizierung und IP-Adressen
für Sicherheitsprotokolle vorübergehend verarbeitet.

Weitere Informationen: https://www.cloudflare.com/privacypolicy/


Kosten

Free Plan

✅ Bis zu 50 Benutzer/Monat
✅ Unbegrenzte Applications
✅ E-Mail OTP Authentication
✅ 24h Log-Retention

Ausreichend für: - Interne Team-Dokumentation - Kleine bis mittlere Kundenbasis - Standard-Sicherheitsanforderungen

Ab $7/Monat pro User (Enterprise Features): - Mehr als 50 Benutzer - Extended Log-Retention (30+ Tage) - SAML/OIDC Integration - Multi-Factor Authentication (Hardware-Keys) - SLA & Support


Best Practices

Security

  1. Regelmäßige Policy-Reviews
  2. Vierteljährlich Benutzer-Liste prüfen
  3. Ausgeschiedene Mitarbeiter entfernen

  4. Session-Dauer angemessen wählen

  5. Nicht länger als notwendig
  6. Sensible Docs: max. 8 hours

  7. IP-Whitelisting für Admin-Zugriff

  8. Cloudflare Dashboard nur von Firmen-IP
  9. Zero Trust → Settings → Authentication

Monitoring

  1. E-Mail-Alerts einrichten

    Zero Trust → Logs → Configure Alerts
    → Alert bei mehr als 10 fehlgeschlagenen Logins/Stunde
    

  2. Wöchentliche Log-Reviews

  3. Ungewöhnliche Zugriffsmuster erkennen
  4. Geografisch unerwartete Zugriffe prüfen

Onboarding neuer Benutzer

Prozess:

  1. Benutzer zu Access Policy hinzufügen
  2. E-Mail an Benutzer senden:
    Betreff: Zugang zur easySale Dokumentation
    
    Hallo,
    
    Sie haben nun Zugriff auf unsere technische Dokumentation:
    https://docs.easysale.de
    
    Beim ersten Besuch erhalten Sie per E-Mail einen Login-Code.
    Die Session bleibt 24 Stunden aktiv.
    
    Bei Fragen: support@tech-schuppen.de
    
  3. Bei Problemen: Logs überprüfen