Files
vgui-cicd/Documentation/Datei-importieren.md

10 KiB

Dokumenten-Import: Anleitung

Diese Anleitung beschreibt, wie Dokumente und Vorgaben mittels des import-document Management Commands in die VorgabenUI importiert werden können.

Übersicht

Der import-document Command ermöglicht es, strukturierte Textdateien zu importieren, die Dokumente mit Einleitung, Geltungsbereich und Vorgaben enthalten. Das Format ist speziell für die einfache Erfassung und Pflege von IT-Sicherheitsstandards konzipiert.

Grundlegende Verwendung

Minimaler Aufruf

python manage.py import-document <dateipfad> \
  --nummer <dokumentnummer> \
  --name "<dokumentname>" \
  --dokumententyp "<typ>"

Beispiel

python manage.py import-document Documentation/import\ formats/r009.txt \
  --nummer "R0009" \
  --name "Serversysteme" \
  --dokumententyp "Standard IT-Sicherheit"

Parameter

Pflichtparameter

Parameter Beschreibung Beispiel
file_path Pfad zur Importdatei Documentation/import formats/r009.txt
--nummer Dokumentnummer (eindeutig) R0009, R0066
--name Dokumentname "Logging", "Serversysteme"
--dokumententyp Dokumententyp (muss bereits existieren) "Standard IT-Sicherheit"

Optionale Parameter

Parameter Beschreibung Verwendung
--gueltigkeit_von Startdatum der Gültigkeit --gueltigkeit_von 2024-01-01
--gueltigkeit_bis Enddatum der Gültigkeit --gueltigkeit_bis 2025-12-31
--dry-run Testlauf ohne Datenbankänderungen --dry-run
--verbose Ausführliche Ausgabe (mit --dry-run) --dry-run --verbose
--purge Löscht bestehende Einleitung/Geltungsbereich/Vorgaben vor Import --purge

Dry-Run Modus

Der Dry-Run Modus ist zum Testen gedacht:

python manage.py import-document r009.txt \
  --nummer "R0009" \
  --name "Serversysteme" \
  --dokumententyp "Standard IT-Sicherheit" \
  --dry-run --verbose

Dies zeigt an, was importiert würde, ohne die Datenbank zu ändern.

Purge Modus

Achtung: Der Purge-Modus löscht alle bestehenden Vorgaben des Dokuments!

python manage.py import-document r009.txt \
  --nummer "R0009" \
  --name "Serversysteme" \
  --dokumententyp "Standard IT-Sicherheit" \
  --purge

Mit --dry-run --purge kann zuerst geprüft werden, was gelöscht würde.

Dateiformat

Grundstruktur

Die Importdatei ist eine Textdatei (UTF-8 kodiert) mit speziellen Trennzeichen >>> am Zeilenanfang.

Aufbau

>>>Einleitung
>>>text
[Einleitungstext]

>>>Geltungsbereich
>>>text
[Geltungsbereichstext]

>>>Vorgabe [Thema]
>>>Nummer [nummer]
>>>Titel
[Titel der Vorgabe]
>>>Kurztext
>>>Text
[Kurztext-Inhalt]
>>>Langtext
>>>Text
[Langtext-Inhalt]
>>>Stichworte
[Stichwort1, Stichwort2, ...]
>>>Checkliste
[Frage 1]
[Frage 2]

Abschnitt-Trenner

Jeder Abschnitt beginnt mit >>> gefolgt vom Abschnittstyp:

  • >>>Einleitung - Startet den Einleitungsbereich
  • >>>Geltungsbereich - Startet den Geltungsbereichsbereich
  • >>>Vorgabe [Thema] - Startet eine neue Vorgabe mit angegebenem Thema

Abschnitttypen für Textinhalte

Nach >>>Einleitung, >>>Geltungsbereich, >>>Kurztext oder >>>Langtext folgt ein Abschnitttyp:

Typ Verwendung Beispiel
>>>text oder >>>Text Normaler Fliesstext >>>text
>>>liste geordnet oder >>>Liste geordnet Nummerierte Liste >>>Liste geordnet
>>>liste ungeordnet oder >>>Liste ungeordnet Aufzählungsliste >>>liste ungeordnet

Hinweis: Gross-/Kleinschreibung und Bindestriche (liste-ungeordnet) werden normalisiert.

Beispiele

Beispiel 1: Einfaches Dokument mit einer Vorgabe

>>>Einleitung
>>>text
Dieser Standard definiert Anforderungen für XYZ.

>>>Geltungsbereich
>>>text
Dieser Standard gilt für alle Systeme im BIT.

>>>Vorgabe Technik
>>>Nummer 1
>>>Titel
Verschlüsselung verwenden
>>>Kurztext
>>>Text
Alle Verbindungen müssen verschlüsselt sein.
>>>Langtext
>>>Text
Die Verschlüsselung muss mindestens TLS 1.2 verwenden.
Es sind folgende Cipher Suites erlaubt:
>>>Liste ungeordnet
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
>>>Stichworte
Verschlüsselung, TLS, Kryptographie
>>>Checkliste
TLS 1.2 oder höher ist konfiguriert
Schwache Cipher Suites sind deaktiviert

Beispiel 2: Mehrere Vorgaben mit gleichem Thema

>>>Vorgabe Organisation
>>>Nummer 1
>>>Titel
CMDB-Erfassung
>>>Kurztext
>>>Text
Alle Assets müssen in der CMDB erfasst sein.
>>>Langtext
>>>Text
Jedes Asset muss dokumentiert werden...

>>>Vorgabe Organisation
>>>Nummer 2
>>>Titel
Verantwortlichkeiten
>>>Kurztext
>>>Text
Verantwortlichkeiten müssen definiert sein.
>>>Langtext
>>>Text
Für jedes System muss ein Verantwortlicher...

Beispiel 3: Verschiedene Themen

>>>Vorgabe Technik
>>>Nummer 1
>>>Titel
Firewall-Konfiguration
>>>Kurztext
>>>Text
Lokale Firewall muss aktiviert sein.
>>>Langtext
>>>Text
Details zur Firewall-Konfiguration...

>>>Vorgabe Organisation
>>>Nummer 1
>>>Titel
Dokumentation
>>>Kurztext
>>>Text
Konfiguration muss dokumentiert sein.
>>>Langtext
>>>Text
Die Firewall-Regeln müssen...

>>>Vorgabe Informationen
>>>Nummer 1
>>>Titel
Datenklassifizierung
>>>Kurztext
>>>Text
Daten müssen klassifiziert werden.
>>>Langtext
>>>Text
Klassifizierungsstufen sind...

Beispiel 4: Mehrere Textabschnitte

>>>Vorgabe Technik
>>>Nummer 1
>>>Titel
Komplexe Anforderung
>>>Kurztext
>>>Text
Erste Zusammenfassung.
>>>Langtext
>>>Text
Erster Absatz mit Details.
>>>Text
Zweiter Absatz mit weiteren Informationen.
>>>Liste ungeordnet
Punkt 1
Punkt 2
Punkt 3
>>>Text
Abschliessender Text nach der Liste.

Vorgaben-Struktur

Vorgabe-Header

>>>Vorgabe [Thema]

Das Thema muss in der Datenbank bereits als Thema-Objekt existieren. Die bestehenden Themen sind - wie in den bestehenden Standards - aus dem IT-Grundschutz übernommen:

  • Organisation
  • Technik
  • Informationen
  • Systeme
  • Anwendungen
  • Zonen

Vorgabe-Felder

Nummer (Pflicht)

>>>Nummer 1

oder inline:

Die Nummer wird als Integer gespeichert. Sie ist nicht eindeutig innerhalb eines Dokuments und Themas. Wenn mehrere Vorgaben im selben Thema mit der selben Nummer vorkommen, darf sich der Geltungszeitraum der Vorgaben nicht überschneiden (wird beim Import geprüft).

Titel (Pflicht)

>>>Titel
Titel der Vorgabe

oder inline:

>>>Titel: Titel der Vorgabe

Kurztext (Optional)

>>>Kurztext
>>>Text
Kurze Zusammenfassung der Vorgabe.

Langtext (Optional)

>>>Langtext
>>>Text
Ausführliche Beschreibung der Vorgabe.
>>>Liste ungeordnet
Punkt 1
Punkt 2

Stichworte (Optional)

Komma-getrennte Liste:

>>>Stichworte
Firewall, Netzwerk, Sicherheit

Hinweis: Stichworte werden automatisch in der Datenbank angelegt, falls sie noch nicht existieren.

Checkliste (Optional)

>>>Checkliste
Ist die Firewall aktiviert?
Sind alle unnötigen Ports geschlossen?
Wurde die Konfiguration dokumentiert?

Jede Zeile wird als separate Checklistenfrage gespeichert.

Tipps und Best Practices

1. Dry-Run vor Import

Immer zuerst einen Dry-Run durchführen:

python manage.py import-document datei.txt \
  --nummer "R0XXX" \
  --name "Test" \
  --dokumententyp "Standard IT-Sicherheit" \
  --dry-run --verbose

2. Themen vorab erstellen

Sicherstellen, dass alle verwendeten Themen in der Datenbank existieren:

python manage.py shell
>>> from dokumente.models import Thema
>>> Thema.objects.get_or_create(name="Organisation")
>>> Thema.objects.get_or_create(name="Technik")
>>> Thema.objects.get_or_create(name="Informationen")

3. Dokumententyp vorab erstellen

Der Dokumententyp muss existieren:

python manage.py shell
>>> from dokumente.models import Dokumententyp
>>> Dokumententyp.objects.get_or_create(
...     name="Standard IT-Sicherheit",
...     defaults={"verantwortliche_ve": "SR-SUR-SEC"}
... )

4. Abschnitttypen prüfen

Folgende Abschnitttypen müssen in der Datenbank existieren:

  • text
  • liste geordnet
  • liste ungeordnet
  • code
  • diagramm

Prüfen in der Autorenumgebung unter "Abschnitttypen".

5. UTF-8 Kodierung

Sicherstellen, dass die Importdatei UTF-8 kodiert ist, besonders bei Umlauten (ä, ö, ü) und Sonderzeichen.

6. Versionierung mit Purge

Beim Re-Import mit --purge:

# 1. Backup erstellen
python manage.py dumpdata dokumente.Dokument dokumente.Vorgabe > backup.json

# 2. Import mit Purge
python manage.py import-document datei.txt \
  --nummer "R0009" \
  --name "Serversysteme" \
  --dokumententyp "Standard IT-Sicherheit" \
  --purge

7. Mehrzeilige Inhalte

Mehrzeiliger Text wird automatisch erkannt:

>>>Langtext
>>>Text
Dies ist Zeile 1.
Dies ist Zeile 2.

Dies ist ein neuer Absatz.

8. Leerzeilen

Leerzeilen innerhalb eines Abschnitts werden beibehalten. Eine Leerzeile nach einem >>>-Trenner wird ignoriert.

Fehlerbehebung

"Dokumententyp does not exist"

Der angegebene Dokumententyp existiert nicht in der Datenbank.

Lösung: Dokumententyp aus dem IT-Grundschutz verwenden, nötigenfalls hinzufügen in der Autorenumgebung oder per Shell.

"Thema not found, skipping Vorgabe"

Das in der Vorgabe verwendete Thema existiert nicht.

Lösung: Thema in der Autorenumgebung erstellen oder Importdatei anpassen.

"AbschnittTyp not found"

Ein verwendeter Abschnitttyp existiert nicht.

Lösung:

  • Schreibweise prüfen (Gross-/Kleinschreibung und "-"/" " wird normalisiert)
  • Wenn nötig Abschnitttyp in der Autorenumgebung erstellen (Achtung! Ausgabeformat muss im Code definiert werden)
  • Standardtypen: text, liste geordnet, liste ungeordnet, tabelle, code

Vorgabe wird nicht importiert

Prüfen:

  • Ist >>>Nummer gesetzt?
  • Ist >>>Titel gesetzt?
  • Existiert das Thema?

--dry-run --verbose für detaillierte Informationen.

Weitere Informationen

Beispieldateien

Beispieldateien:

  • Documentation/import formats/r009.txt
  • Documentation/import formats/r0126.txt

Export-Format

Der Export verwendet JSON statt Textformat. Für JSON-Export siehe:

python manage.py export_json --output dokumente.json

Oder über die Web-Oberfläche: /dokumente/R0066/?format=json

Verwandte Commands

  • export_json - Exportiert Dokumente als JSON
  • sanity_check_vorgaben - Prüft Vorgaben auf Konflikte
  • clear_diagram_cache - Löscht Diagramm-Cache