Files
vgui-cicd/Documentation/diagramm.md

12 KiB

Diagramme in VorgabenUI

Diese Anleitung beschreibt, wie Diagramme in Textabschnitten verwendet werden können. VorgabenUI nutzt Kroki zur Generierung von Diagrammen aus Textbeschreibungen.

Übersicht

Der Abschnitttyp "diagramm" ermöglicht es, verschiedene Diagrammtypen direkt in Vorgaben, Einleitungen und Geltungsbereichen einzubinden. Die Diagramme werden aus Textbeschreibungen automatisch als SVG-Grafiken generiert und gecacht.

Grundlegende Verwendung

Format

[Diagrammtyp]
option: [HTML-Attribute] (optional)
[Diagramm-Code]

Zeile 1: Diagrammtyp (z.B. plantuml, mermaid, graphviz) Zeile 2 (optional): option: gefolgt von HTML-Attributen für die Bildgrösse Zeile 3+: Der eigentliche Diagramm-Quellcode

Standard-Einstellungen

Wenn keine option:-Zeile angegeben wird, wird das Diagramm mit width="100%" dargestellt.

Grösse anpassen

Um die Grösse des Diagramms anzupassen, verwenden Sie die option:-Zeile:

plantuml
option: width="50%"
@startuml
...
@enduml

Weitere Beispiele für Optionen:

option: width="800px"
option: width="60%" style="max-width: 600px;"
option: height="400px"
option: width="100%" class="img-fluid"

Unterstützte Diagrammtypen

Kroki unterstützt über 20 verschiedene Diagrammtypen. Die wichtigsten sind:

Typ Beschreibung Verwendung
plantuml UML-Diagramme, Sequenzdiagramme, Aktivitätsdiagramme Prozesse, Architekturen
mermaid Flussdiagramme, Sequenzdiagramme, Gantt-Charts Prozessabläufe, Zeitpläne
graphviz Gerichtete/ungerichtete Graphen Abhängigkeiten, Netzwerke
blockdiag Block-Diagramme Systemübersichten
nwdiag Netzwerk-Diagramme Netzwerktopologien
seqdiag Sequenz-Diagramme Kommunikationsabläufe
c4plantuml C4-Modell Diagramme Software-Architektur
ditaa ASCII-Art zu Diagrammen Einfache Skizzen
excalidraw Hand-gezeichnete Diagramme Präsentationen
bpmn Business Process Model Notation Geschäftsprozesse

Vollständige Liste: https://kroki.io/

Beispiele

PlantUML: Sequenzdiagramm

plantuml
option: width="80%"
@startuml
Alice -> Bob: Authentifizierungsanfrage
Bob --> Alice: Authentifizierungsantwort

Alice -> Bob: Weitere Anfrage
Alice <-- Bob: Weitere Antwort
@enduml

Verwendung: Darstellung von Kommunikationsabläufen, API-Interaktionen

PlantUML: Aktivitätsdiagramm

plantuml
@startuml
start
:Sicherheitsrichtlinie prüfen;
if (Richtlinie erfüllt?) then (ja)
  :Zugriff gewähren;
else (nein)
  :Zugriff verweigern;
  :Incident loggen;
endif
stop
@enduml

Verwendung: Prozesse, Entscheidungsabläufe, Workflows

PlantUML: Komponentendiagramm

plantuml
option: width="70%"
@startuml
package "Web-Tier" {
  [Web-Server]
  [Load Balancer]
}

package "App-Tier" {
  [Application Server]
  [Cache]
}

package "Data-Tier" {
  [Datenbank]
}

[Load Balancer] --> [Web-Server]
[Web-Server] --> [Application Server]
[Application Server] --> [Cache]
[Application Server] --> [Datenbank]
@enduml

Verwendung: System-Architekturen, Komponenten-Übersicht

Mermaid: Flussdiagramm

mermaid
option: width="75%"
flowchart TD
    Start[Log-Event empfangen] --> Check{Schweregrad?}
    Check -->|CRITICAL| Alert[Alert auslösen]
    Check -->|WARNING| Log[In Log-System speichern]
    Check -->|INFO| Archive[Archivieren]
    Alert --> SIEM[An SIEM weiterleiten]
    Log --> SIEM
    SIEM --> End[Fertig]
    Archive --> End

Verwendung: Prozessabläufe, Entscheidungsbäume

Mermaid: Sequenzdiagramm

mermaid
sequenceDiagram
    participant Benutzer
    participant Firewall
    participant Server

    Benutzer->>Firewall: Verbindungsanfrage
    Firewall->>Firewall: Regel-Prüfung
    alt Regel erlaubt
        Firewall->>Server: Weiterleitung
        Server-->>Firewall: Antwort
        Firewall-->>Benutzer: Antwort
    else Regel blockiert
        Firewall-->>Benutzer: Verbindung abgelehnt
    end

Verwendung: Kommunikationsabläufe mit Bedingungen

GraphViz: Abhängigkeitsgraph

graphviz
digraph G {
    rankdir=LR;
    node [shape=box, style=rounded];

    "R0066\nLogging" -> "R0009\nServersysteme";
    "R0066\nLogging" -> "R0126\nNetzwerksicherheit";
    "R0009\nServersysteme" -> "R0135\nInformationssicherheit";
    "R0126\nNetzwerksicherheit" -> "R0135\nInformationssicherheit";

    "R0135\nInformationssicherheit" [style="rounded,filled", fillcolor=lightblue];
}

Verwendung: Abhängigkeiten zwischen Dokumenten/Standards

GraphViz: Netzwerk-Topologie

graphviz
option: width="100%"
graph G {
    layout=neato;

    Internet [shape=cloud];
    Firewall [shape=box, style=filled, fillcolor=red];
    DMZ [shape=box, style=filled, fillcolor=yellow];
    LAN [shape=box, style=filled, fillcolor=green];

    Internet -- Firewall [label="WAN"];
    Firewall -- DMZ [label="DMZ-Segment"];
    Firewall -- LAN [label="Internes Netz"];
}

Verwendung: Netzwerk-Segmentierung, Zonen-Modelle

BlockDiag: System-Übersicht

blockdiag
blockdiag {
    orientation = portrait;

    Client -> "Load Balancer" -> "Web-Server 1", "Web-Server 2";
    "Web-Server 1", "Web-Server 2" -> "App-Server";
    "App-Server" -> "Datenbank Primary";
    "Datenbank Primary" -> "Datenbank Replica";

    "Load Balancer" [color = "lightblue"];
    "App-Server" [color = "lightgreen"];
    "Datenbank Primary" [color = "pink"];
}

Verwendung: Einfache System-Diagramme, Datenflüsse

NwDiag: Netzwerk-Diagramm

nwdiag
nwdiag {
    network dmz {
        address = "192.168.1.0/24";

        web01 [address = "192.168.1.10"];
        web02 [address = "192.168.1.11"];
    }

    network internal {
        address = "10.0.0.0/8";

        web01 [address = "10.0.1.10"];
        web02 [address = "10.0.1.11"];
        app01 [address = "10.0.2.10"];
        db01 [address = "10.0.3.10"];
    }
}

Verwendung: Netzwerk-Topologien mit IP-Adressen

SeqDiag: Authentifizierungsablauf

seqdiag
seqdiag {
    Benutzer -> System: Benutzername + Passwort;
    System -> LDAP: Authentifizierung prüfen;
    LDAP --> System: Erfolgreich;
    System -> 2FA: 2FA-Code anfordern;
    2FA --> Benutzer: Code per SMS;
    Benutzer -> System: 2FA-Code eingeben;
    System --> Benutzer: Zugriff gewährt;
}

Verwendung: Authentifizierungs- und Autorisierungsabläufe

C4 PlantUML: System-Kontext

c4plantuml
@startuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml

Person(admin, "Administrator", "BIT System-Administrator")
System(vorgaben, "VorgabenUI", "IT-Sicherheits-Vorgaben Portal")
System_Ext(ldap, "LDAP", "Authentifizierung")

Rel(admin, vorgaben, "Verwaltet Vorgaben")
Rel(vorgaben, ldap, "Authentifiziert über")
@enduml

Verwendung: Software-Architektur nach C4-Modell

Best Practices

1. Diagramm-Grösse anpassen

Verwenden Sie die option:-Zeile, um die Grösse für bessere Lesbarkeit anzupassen:

plantuml
option: width="60%"
...

Für sehr detaillierte Diagramme:

plantuml
option: width="100%" style="max-width: 1200px;"
...

2. Einfachheit bevorzugen

Halten Sie Diagramme einfach und fokussiert. Zu komplexe Diagramme sind schwer zu lesen.

Gut:

mermaid
flowchart LR
    A[Start] --> B{Prüfung}
    B -->|OK| C[Weiter]
    B -->|Fehler| D[Abbruch]

Zu komplex: Vermeiden Sie Diagramme mit mehr als 15-20 Elementen.

3. Konsistente Stil-Wahl

Verwenden Sie für ähnliche Konzepte den gleichen Diagrammtyp:

  • Prozesse: Mermaid Flowchart oder PlantUML Activity
  • Kommunikation: Mermaid/PlantUML Sequence
  • Architektur: PlantUML Component oder C4
  • Netzwerke: NwDiag oder GraphViz

4. Beschriftungen auf Deutsch

Verwenden Sie deutsche Beschriftungen für bessere Verständlichkeit:

mermaid
flowchart TD
    Start[Anfrage empfangen] --> Prüfung{Berechtigung?}
    Prüfung -->|Ja| Zugriff[Zugriff gewähren]
    Prüfung -->|Nein| Ablehnung[Zugriff verweigern]

5. Farben sparsam einsetzen

Nutzen Sie Farben zur Hervorhebung wichtiger Elemente:

graphviz
digraph {
    node [shape=box];

    Kritisch [style=filled, fillcolor=red, fontcolor=white];
    Wichtig [style=filled, fillcolor=orange];
    Normal [style=filled, fillcolor=lightgreen];

    Kritisch -> Wichtig -> Normal;
}

6. Lesbarkeit testen

Nach dem Speichern prüfen, ob das Diagramm in der Webansicht gut lesbar ist. Bei Bedarf:

  • Grösse anpassen (option: width="...")
  • Diagramm vereinfachen
  • Anderen Diagrammtyp wählen

Fehlerbehandlung

Diagramm wird nicht angezeigt

Mögliche Ursachen:

  1. Syntaxfehler im Diagramm-Code

    • Prüfen Sie die Syntax gemäss Dokumentation des Diagrammtyps
    • Testen Sie den Code auf https://kroki.io/
  2. Falscher Diagrammtyp

    • Erste Zeile muss genau dem Kroki-Typ entsprechen
    • Beispiel: plantuml (nicht PlantUML oder plant-uml)
  3. Kroki-Server nicht erreichbar

    • Bei Fehlermeldung "Error generating diagram" Server prüfen

Fehlersuche

  1. Code auf kroki.io testen:

    https://kroki.io/
    

    Geben Sie dort den Code ein und testen Sie die Generierung.

  2. Diagramm-Cache leeren:

    python manage.py clear_diagram_cache
    
  3. Logs prüfen: Fehler werden im Application-Log ausgegeben.

Häufig verwendete Diagramm-Szenarien

IT-Sicherheit: Bedrohungsmodell

mermaid
flowchart TB
    Asset[Schützenswertes Asset]
    Threat[Bedrohung]
    Vuln[Schwachstelle]
    Control[Sicherheitsmassnahme]

    Threat -->|nutzt aus| Vuln
    Vuln -->|betrifft| Asset
    Control -->|schliesst| Vuln
    Control -->|schützt| Asset

Netzwerk-Segmentierung

nwdiag
nwdiag {
    network internet {
        address = "Internet";
        internet [shape = cloud];
    }
    network dmz {
        address = "DMZ (192.168.1.0/24)";
        fw [address = "192.168.1.1"];
        web [address = "192.168.1.10"];
    }
    network internal {
        address = "Intern (10.0.0.0/8)";
        fw [address = "10.0.0.1"];
        app [address = "10.0.1.10"];
        db [address = "10.0.2.10"];
    }

    internet -- fw;
}

Patch-Management Prozess

plantuml
@startuml
start
:Patch-Benachrichtigung empfangen;
:Schweregrad bewerten;
if (Kritischer Patch?) then (ja)
  :Sofort in Test-Umgebung testen;
  if (Test erfolgreich?) then (ja)
    :Notfall-Change erstellen;
    :In Produktion ausrollen;
  else (nein)
    :Vendor kontaktieren;
  endif
else (nein)
  :In regulären Patch-Zyklus einplanen;
  :Testen im Change-Window;
  :Reguläres Rollout;
endif
:Dokumentation aktualisieren;
stop
@enduml

Zugriffskontrolle

plantuml
@startuml
skinparam actorStyle awesome

actor Benutzer
actor Administrator
actor "Security Team" as ST

rectangle "VorgabenUI" {
    usecase "Vorgaben lesen" as UC1
    usecase "Vorgaben bearbeiten" as UC2
    usecase "Vorgaben publizieren" as UC3
    usecase "Sicherheitsreview" as UC4
}

Benutzer --> UC1
Administrator --> UC1
Administrator --> UC2
ST --> UC4
UC2 .> UC4 : <<extends>>
UC4 --> UC3
@enduml

Weiterführende Ressourcen

Tipps für spezifische Diagrammtypen

PlantUML Tipps

@startuml
' Kommentare mit Apostroph
skinparam backgroundColor transparent
skinparam defaultFontName Arial
@enduml

Mermaid Tipps

%%{ init: { 'theme': 'base' } }%%
flowchart LR
    %% Kommentare mit doppeltem Prozent

GraphViz Tipps

digraph {
    // Kommentare mit doppeltem Slash
    rankdir=LR;  // Links nach Rechts
    // rankdir=TB;  // Top nach Bottom
}

Support

Bei Fragen oder Problemen mit Diagrammen:

  1. Code auf https://kroki.io/ testen
  2. Syntax-Dokumentation des jeweiligen Diagrammtyps konsultieren
  3. Diagramm-Cache leeren: python manage.py clear_diagram_cache
  4. Bei technischen Problemen: Information Security Management BIT kontaktieren