Drift-Erkennung¶
Die Drift-Erkennung ist TCM365s kontinuierliche Ueberwachungsfunktion, die identifiziert, wenn Tenant-Konfigurationen von einer bekannten Baseline abweichen. Sie arbeitet über automatisierte Configuration Monitors, die periodisch den aktuellen Zustand mit einem Referenz-Snapshot vergleichen.
Übersicht¶
Configuration Drift tritt auf, wenn Einstellungen in einem Cloud-Tenant sich ändern -- sei es durch manuelle Administrator-Aktionen, automatisierte Skripte oder Policy-Propagierung. TCM365 erkennt diese Änderungen automatisch und alarmiert Administratoren, um eine schnelle Behebung zu ermöglichen, bevor Drift Sicherheitsluecken oder Compliance-Verstöße verursacht.
Kernfunktionen¶
- Automatisierte Konfigurationsueberwachung über die UTCM Configuration Monitor API
- Vendor-agnostische Drift-Erkennung durch das
VendorAdapter.detectDrift()-Interface - Visuelle Drift-Berichte mit detaillierten Aenderungsaufschluesselungen
- Drift-Resolution-Workflow mit Baseline-Update-Optionen
- Multi-Channel-Benachrichtigungen bei Drift-Erkennung
- Drift-Historienverfolgung für Audit und Trendanalyse
- Unterstützung für Microsoft 365, Zscaler und Atlassian Cloud-Umgebungen
- Atlassian Drift-Erkennung basiert auf deep-diff-Vergleich (v2.5.0)
Architektur¶
Die Drift-Erkennung in TCM365 operiert auf zwei Ebenen:
Ebene 1: UTCM Configuration Monitors (Microsoft 365)¶
Für Microsoft 365 Tenants nutzt TCM365 die UTCM Configuration Monitor API, um serverseitige Monitors zu erstellen, die Microsoft kontinuierlich auswertet.
sequenceDiagram
participant B as TCM365 Backend
participant G as Microsoft Graph (UTCM)
B->>G: POST /tenantManagement/configurationMonitors
G-->>B: 201 Created (monitorId)
Note over G: Microsoft wertet periodisch aus
B->>G: GET /configurationMonitors/{id}/drift
G-->>B: 200 OK (driftResults[])
Note over B: Drift-Ergebnisse verarbeiten & speichern
Note over B: Benachrichtigungen senden falls konfiguriert
Der UtcmService (1.438 Zeilen) verwaltet alle Interaktionen mit der UTCM Monitor API,
einschliesslich Monitor-Lifecycle-Management und Drift-Ergebnisabruf.
Ebene 2: VendorAdapter Drift-Erkennung¶
Für Anbieter ohne serverseitiges Monitoring (wie Zscaler) und als ergaenzender Mechanismus für M365 führt TCM365 die Drift-Erkennung durch, indem der aktuelle Konfigurationszustand mit einem gespeicherten Baseline-Snapshot verglichen wird.
sequenceDiagram
participant S as Scheduler
participant V as VendorAdapter
participant A as Vendor API
S->>V: detectDrift(baseline)
V->>A: capture(current)
A-->>V: currentConfig
Note over V: compare(baseline, current)
V-->>S: DriftResult
Configuration Monitors¶
Monitor erstellen¶
Monitors werden über die TCM365 API erstellt, wobei angegeben wird, welche Resource Types überwacht und welcher Snapshot als Baseline dient.
API-Endpoint:
Request Body:
{
"vendorTenantId": "uuid-of-vendor-tenant",
"name": "Production CA Policy Monitor",
"description": "Conditional Access Policies auf unautorisierte Änderungen überwachen",
"baselineSnapshotId": "uuid-of-baseline-snapshot",
"resourceTypes": [
"microsoft.entra.conditionalAccess",
"microsoft.entra.namedLocations"
],
"schedule": {
"interval": "hourly",
"enabled": true
},
"notificationChannels": ["email", "teams"]
}
Monitor Entity¶
Die ConfigurationMonitor-Entity verfolgt aktive Ueberwachungskonfigurationen:
| Feld | Typ | Beschreibung |
|---|---|---|
id |
UUID | Primärschlüssel |
name |
string | Monitor-Anzeigename |
description |
string | Optionale Beschreibung |
vendor_tenant_id |
UUID | FK zu vendor_tenants |
baseline_snapshot_id |
UUID | FK zum Referenz-Snapshot |
resource_types |
JSONB | Array ueberwachter Resource Types |
schedule |
JSONB | Ueberwachungsplan-Konfiguration |
status |
enum | active, paused, error |
last_check_at |
timestamp | Letzter Auswertungszeitpunkt |
utcm_monitor_id |
string | Externe UTCM Monitor ID (nur M365) |
created_at |
timestamp | Erstellungszeitpunkt |
updated_at |
timestamp | Letzte Änderung |
Monitor-Lifecycle¶
stateDiagram-v2
[*] --> Active: Erstellt
Active --> DriftDetected: Drift erkannt
DriftDetected --> AlertSent: Benachrichtigung
AlertSent --> DriftResolved: Behoben
DriftResolved --> BaselineUpdated: Baseline aktualisiert
BaselineUpdated --> Active
Active --> Paused: Manuell pausiert
Paused --> Active: Fortgesetzt
Monitors können:
- Pausiert werden -- Überwachung voruebergehend stoppen (nuetzlich bei geplanten Änderungen)
- Fortgesetzt werden -- Überwachung nach einer Pause neu starten
- Aktualisiert werden -- Ueberwachte Resource Types oder Benachrichtigungskanäle ändern
- Re-Baselined werden -- Baseline-Snapshot nach Akzeptanz von Änderungen aktualisieren
- Geloescht werden -- Monitor vollständig entfernen
Drift-Erkennungsergebnisse¶
ConfigurationDrift Entity¶
Wenn Drift erkannt wird, wird ein ConfigurationDrift-Record erstellt:
| Feld | Typ | Beschreibung |
|---|---|---|
id |
UUID | Primärschlüssel |
monitor_id |
UUID | FK zum Configuration Monitor |
vendor_tenant_id |
UUID | FK zu vendor_tenants |
resource_type |
string | Resource Type mit erkanntem Drift |
drift_type |
enum | added, modified, removed |
baseline_value |
JSONB | Erwarteter Konfigurationswert |
current_value |
JSONB | Tatsächlicher aktueller Konfigurationswert |
severity |
enum | low, medium, high, critical |
status |
enum | detected, acknowledged, resolved, ignored |
detected_at |
timestamp | Zeitpunkt der Drift-Erkennung |
resolved_at |
timestamp | Zeitpunkt der Behebung (nullable) |
resolved_by |
UUID | FK zum Benutzer der den Drift behoben hat (nullable) |
resolution_notes |
text | Anmerkungen zur Drift-Behebung |
Drift-Kategorien¶
| Kategorie | Beschreibung | Beispiel |
|---|---|---|
| Added | Neue Konfigurationselemente nicht in der Baseline | Neue CA Policy ausserhalb des Change Managements hinzugefügt |
| Modified | Bestehende Elemente mit geänderten Werten | MFA-Erzwingung von aktiviert auf deaktiviert geändert |
| Removed | Baseline-Elemente nicht mehr vorhanden | Named Location gelöscht |
Severity-Klassifizierung¶
Die Drift-Severity wird durch den Resource Type und die Art der Änderung bestimmt:
| Severity | Kriterien | Beispiel |
|---|---|---|
| Critical | Sicherheitsrelevante Änderungen an Authentifizierung oder Autorisierung | CA Policy deaktiviert, MFA entfernt |
| High | Änderungen an Sicherheitsrichtlinien oder Compliance-relevanten Einstellungen | Defender Policy abgeschwaecht, DLP-Regel entfernt |
| Medium | Änderungen an Betriebskonfigurationen | Transport Rule geändert, Teams Policy aktualisiert |
| Low | Kosmetische oder geringfuegige Änderungen | Anzeigename geändert, Beschreibung aktualisiert |
Drift-Visualisierung¶
TCM365 bietet fuenf spezialisierte Visualisierungskomponenten für die Drift-Analyse
unter frontend/src/components/drift/:
Drift Dashboard¶
Das Haupt-Drift-Dashboard bietet einen Ueberblick über alle erkannten Drifts über ueberwachte Tenants hinweg:
- Drift-Zusammenfassungskarten -- Anzahl aktiver Drifts nach Severity
- Drift-Timeline -- Chronologische Ansicht der Drift-Events
- Tenant Drift Map -- Visuelle Anzeige des Drift-Status pro Tenant
- Resource Type-Aufschlüsselung -- Drift-Anzahl nach Resource Type
Drift-Detailansicht¶
Für einzelne Drift-Records zeigt die Detailansicht:
- Side-by-Side-Vergleich von Baseline- vs. aktuellem Wert
- Hervorgehobene Änderungen mit farbcodierten Hinzufuegungen, Änderungen und Entfernungen
- Change Attribution (wer die Änderung vorgenommen hat, falls Audit-Log-Daten verfügbar)
- Empfohlene Behebungsmassnahmen
Drift-Resolution-Workflow¶
Wenn Drift erkannt wird, folgen Administratoren einem strukturierten Behebungsworkflow:
Schritt 1: Überprüfen¶
Drift-Details überprüfen, einschliesslich der spezifischen Änderungen, betroffenen Resource Types und moeglichen Auswirkungen.
Schritt 2: Klassifizieren¶
Bestimmen, ob der Drift:
- Unautorisiert ist -- Änderung wurde nicht genehmigt und muss zurückgesetzt werden
- Autorisiert ist -- Änderung war beabsichtigt und die Baseline sollte aktualisiert werden
- Erwartet ist -- Änderung ist Teil eines geplanten Rollouts (bestätigen und überwachen)
Schritt 3: Beheben¶
Basierend auf der Klassifizierung:
| Klassifizierung | Aktion | API-Endpoint |
|---|---|---|
| Unautorisiert | Rollback auf Baseline-Konfiguration | POST /api/v1/rollback |
| Autorisiert | Baseline-Snapshot aktualisieren | PUT /api/v1/configuration-drift/monitors/{id}/rebaseline |
| Erwartet | Bestätigen und Status auf resolved setzen | PUT /api/v1/configuration-drift/{id}/resolve |
Schritt 4: Verifizieren¶
Nach der Behebung einen manuellen Drift-Check auslösen, um die Behebung zu bestätigen:
Baseline-Update bei Resolution¶
Wenn Drift durch Akzeptanz der Änderungen behoben wird, kann der Baseline-Snapshot des Monitors automatisch aktualisiert werden, um den neuen Soll-Zustand widerzuspiegeln:
{
"resolution": "accepted",
"updateBaseline": true,
"notes": "CA Policy Update genehmigt in CR-2026-042"
}
Geplante Überwachung¶
Scheduler-Integration¶
Der SchedulerService verwaltet periodische Drift-Checks mit NestJS @nestjs/schedule:
| Intervall | Anwendungsfall |
|---|---|
| Alle 15 Minuten | Kritische Sicherheitskonfigurationen (CA Policies, MFA-Einstellungen) |
| Stündlich | Standard-Betriebskonfigurationen |
| Alle 6 Stunden | Niedrigprioritaere oder selten geaenderte Einstellungen |
| Täglich | Umfassende Vollständige-Tenant-Drift-Scans |
Manueller Drift-Check¶
Zusätzlich zu geplanten Checks können Administratoren eine On-Demand-Drift-Erkennung auslösen:
Dies wertet sofort die aktuelle Konfiguration gegen die Baseline aus und liefert Drift-Ergebnisse.
Benachrichtigungen bei Drift¶
Wenn Drift erkannt wird, kann TCM365 Benachrichtigungen über konfigurierte Kanäle senden:
| Kanal | Konfiguration |
|---|---|
| SMTP-Einstellungen in der Benachrichtigungskonfiguration | |
| Microsoft Teams | Incoming Webhook URL |
| Slack | Incoming Webhook URL |
| Webhook | Benutzerdefinierter HTTP-Endpoint |
Benachrichtigungsinhalte umfassen:
- Monitor-Name und Tenant-Bezeichner
- Resource Type und Drift-Severity
- Zusammenfassung der Änderungen (Added/Modified/Removed-Zähler)
- Direktlink zur Drift-Detailseite in TCM365
Siehe Benachrichtigungen für Kanal-Konfigurationsdetails.
API-Endpoints¶
| Methode | Endpoint | Beschreibung |
|---|---|---|
GET |
/api/v1/configuration-drift |
Alle Drift-Records auflisten |
GET |
/api/v1/configuration-drift/{id} |
Drift-Details abrufen |
PUT |
/api/v1/configuration-drift/{id}/resolve |
Drift-Record beheben |
GET |
/api/v1/configuration-drift/monitors |
Alle Monitors auflisten |
POST |
/api/v1/configuration-drift/monitors |
Neuen Monitor erstellen |
GET |
/api/v1/configuration-drift/monitors/{id} |
Monitor-Details abrufen |
PUT |
/api/v1/configuration-drift/monitors/{id} |
Monitor aktualisieren |
DELETE |
/api/v1/configuration-drift/monitors/{id} |
Monitor löschen |
POST |
/api/v1/configuration-drift/monitors/{id}/check |
Manuellen Check auslösen |
PUT |
/api/v1/configuration-drift/monitors/{id}/rebaseline |
Baseline aktualisieren |
POST |
/api/v1/configuration-drift/monitors/{id}/pause |
Überwachung pausieren |
POST |
/api/v1/configuration-drift/monitors/{id}/resume |
Überwachung fortsetzen |
Best Practices¶
- Mit kritischen Ressourcen beginnen -- CA Policies und MFA-Einstellungen zuerst überwachen, dann Abdeckung erweitern
- Angemessene Intervalle setzen -- Häufige Checks für sicherheitskritische Einstellungen, seltener für stabile Konfigurationen
- Benachrichtigungen aktivieren -- Mindestens einen Benachrichtigungskanal für Drift-Alerts konfigurieren
- Change Management-Integration nutzen -- Drift-Resolution mit Change Requests für Audit Trails verknüpfen
- Bewusst re-baselinen -- Baselines nur nach Verifizierung der Autorisierung aktualisieren
- Drift-Trends überprüfen -- Periodische Überprüfung der Drift-Historie zeigt Konfigurationsmanagement-Lücken auf
- Während Wartung pausieren -- Monitors während geplanter Aenderungsfenster pausieren um False Positives zu vermeiden