CMDB light: Minimales Asset-Register aufbauen und dauerhaft pflegen
Einleitung
„CMDB“ klingt nach ServiceNow, sechsmonatigem Projekt und permanenter Pflege-Schuld. Für KMU ist das Quatsch. Was du brauchst, ist ein minimales Asset-Register: eine Liste mit Hosts, Owner, Kritikalität – mehr nicht. Dieser Artikel zeigt, wie du in einem halben Tag ein „CMDB light“ mit SQLite oder einem Git-Repo aufbaust, das im Incident sofort hilft und dauerhaft gepflegt bleibt, weil die Pflege automatisch passiert.
Warum das Thema wichtig ist
Im Incident ist die erste Frage nie „welcher Host“ – das siehst du im Log. Die ersten Fragen sind: „Wem gehört der?“, „Was läuft drauf?”, „Wie kritisch ist der?“, „Wer entscheidet, ob wir abschalten?”. Ohne Asset-Register: 30 Minuten Telefonate, niemand weiß genau Bescheid, falsche Entscheidungen unter Zeitdruck. Mit Asset-Register: 30 Sekunden Lookup. Die volle ITIL-CMDB ist Overkill – das Asset-Register ist kein Compliance-Artefakt, sondern ein operatives IR-Werkzeug. Genau das macht den Unterschied zwischen Theorie und Praxis.
Was minimal wirklich heißt
Ein gutes Asset-Register hat pro Host genau diese Felder:
| Feld | Beispiel | Pflicht |
|---|---|---|
hostname |
auth-prod-01 |
ja |
ip_primary |
10.20.30.40 |
ja |
mac_primary |
aa:bb:cc:dd:ee:ff |
ja |
os |
Ubuntu 24.04 |
ja |
owner_team |
Plattform-Team |
ja |
owner_person |
karl.mueller@example.com |
ja |
criticality |
1=hoch, 2=mittel, 3=niedrig |
ja |
data_class |
internal / confidential / public |
ja |
network_zone |
dmz / internal / management |
ja |
purpose |
OAuth-Provider |
ja |
last_seen |
2026-05-03 |
ja (aus Discovery) |
decommission_date |
null |
optional |
Mehr nicht. Software-Inventory, Patch-Status, Scan-Ergebnisse leben in den jeweiligen Tools – nicht im Asset-Register. Sonst wird die Pflege zur Hauptaufgabe.
Variante 1: Git-Repo mit YAML
Für sehr kleine Umgebungen (< 200 Hosts) der einfachste Weg. Pro Host eine Datei oder ein Eintrag in einer Sammeldatei:
# assets/auth-prod-01.yaml
hostname: auth-prod-01
ip_primary: 10.20.30.40
mac_primary: aa:bb:cc:dd:ee:ff
os: Ubuntu 24.04
owner_team: Plattform-Team
owner_person: karl.mueller@example.com
criticality: 1
data_class: confidential
network_zone: dmz
purpose: OAuth-Provider
decommission_date: null
Vorteile:
- Versionierung gratis (jede Änderung im Git-Log)
- Pull-Request als Change-Workflow
- Durchsuchbar via
grep,yq,gh search - Backup gratis durch Git-Remote
Nachteile:
- Joins mit anderen Daten umständlich
- Keine SQL-artigen Reports
Variante 2: SQLite + CSV-Export
Robuster und join-fähig:
CREATE TABLE assets (
hostname TEXT PRIMARY KEY,
ip_primary TEXT,
mac_primary TEXT,
os TEXT,
owner_team TEXT,
owner_person TEXT,
criticality INTEGER CHECK(criticality IN (1, 2, 3)),
data_class TEXT,
network_zone TEXT,
purpose TEXT,
last_seen DATE,
decommission_date DATE
);
CREATE INDEX idx_owner ON assets(owner_team);
CREATE INDEX idx_zone ON assets(network_zone);
Pflege als CSV im Git, Import in SQLite per Cron:
sqlite3 assets.db <<EOF
.mode csv
.import --skip 1 assets.csv assets
EOF
Reports per SQL:
-- Wer ist Owner für DMZ-Hosts?
SELECT hostname, owner_person FROM assets
WHERE network_zone='dmz' AND decommission_date IS NULL;
-- Top-Kritikalität ohne Owner?
SELECT hostname FROM assets
WHERE criticality=1 AND owner_person IS NULL;
Im Incident: ein einziger Query, sofort klar wer informiert werden muss.
Variante 3: GLPI / Snipe-IT als Light-CMDB
Wenn du eine UI willst:
| Tool | Stärken | Schwächen |
|---|---|---|
| GLPI | OSS, breit, Asset + Ticketing | Komplex, viele Felder |
| Snipe-IT | Hardware-fokussiert | Wenig IT-Service-Kontext |
| Nautobot / NetBox | Network-zentrisch | Steile Lernkurve |
| OCS Inventory | Discovery + Inventory | UI altertümlich |
Empfehlung KMU: erst Variante 1 oder 2 produktiv haben, dann ggf. später migrieren. „Tool zuerst“ scheitert meistens.
Discovery-Pflege automatisieren
Manuell pflegen scheitert. Stattdessen mehrere Quellen automatisch in das Register kippen und Diff-Alerts auf Veränderungen schalten.
Quelle 1 – AD-Computer-Objekte
Get-ADComputer -Filter * -Properties OperatingSystem, LastLogonDate `
| Select-Object Name, IPv4Address, OperatingSystem, LastLogonDate `
| Export-Csv -Path ad-hosts.csv -NoTypeInformation
Quelle 2 – DHCP-Leases
Get-DhcpServerv4Scope | Get-DhcpServerv4Lease `
| Where-Object {$_.AddressState -eq 'ActiveReservation' -or $_.AddressState -eq 'Active'} `
| Export-Csv -Path dhcp-hosts.csv -NoTypeInformation
Quelle 3 – Nmap-Scan
nmap -sn 10.20.30.0/24 -oX nmap-scan.xml
Quelle 4 – Wazuh-Agents / Defender-Devices / EDR-Inventory
API-Abfrage, JSON parsen, in CSV.
Konsolidierung
Python-Skript, das alle Quellen einliest, per IP/MAC mergt und Diff zum letzten Stand speichert. Diff-Output ist zugleich das Audit-Log.
import sqlite3, csv
con = sqlite3.connect("assets.db")
cur = con.cursor()
cur.execute("CREATE TABLE IF NOT EXISTS discovery_diff (date TEXT, change TEXT, hostname TEXT, ip TEXT)")
# pseudo
new = load_csv_sources()
old = current_assets(cur)
for change in diff(old, new):
cur.execute("INSERT INTO discovery_diff VALUES (date('now'), ?, ?, ?)",
(change.type, change.hostname, change.ip))
con.commit()
Alert ans IT-Team bei: neuer Host (unbekannt!), fehlender Host (decommissioned ohne Ticket?), IP-Wechsel auf kritischem Host.
Owner-Zuordnung: das schwerste Feld
owner_person ist das wichtigste Feld – und das, was am häufigsten leer bleibt. Tipps:
- Default-Owner pro Subnetz / VLAN: alle Hosts in
10.20.30.0/24gehören dem Plattform-Team - AD-OU-Mapping: Hosts in
OU=Finance,…haben das Finance-Team als Default-Owner - Quartalsweise Re-Validierung: Mail an alle Owner mit ihrer Asset-Liste, „bestätigen oder korrigieren“
- Leaver-Process: wenn Mitarbeiter gehen, Asset-Zuordnung pflicht-aktualisieren – sonst „Karteileichen“
Kritikalität: drei Stufen reichen
Mehr als drei Stufen führt zu endlosen Diskussionen.
| Stufe | Definition | Beispiel |
|---|---|---|
| 1 hoch | Ausfall trifft Kerngeschäft binnen 1h | DC, ERP, Mail-Gateway |
| 2 mittel | Ausfall stört, aber überbrückbar | Test-Stage, interner Wiki |
| 3 niedrig | Ausfall fällt erst nach Tagen auf | Lab-VM, alter Print-Server |
Wer die Kritikalität nicht entscheiden kann, fragt: „Geht morgens um 8 ohne den Host gar nichts mehr?“ → wahrscheinlich Stufe 1.
Asset-Register im IR nutzen
Konkretes Beispiel: SIEM-Alert auf WIN-COMP-042. IR-Verantwortlicher tippt:
SELECT hostname, owner_person, criticality, data_class, network_zone, purpose
FROM assets WHERE hostname='WIN-COMP-042';
Antwort:
WIN-COMP-042 | sara.weiss@... | 1 | confidential | internal | Finance-Workstation (DATEV)
In 5 Sekunden weiß der IR-Verantwortliche: hochkritisch, Finance-Daten, intern, Owner ist Sara, sofort anrufen.
Stolperfallen
- Zu viele Felder: jedes zusätzliche Feld kostet Pflege. Maxime „nur was du im IR brauchst“
- Daten manuell pflegen: scheitert immer. Automation ist Pflicht
- Keine Owner-Pflicht: ohne Owner ist der Eintrag wertlos. NULL-Owner als Alarm-Zustand
- Decommissioned-Hosts nie raus: Register quillt über, alte Einträge stören Suche.
decommission_datesetzen, nach 12 Monaten purgen - CMDB-Tool als Selbstzweck: ServiceNow für 50 Hosts ist Verschwendung
- Doppelte Source-of-Truth: Tickets sagen X, Register sagt Y. Eine Quelle als Master definieren
- Kritikalität nie definiert: alle Hosts „mittel“. Im IR keine Hilfe
- Discovery-Quellen widersprechen sich: AD sagt Host existiert, Nmap sieht ihn nicht. Diff-Alert ist ein Feature, kein Bug
Praxis-Checkliste
- Felder definiert, max. 12, alle Pflicht-Felder klar
- Datenformat festgelegt (Git+YAML, SQLite, GLPI)
- Mind. 3 Discovery-Quellen automatisch eingelesen (AD, DHCP, Nmap, EDR)
- Diff-Alert auf Veränderungen aktiv
- Owner pro Host gesetzt, Default-Mapping pro Subnetz
- Kritikalität in 3 Stufen vergeben
- Quartalsweise Re-Validierung an Owner
- Leaver-Process aktualisiert Asset-Zuordnungen
- Decommission-Workflow inkl. Register-Update
- Asset-Register im IR-Runbook verlinkt
- Backup / Versionierung des Registers
- Berechtigungen: Schreibzugriff nur für IT-Team, Lesezugriff für IR
Fazit
CMDB light heißt: nicht „komplett“, sondern „nützlich“. Ein einfaches Register mit Owner und Kritikalität – automatisch via AD, DHCP und Nmap gepflegt – ist im Incident wertvoller als jede ausgefüllte ITIL-CMDB, die niemand vertraut. Die Investition ist ein halber Tag, der Gewinn dauerhaft. Wenn du heute nur eine Sache anfangen willst: ein SQLite-File mit zehn Spalten, gefüllt aus drei Discovery-Quellen, plus ein Owner-Mapping pro Subnetz. Der Rest ergibt sich.
Wenn du tiefer einsteigen willst: Im Newsletter zeige ich jeden Monat konkrete Discovery-Skripte, SQL-Queries und CMDB-light-Workflows für KMU. Trag dich ein.