Snapshots¶
Snapshots sind Point-in-Time-Erfassungen von Tenant-Konfigurationen. Sie bilden das Fundament von TCM365s Configuration Lifecycle Management und ermöglichen Vergleiche, Drift-Erkennung, Baseline-Evaluation und Rollback-Operationen.
Übersicht¶
TCM365 erfasst Konfigurations-Snapshots von mehreren Anbietern über eine vendor-agnostische Architektur. Für Microsoft 365 werden je nach Workload zwei unterschiedliche Capture-Strategien eingesetzt. Für Zscaler rufen direkte API-Calls die ZIA- und ZPA-Konfigurationen ab.
Alle Snapshot-Operationen laufen über den SnapshotService, der an die entsprechende
VendorAdapter-Implementierung basierend auf dem Tenant-Typ delegiert.
Kernfunktionen¶
- Point-in-Time-Erfassung von Tenant-Konfigurationen über alle unterstützten Anbieter
- Zwei M365-Capture-Strategien optimiert für unterschiedliche Workload-Typen
- 52 Microsoft 365 Resource Types über 7 Workload-Bereiche
- Zscaler ZIA (12 Endpoint Groups) und ZPA (9 Endpoint Groups) Unterstützung
- Atlassian Cloud (28 Resource Types) über Jira, Confluence und Org Security (v2.5.0)
- 24 spezialisierte Renderer zur Anzeige von Snapshot-Inhalten
- Bulk-Delete-Modus zur Verwaltung der Snapshot-Historie (v2.2.0)
- Capture Lock Service zur Verhinderung gleichzeitiger Snapshot-Operationen
- Fortschrittsverfolgung während Capture-Operationen
Capture-Strategien (Microsoft 365)¶
Microsoft 365-Konfigurationen werden je nach Workload mit zwei verschiedenen Strategien erfasst. Dieser duale Ansatz ist notwendig, weil Microsoft unterschiedliche API-Oberflächen für verschiedene Dienste bereitstellt.
Strategie 1: UTCM Snapshot Job API¶
Verwendet für: Teams, Exchange Online
Die UTCM (Unified Tenant Configuration Management) API bietet einen dedizierten Snapshot-Mechanismus für Teams- und Exchange-Konfigurationen. Diese Strategie erstellt einen asynchronen Snapshot Job, den Microsoft serverseitig verarbeitet.
sequenceDiagram
participant C as Client
participant B as TCM365 Backend
participant G as Microsoft Graph
C->>B: POST /snapshots
B->>G: POST /tenantManagement/snapshotJobs
G-->>B: 202 Accepted (jobId)
B-->>C: { status: capturing }
loop Polling
B->>G: GET /snapshotJobs/{jobId}
G-->>B: { status: running }
end
B->>G: GET /snapshotJobs/{jobId}
G-->>B: { status: completed, data }
B-->>C: { status: completed }
Voraussetzungen:
- Der UTCM Service Principal (App ID:
03b07b79-c5bc-4b5e-9bfa-13acf4a99998) muss im Ziel-Tenant provisioniert sein - Entsprechende Microsoft Graph Permissions müssen gewaehrt sein
API-Limits:
- Maximal 4 gleichzeitige Snapshot Jobs pro Tenant
- Snapshot Jobs verfallen nach 24 Stunden
- Rate Limits gelten gemaess dem UTCM API-Quotensystem (verfolgt via
UTCMQuotaUsage-Entity)
Strategie 2: Direct Graph API GET¶
Verwendet für: Entra ID, Intune, Defender, SharePoint, Cloud PC, Purview, Security
Für Workloads, die nicht von der UTCM Snapshot Job API abgedeckt werden, führt TCM365 direkte GET-Anfragen an die Microsoft Graph API aus, um den aktuellen Konfigurationszustand abzurufen.
sequenceDiagram
participant C as Client
participant B as TCM365 Backend
participant G as Microsoft Graph
C->>B: POST /snapshots
B->>G: GET /beta/identity/conditionalAccessPolicies
G-->>B: 200 OK (policies[])
B->>G: GET /beta/deviceManagement/deviceConfigurations
G-->>B: 200 OK (configs[])
Note over B,G: Wiederholt für jeden Resource Type
B-->>C: { status: completed }
Diese Strategie iteriert durch die ausgewaehlten Resource Types und ruft jeden einzeln ab.
Der GraphService (1.704 Zeilen) verarbeitet alle direkten Graph API-Interaktionen.
Warum zwei Strategien?
Die UTCM Snapshot Job API liefert eine reichhaltigere, vollständigere Erfassung für Teams und Exchange (einschliesslich Einstellungen, die über Standard-Graph-Endpoints nicht verfügbar sind). Für andere Workloads bietet die Standard-Graph-API direkten, synchronen Zugriff.
Microsoft 365 Resource Types¶
TCM365 unterstützt 52 Resource Types, organisiert nach Workload-Bereichen. Resource-Definitionen
werden in der Resource Registry unter backend-js/src/config/resource-registry/ gepflegt.
| Workload | Anzahl | Beispiele |
|---|---|---|
| Entra ID | 12 | Conditional Access, Named Locations, Authentication Methods, Cross-tenant Access |
| Intune | 10 | Device Configurations, Compliance Policies, App Protection, Enrollment Restrictions |
| Defender | 6 | Anti-Phishing, Anti-Malware, Safe Attachments, Safe Links |
| Exchange | 8 | Transport Rules, Connectors, Mailbox Policies, OWA Policies |
| Teams | 6 | Messaging Policies, Meeting Policies, App Permission, Teams Settings |
| SharePoint | 4 | Sharing Settings, Tenant Settings, Site Properties |
| Cloud PC | 3 | Provisioning Policies, User Settings, Gallery Images |
| Purview | 2 | Sensitivity Labels, DLP Policies |
| Security | 1 | Secure Score |
Resource Types verwenden die Vendor-Prefixed-Namenskonvention:
microsoft.entra.conditionalAccess
microsoft.intune.deviceConfigurations
microsoft.exchange.transportRules
microsoft.teams.messagingPolicies
Zscaler Resource Types¶
Zscaler ZIA (Internet Access)¶
12 Endpoint Groups werden für die ZIA-Konfigurationserfassung unterstützt:
| Endpoint Group | Beschreibung |
|---|---|
| URL Filtering Rules | Web-Zugangsrichtlinien und URL-Kategorien |
| Firewall Rules | Cloud-Firewall-Richtlinien |
| DLP Rules | Data Loss Prevention Richtlinien |
| SSL Inspection | SSL/TLS-Inspektionsregeln |
| Security Policies | Malware- und Advanced Threat Protection |
| Location Management | Standorte und Unterstandorte |
| User Management | Benutzer und Abteilungen |
| Admin Management | Administrator-Konten und -Rollen |
| Bandwidth Control | Bandbreiten-Management-Richtlinien |
| VPN Credentials | VPN-Gateway-Zugangsdaten |
| Authentication Settings | Authentifizierungsprofile |
| Traffic Forwarding | GRE-Tunnel- und PAC-Datei-Einstellungen |
Zscaler ZPA (Private Access)¶
9 Endpoint Groups werden für die ZPA-Konfigurationserfassung unterstützt:
| Endpoint Group | Beschreibung |
|---|---|
| Application Segments | Anwendungsdefinitionen und -segmente |
| Server Groups | Backend-Server-Gruppierungen |
| Segment Groups | Anwendungssegment-Gruppierungen |
| Access Policies | Zugriffskontrollrichtlinien |
| Connectors | ZPA Connector-Konfigurationen |
| Connector Groups | Connector-Gruppierungen |
| App Connector Controller | Connector-Controller-Einstellungen |
| Service Edge Groups | Service-Edge-Konfigurationen |
| Provisioning Keys | Provisioning-Key-Verwaltung |
Atlassian Cloud Resource Types (v2.5.0)¶
TCM365 unterstützt 28 Resource Types für Atlassian Cloud, organisiert nach Produktbereich.
Jira (16 Resource Types)¶
| Resource Type | Beschreibung |
|---|---|
| Projects | Jira-Projekte und Projektkonfiguration |
| Workflows | Workflow-Definitionen und -Schemata |
| Permission Schemes | Berechtigungsschemata |
| Issue Security Schemes | Issue-Sicherheitsschemata |
| Notification Schemes | Benachrichtigungsschemata |
| Issue Types | Issue-Typen und -Hierarchien |
| Custom Fields | Benutzerdefinierte Felder |
| Screens | Screen-Konfigurationen |
| Priorities | Prioritaetsstufen |
| Resolutions | Loesungsdefinitionen |
| Statuses | Status-Definitionen |
| Roles | Projektrollendefinitionen |
| Filters | Gespeicherte Filter |
| Dashboards | Dashboard-Konfigurationen |
| Boards | Agile Board-Einstellungen |
| Application Properties | Globale Jira-Einstellungen |
Confluence (5 Resource Types)¶
| Resource Type | Beschreibung |
|---|---|
| Spaces | Confluence-Spaces und Space-Konfiguration |
| Global Templates | Globale Seitenvorlagen |
| Space Permissions | Space-Berechtigungen |
| Look and Feel | Design- und Layout-Einstellungen |
| System Configuration | Systemkonfiguration |
Org Security (7 Resource Types)¶
| Resource Type | Beschreibung |
|---|---|
| Authentication Policies | Organisationsweite Authentifizierungsrichtlinien |
| IP Allowlists | IP-Zulassungslisten |
| Audit Log Settings | Audit-Log-Konfiguration |
| External Users | Externe Benutzerverwaltung |
| Security Policies | Sicherheitsrichtlinien |
| API Tokens | API-Token-Management |
| Domain Verification | Domain-Verifizierungseinstellungen |
Resource Types verwenden die Vendor-Prefixed-Namenskonvention:
atlassian.jira.projects
atlassian.jira.workflows
atlassian.confluence.spaces
atlassian.orgSecurity.authenticationPolicies
Snapshot-Erstellungsablauf¶
API-Endpoint¶
Request Body¶
{
"vendorTenantId": "uuid-of-vendor-tenant",
"name": "Pre-Change Baseline - Maerz 2026",
"description": "Snapshot vor Anwendung neuer CA Policies",
"resourceTypes": [
"microsoft.entra.conditionalAccess",
"microsoft.entra.namedLocations",
"microsoft.intune.deviceConfigurations"
]
}
Fortschrittsverfolgung¶
Während der Erfassung zeigt das Frontend Echtzeit-Fortschritt über die
SnapshotProgress-Komponente an. Das Backend sendet Fortschrittsaktualisierungen
wenn jeder Resource Type abgeschlossen wird:
{
"status": "capturing",
"progress": {
"total": 12,
"completed": 7,
"current": "microsoft.intune.compliancePolicies",
"errors": []
}
}
Capture Lock Service¶
Um gleichzeitige Snapshot-Operationen auf demselben Tenant zu verhindern, implementiert TCM365 einen Capture Lock Service:
- Mit Redis: Verwendet Redis
NX(Set-if-not-exists) für verteiltes Locking - Ohne Redis: Fällt zurück auf eine In-Memory Lock Map
Die Sperre wird automatisch freigegeben, wenn die Erfassung abgeschlossen ist oder fehlschlägt. Dies verhindert doppelte Snapshots und schuetzt vor API Rate Limit-Erschoepfung.
Snapshot-Anzeige¶
24 spezialisierte Renderer¶
Snapshot-Inhalte werden mit spezialisierten Renderern angezeigt, die auf jeden Resource Type
zugeschnitten sind. Diese Renderer befinden sich in frontend/src/components/snapshots/viewer/
und bieten strukturierte, menschenlesbare Ansichten der Konfigurationsdaten.
| Kategorie | Renderer | Zweck |
|---|---|---|
| Policy Renderer | CA Policy, Compliance Policy, App Protection | Strukturierte Policy-Visualisierung |
| Configuration Renderer | Device Config, OWA Policy, Mailbox Policy | Einstellung-für-Einstellung Anzeige |
| List Renderer | Named Locations, Transport Rules, Connectors | Tabellarische Listenansichten |
| Security Renderer | Anti-Phishing, Safe Links, Safe Attachments | Bedrohungsschutz-Einstellungen |
| Identity Renderer | Auth Methods, Cross-Tenant, Role Assignments | Identitaetskonfigurationsanzeige |
| Fallback Renderer | JSON Viewer | Roh-JSON für nicht unterstützte Typen |
SnapshotViewer-Komponente¶
Die SnapshotViewer-Komponente bietet eine einheitliche Oberfläche zur Exploration
von Snapshot-Inhalten:
- Baumbasierte Navigation nach Workload und Resource Type
- Suche und Filter über alle erfassten Konfigurationen
- Auf-/zuklappbare Bereiche für grosse Konfigurationssaetze
- Copy-to-Clipboard für einzelne Einstellungen
- Export nach JSON für Offline-Analyse
Bulk Delete (v2.2.0)¶
Ab v2.2.0 unterstützt die Snapshots-Seite einen Bulk-Delete-Modus für die effiziente Verwaltung der Snapshot-Historie:
- Bulk-Delete-Modus über die Snapshot-Listenansicht umschalten
- Mehrere Snapshots über Checkboxen auswählen
- Löschung mit einem Zusammenfassungsdialog bestätigen
- Kaskadierendes Löschen entfernt zugehörige Daten (Diffs, Drift-Records)
API-Endpoint¶
Snapshot Entity¶
Die Snapshot-Entity speichert erfasste Konfigurationsdaten:
| Feld | Typ | Beschreibung |
|---|---|---|
id |
UUID | Primärschlüssel |
name |
string | Benutzerdefinierter Snapshot-Name |
description |
string | Optionale Beschreibung |
status |
enum | pending, capturing, completed, failed |
vendor_tenant_id |
UUID | FK zu vendor_tenants-Tabelle |
resource_types |
JSONB | Array erfasster Resource Type-Bezeichner |
configuration_data |
JSONB | Vollständiger erfasster Konfigurations-Payload |
metadata |
JSONB | Erfassungs-Metadaten (Dauer, Fehler, Zähler) |
created_at |
timestamp | Erfassungszeitpunkt |
updated_at |
timestamp | Letzte Änderung |
Legacy Cleanup (v2.4.0)
Ab v2.4.0 verwenden Snapshots ausschliesslich vendor_tenant_id. Die frühere
m365_tenant_id-Spalte und die m365_tenants-Tabelle wurden vollständig entfernt.
Snapshot-Vergleich¶
Snapshots können verglichen werden, um Konfigurationsänderungen über die Zeit zu
identifizieren. Der Vergleich wird vom DiffService durchgeführt und mit den Komponenten
DiffTree und DiffViewer visualisiert.
Vergleichsablauf¶
- Zwei Snapshots desselben Tenants auswählen
- Das Backend führt einen Deep Comparison der Konfigurationsdaten durch
- Änderungen werden als hinzugefügt, geändert oder entfernt kategorisiert
- Ergebnisse werden in einer Side-by-Side-Diff-Ansicht dargestellt
Exportformate¶
| Format | Beschreibung |
|---|---|
| JSON | Maschinenlesbarer Diff-Output für Automatisierung |
| HTML | Formatierter Bericht geeignet zum Teilen und Drucken |
Change Attribution¶
Beim Vergleich von M365-Snapshots kann TCM365 Änderungen bestimmten Benutzern zuordnen,
indem Azure AD Directory Audit Logs abgefragt werden. Dies erfordert die Graph API Permission
AuditLog.Read.All.
Konfiguration¶
Erforderliche Permissions (Microsoft 365)¶
Die Snapshot-Erfassung erfordert, dass die Azure AD App Registration die folgenden Microsoft Graph API Permissions (Application-Typ) hat:
| Permission | Zweck |
|---|---|
Directory.Read.All |
Entra ID-Konfigurationen lesen |
Policy.Read.All |
Conditional Access und Auth-Policies lesen |
DeviceManagementConfiguration.Read.All |
Intune-Konfigurationen lesen |
SecurityEvents.Read.All |
Defender-Konfigurationen lesen |
ExchangeManagement.Read.All |
Exchange Online-Einstellungen lesen |
TeamSettings.Read.All |
Teams-Konfigurationen lesen |
Für eine vollständige Liste siehe die UTCM-Referenz.
Erforderliche Zugangsdaten (Zscaler)¶
| Zugangsdaten | ZIA | ZPA |
|---|---|---|
| Cloud-Bezeichner | zia_cloud (z.B. zscaler.net) |
zpa_cloud |
| API Key | zia_api_key |
-- |
| Client ID | -- | zpa_client_id |
| Client Secret | -- | zpa_client_secret |
| Admin-Benutzername | zia_admin_username |
-- |
| Admin-Passwort | zia_admin_password |
-- |
| Customer ID | -- | zpa_customer_id |
Alle Zugangsdaten werden verschlüsselt gespeichert über den Per-Tenant EncryptionService
mit austauschbarem SecretBackend (LocalAES für Entwicklung, Azure Key Vault für Produktion).
Best Practices¶
- Snapshots beschreibend benennen -- Zweck und Datum angeben (z.B. "Pre-CA-Rollout Maerz 2026")
- Vor Änderungen erfassen -- Immer einen Snapshot vor Konfigurationsänderungen erstellen
- Relevante Resource Types auswählen -- Nur benötigte Typen erfassen reduziert Zeit und API-Quota-Verbrauch
- UTCM-Quota überwachen -- Teams/Exchange-Snapshots verbrauchen UTCM API-Quota (automatisch verfolgt)
- Bulk Delete nutzen -- Regelmäßig alte Snapshots aufraeumen zur Speicherverwaltung
- Vergleiche nutzen -- Nach Änderungen Diff/Compare verwenden um erwartete Ergebnisse zu verifizieren