Der Seed erkannte seine sieben Vorlagen am Namen. Wer eine umbenannte, bekam beim naechsten Lauf eine zweite -- und der Schnellstart stand auf der Geraeteseite doppelt. Vorlage.seedSchluessel traegt die Kennung, eindeutig wo gesetzt (partieller Index, weil eigene Vorlagen keinen tragen). Das Austauschformat kennt das Feld als seedSchluessel; nicht als schluessel, wie das Issue plante, denn so heisst dort schon das Feld einer Variablen. Der Rueckfall auf den Namen bleibt, sonst bekaeme eine Installation von vor diesem Feld beim ersten Lauf danach genau die Dubletten, die es verhindern soll. Wird sie so gefunden, traegt der Seed den Schluessel nach -- an der Entwicklungsdatenbank gefahren: sieben nachgetragen, nichts neu angelegt. Der Import setzt den Schluessel nicht, auch nicht wenn das Dokument ihn mitbringt, und der Export schreibt ihn nicht: eine eingespielte Kopie soll nicht den Platz des Originals einnehmen. Gegenprobe gefahren: ohne die Suche am Schluessel werden vier Tests rot. Closes #32
174 lines
8.4 KiB
JSON
174 lines
8.4 KiB
JSON
{
|
|
"format": 1,
|
|
"name": "Server-Inbetriebnahme Windows-VM",
|
|
"seedSchluessel": "server-inbetriebnahme",
|
|
"beschreibung": "Inbetriebnahme einer neuen Windows-Server-VM: Planung und Adressvergabe, Installation, Domänenbeitritt, Absicherung sowie Aufnahme in Backup und Monitoring.",
|
|
"kategorie": "Server",
|
|
"schlagworte": ["windows", "server", "vm", "inbetriebnahme"],
|
|
"struktur": {
|
|
"variablen": [
|
|
{ "schluessel": "vmid", "beschriftung": "VM-Kennung im Hypervisor", "typ": "TEXT" },
|
|
{ "schluessel": "ip_adresse", "beschriftung": "IP-Adresse", "typ": "TEXT", "pflicht": true },
|
|
{ "schluessel": "vlan", "beschriftung": "VLAN", "typ": "TEXT" },
|
|
{
|
|
"schluessel": "rolle",
|
|
"beschriftung": "Rolle (z. B. Fileserver)",
|
|
"typ": "TEXT",
|
|
"pflicht": true
|
|
},
|
|
{
|
|
"schluessel": "os_version",
|
|
"beschriftung": "Windows-Server-Version",
|
|
"typ": "AUSWAHL",
|
|
"optionen": ["Windows Server 2022", "Windows Server 2025"]
|
|
}
|
|
],
|
|
"abschnitte": [
|
|
{
|
|
"titel": "Planung",
|
|
"schritte": [
|
|
{
|
|
"titel": "Ressourcen festgelegt (vCPU, RAM, Datenträger) und dokumentiert",
|
|
"hilfetext": "Knapp dimensionieren und später erweitern ist einfacher als der umgekehrte Weg: RAM und Datenträger lassen sich vergrößern, verkleinern praktisch nicht.",
|
|
"pflicht": true
|
|
},
|
|
{
|
|
"titel": "IP {{ip_adresse}} reserviert und in IP-Dokumentation eingetragen, VLAN {{vlan}}",
|
|
"hilfetext": "Die Adresse vor dem Anlegen der VM reservieren, sonst vergibt der DHCP-Bereich sie womöglich ein zweites Mal. VLAN und Verwendungszweck gleich mit eintragen.",
|
|
"pflicht": true
|
|
},
|
|
{
|
|
"titel": "DNS-Name nach Namensschema: {{hostname}}",
|
|
"hilfetext": "A-Record und PTR anlegen, nicht nur den A-Record. Ohne Rückwärtsauflösung melden sich Backup- und Monitoring-Agenten mit der IP statt mit dem Namen.",
|
|
"pflicht": true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"titel": "VM und Betriebssystem",
|
|
"schritte": [
|
|
{
|
|
"titel": "VM angelegt (VirtIO SCSI, VirtIO-Netzwerk, QEMU Guest Agent aktiviert, UEFI + TPM)",
|
|
"hilfetext": "Die VirtIO-Treiber-ISO schon beim Setup einbinden, sonst findet die Installation keinen Datenträger. UEFI und TPM lassen sich nachträglich nur mit Aufwand ergänzen.",
|
|
"pflicht": true
|
|
},
|
|
{
|
|
"titel": "{{os_version}} installiert, VirtIO-Treiber und Guest Agent installiert",
|
|
"hilfetext": "Der Guest Agent ist erst dann wirklich aktiv, wenn der Hypervisor die IP-Adresse der VM anzeigt. Dann funktionieren auch geordnetes Herunterfahren und konsistente Sicherungen.",
|
|
"pflicht": true
|
|
},
|
|
{
|
|
"titel": "Statische IP, DNS-Server und Gateway gesetzt",
|
|
"hilfetext": "Ein Server holt seine Adresse nicht per DHCP. Danach Namensauflösung in beide Richtungen prüfen und das Gateway anpingen.",
|
|
"pflicht": true
|
|
},
|
|
{
|
|
"titel": "Hostname gesetzt",
|
|
"hilfetext": "Vor dem Domänenbeitritt umbenennen, nicht danach — sonst steht das Computerkonto im Verzeichnis unter dem alten Namen.",
|
|
"typ": "BEFEHL",
|
|
"pflicht": true,
|
|
"konfig": {
|
|
"shell": "powershell",
|
|
"befehl": "Rename-Computer -NewName \"{{hostname}}\" -Restart"
|
|
}
|
|
},
|
|
{
|
|
"titel": "Windows Updates vollständig",
|
|
"hilfetext": "Mehrfach durchlaufen lassen, bis nichts mehr kommt, und erst danach die Rolle installieren. Das künftige Wartungsfenster gleich festlegen.",
|
|
"pflicht": true
|
|
},
|
|
{
|
|
"titel": "Zeitzone korrekt, Zeitsynchronisation prüfen",
|
|
"hilfetext": "Mehr als fünf Minuten Zeitversatz lassen Kerberos-Anmeldungen scheitern. In der Ausgabe auf „Source“ achten: ein Domänenmitglied synchronisiert gegen den Domänencontroller, nicht gegen einen Internetserver.",
|
|
"typ": "BEFEHL",
|
|
"pflicht": true,
|
|
"konfig": { "shell": "cmd", "befehl": "w32tm /query /status" }
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"titel": "Einbindung",
|
|
"schritte": [
|
|
{
|
|
"titel": "Domänenbeitritt, richtige OU",
|
|
"hilfetext": "Das Computerkonto gehört in die vorgesehene Server-OU, nicht in den Standard-Container „Computers“ — dort greifen die Richtlinien nicht.",
|
|
"pflicht": true
|
|
},
|
|
{
|
|
"titel": "Vertrauensstellung prüfen",
|
|
"hilfetext": "Muss `True` liefern. Ein `False` deutet auf ein zurückgesetztes Computerkonto hin, etwa nach dem Zurückspielen eines älteren Snapshots.",
|
|
"typ": "BEFEHL",
|
|
"pflicht": true,
|
|
"konfig": { "shell": "powershell", "befehl": "Test-ComputerSecureChannel -Verbose" }
|
|
},
|
|
{
|
|
"titel": "Rolle eingerichtet: {{rolle}}",
|
|
"hilfetext": "Nur die Rolle installieren, die der Server tragen soll. Jede zusätzliche Rolle vergrößert Angriffsfläche und Abhängigkeiten bei Neustarts.",
|
|
"pflicht": true
|
|
},
|
|
{
|
|
"titel": "Lizenz aktiviert",
|
|
"hilfetext": "Den Aktivierungsstatus prüfen, nicht nur den Schlüssel eintragen. Bei KMS und AVMA kommt die Aktivierung erst nach dem Domänenbeitritt bzw. über den Host zustande.",
|
|
"pflicht": true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"titel": "Sicherheit",
|
|
"schritte": [
|
|
{
|
|
"titel": "Lokales Administratorpasswort im Passwortmanager bzw. LAPS aktiv",
|
|
"hilfetext": "Für jeden Server ein eigenes Kennwort. Ein gemeinsames lokales Adminkennwort ist der kürzeste Weg von einem übernommenen Server zu allen anderen.",
|
|
"pflicht": true
|
|
},
|
|
{
|
|
"titel": "RDP nur für berechtigte Gruppe, NLA aktiv",
|
|
"hilfetext": "RDP nicht für „Jeder“ öffnen und nie direkt aus dem Internet erreichbar machen. Mit aktiver NLA scheitert ein Anmeldeversuch, bevor überhaupt eine Sitzung aufgebaut wird.",
|
|
"pflicht": true
|
|
},
|
|
{
|
|
"titel": "Virenschutz/EDR aktiv, Ausnahmen laut Rolle gesetzt",
|
|
"hilfetext": "Ausnahmen nur für die Pfade und Prozesse der Rolle setzen und begründet dokumentieren. Eine pauschale Ausnahme für ein ganzes Laufwerk hebt den Schutz auf.",
|
|
"pflicht": true
|
|
},
|
|
{
|
|
"titel": "Firewall-Regeln auf das Nötige beschränkt",
|
|
"hilfetext": "Nur die Ports der Rolle, und nur aus den Netzen, die sie brauchen. Nach dem Einrichten von außen nachmessen, statt der Regelliste zu vertrauen.",
|
|
"pflicht": true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"titel": "Betrieb",
|
|
"schritte": [
|
|
{
|
|
"titel": "In Backup aufgenommen, erster Sicherungslauf erfolgreich",
|
|
"hilfetext": "Es zählt der erfolgreiche erste Lauf, nicht der angelegte Auftrag. Aufbewahrungsdauer und Sicherungsziel gleich mitprüfen.",
|
|
"pflicht": true
|
|
},
|
|
{
|
|
"titel": "Testwiederherstellung einer Datei durchgeführt",
|
|
"hilfetext": "Eine Sicherung, aus der noch nie etwas zurückgeholt wurde, ist keine. Eine einzelne Datei an einen anderen Ort wiederherstellen und den Inhalt ansehen.",
|
|
"pflicht": true
|
|
},
|
|
{
|
|
"titel": "Monitoring eingerichtet (Agent, Host, Trigger)",
|
|
"hilfetext": "Der Agent allein genügt nicht: Trigger für Datenträgerfüllstand, die Dienste der Rolle und Erreichbarkeit setzen und einen Alarm testweise auslösen.",
|
|
"pflicht": true
|
|
},
|
|
{
|
|
"titel": "RMM-Agent installiert",
|
|
"hilfetext": "Im Portal prüfen, ob der Server online erscheint und der richtigen Gruppe zugeordnet ist. Wartungsfenster hinterlegen, damit Patches nicht mitten am Tag laufen.",
|
|
"pflicht": true
|
|
},
|
|
{
|
|
"titel": "Dokumentation erstellt (Zweck, Rolle, IP, Abhängigkeiten, Verantwortlicher)",
|
|
"hilfetext": "Wichtig ist, was ein Kollege um drei Uhr nachts braucht: Zweck, Abhängigkeiten, Verantwortlicher und wo die Zugangsdaten liegen.",
|
|
"pflicht": true
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
}
|