Architektur-Übersicht¶
TCM365 folgt einer modernen N-Tier-Schichtenarchitektur, die auf Multi-Vendor-Erweiterbarkeit, Tenant-Isolation und operationale Sicherheit ausgelegt ist. Diese Seite bietet einen High-Level-Ueberblick über das Plattform-Design. Detaillierte Vertiefungen sind für jede Schicht verfügbar.
Systemarchitektur¶
graph TB
subgraph Client["Client Layer"]
FE["Vue 3.5 + Vite 7 + Pinia 3 + Tailwind CSS<br/>55 Views | 106 Components | 28 Services | 10 Stores"]
end
subgraph Gateway["API Gateway Layer"]
GW["NestJS 10 (Express)<br/>Helmet | CORS | Rate Limiting | Swagger/OpenAPI<br/>AllExceptionsFilter | AuditLog Interceptor"]
end
subgraph Auth["Authentication / Authorization"]
AU["JWT Strategy | Local Strategy (bcrypt)<br/>JwtAuthGuard | RolesGuard | PermissionsGuard<br/>SUPER_ADMIN > TENANT_ADMIN > WORKFLOW_MANAGER > VIEWER"]
end
subgraph Business["Business Logic Layer - 36 Feature-Module"]
CORE["Core: Snapshots | Diff | Rollback | Baselines"]
MON["Monitors: Drift Detection | Anomaly Detection | Custom Probes"]
SEC["Security: CA What-If | Email Security | Zero Trust | Copilot Readiness"]
COMP["Compliance: NIS2 Incidents | Risk | Change Mgmt | BC/DR"]
VEND["Vendor: VendorAdapterRegistry | M365Adapter | ZscalerAdapter | AtlassianAdapter"]
OPS["Ops: Scheduler | Notifications | Reports | AI Analysis"]
ADM["Admin: Users | Groups | Settings | Audit Log | Data Viewer"]
end
subgraph Data["Data Access Layer"]
DA["TypeORM 0.3 (Repository)<br/>35 Entities (UUID PKs) | 32 Migrations<br/>BaseEntity Pattern | STI (VendorTenant)"]
end
subgraph External["External API Layer"]
GRAPH["GraphService (1.704 Zeilen)"]
UTCM["UtcmService (1.438 Zeilen)"]
ZIA["ZscalerZiaClient"]
ZPA["ZscalerZpaClient"]
ATLJIRA["AtlassianJiraClient"]
ATLCONF["AtlassianConfluenceClient"]
ATLADM["AtlassianAdminClient"]
end
subgraph DB["Database Layer"]
PG["PostgreSQL 15<br/>Row-Level Security | Schema-per-Tenant<br/>tcm_admin (BYPASSRLS) | tcm_app (respects RLS)"]
RD["Redis 7 (Optional)<br/>Rate Limits | Locks | Cache"]
end
subgraph APIs["Vendor APIs"]
MSGRAPH["Microsoft Graph API"]
UTCMAPI["UTCM Snapshot Job API"]
ZIAAPI["Zscaler ZIA REST API"]
ZPAAPI["Zscaler ZPA REST API"]
ATLAPI["Atlassian Cloud REST APIs"]
end
FE -->|"HTTP/REST (JWT Bearer)"| GW
GW --> Auth
Auth --> Business
Business --> Data
Business --> External
Data --> PG
Data --> RD
GRAPH --> MSGRAPH
UTCM --> UTCMAPI
ZIA --> ZIAAPI
ZPA --> ZPAAPI
ATLJIRA --> ATLAPI
ATLCONF --> ATLAPI
ATLADM --> ATLAPI
Architekturprinzipien¶
1. Multi-Vendor-Erweiterbarkeit¶
TCM365 abstrahiert vendor-spezifische Logik hinter dem VendorAdapter-Interface. Jede Vendor-Interaktion -- von Snapshot Capture über Drift Detection bis Rollback -- geht durch dieses Interface, sodass neue Vendor ohne Änderung des Kernplattform-Codes hinzugefügt werden können.
Siehe: Multi-Vendor-Architektur
2. Drei-Schichten Tenant-Isolation¶
Datenisolation wird auf drei unabhängigen Schichten durchgesetzt:
| Schicht | Mechanismus | Schutz |
|---|---|---|
| Anwendung | TenantAccessService |
IDOR-Prävention, Org-Level Access Validation |
| Datenbank (RLS) | PostgreSQL Row-Level Security | Query-Level-Datenfilterung nach org_id |
| Datenbank (Schema) | Per-Tenant-Schemas (tenant_{uuid}) |
Physische Datentrennung für Data-Plane-Tabellen |
Wenn eine einzelne Schicht kompromittiert wird, schützen die anderen beiden weiterhin die Tenant-Daten. Siehe: Sicherheitsarchitektur
3. Module-per-Feature¶
Jede Geschaeftsfaehigkeit ist in einem NestJS-Modul mit eigenem Controller, Service, DTOs und (wo zutreffend) Entities gekapselt. Module kommunizieren über NestJS Dependency Injection statt direkter Imports, was die Kopplung gering haelt.
Siehe: Backend-Architektur
4. Vendor-agnostischer Kern¶
Der Plattformkern (Snapshots, Diff, Baselines, Compliance, Reports) arbeitet auf vendor-agnostischen Datenstrukturen. Vendor-spezifische Details werden an der Adapter-Grenze aufgeloest, sodass die Geschaeftslogik sauber und über alle Vendor wiederverwendbar bleibt.
5. Defense in Depth¶
Sicherheit ist geschichtet: JWT-Authentifizierung, rollenbasierte Zugriffskontrolle, berechtigungsbasierte Autorisierung, Tenant-Isolation (drei Schichten), Per-Tenant-Verschlüsselung, Audit Logging, CORS, Helmet und Rate Limiting. Kein einzelner Mechanismus ist die einzige Verteidigungslinie.
Komponenten-Ueberblick¶
Backend (NestJS 10)¶
Das Backend ist eine Node.js/TypeScript-Anwendung auf dem NestJS-Framework mit 36 Feature-Modulen. Es stellt eine REST API auf Port 8000 mit JWT-basierter Authentifizierung bereit.
| Aspekt | Details |
|---|---|
| Runtime | Node.js 18+ |
| Framework | NestJS 10 mit Express |
| Sprache | TypeScript 5 (Strict Mode) |
| Module | 36 Feature-Module |
| Entities | 35 TypeORM Entities |
| Migrationen | 32 TypeORM-Migrationen |
| API-Prefix | /api/v1/ |
| Swagger | Verfügbar unter /api/docs |
Siehe: Backend-Architektur
Frontend (Vue 3.5)¶
Das Frontend ist eine Single-Page Application auf Basis von Vue 3, die in der Entwicklung von Vite und in der Produktion von Nginx bereitgestellt wird. Es kommuniziert mit dem Backend ausschliesslich über die REST API.
| Aspekt | Details |
|---|---|
| Framework | Vue 3.5 (Composition API) |
| Build Tool | Vite 7 |
| State | Pinia 3 (10 Stores) |
| Routing | Vue Router 4 mit Auth Guards |
| Styling | Tailwind CSS 3 |
| Views | 55 Page Views |
| Components | 106 wiederverwendbare Komponenten |
| Services | 28 API Client Services |
Siehe: Frontend-Architektur
Datenbank (PostgreSQL 15)¶
PostgreSQL dient als primaerer Datenspeicher mit erweiterten Sicherheitsfeatures wie Row-Level Security und Schema-per-Tenant-Isolation.
| Aspekt | Details |
|---|---|
| Engine | PostgreSQL 15 |
| ORM | TypeORM 0.3 |
| Primärschlüssel | UUID (nicht Auto-Increment) |
| Entities | 35 |
| Migrationen | 32 |
| RLS | 18 tenant-scoped Tabellen |
| Schemas | Per-Tenant (tenant_{uuid}) für 23 Data-Plane-Tabellen |
| Vererbung | Single Table Inheritance für VendorTenant |
Siehe: Datenbank-Architektur
Cache (Redis 7 - Optional)¶
Redis bietet verteiltes Caching, Rate Limiting und Lock-Koordination. Bei Nichtverfuegbarkeit degradiert das System automatisch auf In-Memory-Alternativen.
| Feature | Mit Redis | Ohne Redis |
|---|---|---|
| Rate Limiting | Distributed Sliding Window | In-Memory Sliding Window |
| Capture Locks | Distributed NX Locks | In-Memory Mutex |
| Token Blacklist | Distributed Set | In-Memory Set |
Datenfluss: Snapshot Capture¶
Der folgende Ablauf zeigt einen typischen Snapshot Capture Flow und wie die Komponenten interagieren:
sequenceDiagram
participant User as Benutzer
participant FE as Frontend
participant Guard as JwtAuthGuard
participant Ctrl as SnapshotController
participant TAS as TenantAccessService
participant Svc as SnapshotService
participant Reg as VendorAdapterRegistry
participant Adapter as VendorAdapter
participant DB as PostgreSQL
participant Audit as AuditLogInterceptor
participant Notify as NotificationService
User->>FE: Klick "Neuer Snapshot"
FE->>Guard: POST /api/v1/snapshots
Guard->>Guard: JWT validieren
Guard->>Ctrl: Anfrage weitergeleitet
Ctrl->>Ctrl: DTO validieren
Ctrl->>TAS: Org-Level-Zugriff prüfen
TAS-->>Ctrl: Zugriff erlaubt
Ctrl->>Svc: Snapshot erstellen
Svc->>Reg: VendorAdapter aufloesen
Reg-->>Svc: M365Adapter, ZscalerAdapter oder AtlassianAdapter
Svc->>Adapter: capture(tenant, options)
Adapter-->>Svc: CaptureResult
Svc->>DB: Snapshot-Daten speichern (Tenant Schema)
Svc-->>Ctrl: Snapshot erstellt
Ctrl-->>Audit: Audit-Eintrag erfassen
Ctrl-->>Notify: Benachrichtigung senden (falls konfiguriert)
Ctrl-->>FE: 201 Created
Deployment-Architektur¶
Entwicklung¶
Browser --> Vite Dev Server (:5173) --proxy--> NestJS (:8000) --> PostgreSQL (:5432)
--> Redis (:6379)
Produktion (Docker)¶
Browser --> Nginx (:80/:443)
|
+--> /api/* --> NestJS Container (:8000)
| |
| +--> PostgreSQL Container (:5432)
| +--> Redis Container (:6379)
| +--> Azure Key Vault
| +--> Azure Blob Storage
|
+--> /* --> Vue Static Assets (served by Nginx)
Azure Produktion¶
Browser --> Azure App Service (Frontend)
|
+--> Azure App Service (Backend API)
|
+--> Azure Database for PostgreSQL
+--> Azure Cache for Redis
+--> Azure Key Vault
+--> Azure Blob Storage
Vertiefende Seiten¶
| Seite | Fokusbereich |
|---|---|
| Backend-Architektur | NestJS-Module, Services, API Routes, Dependency Injection |
| Frontend-Architektur | Vue-Komponenten, Stores, Services, Routing |
| Datenbank-Architektur | Entities, Migrationen, RLS, Schema-Isolation |
| Multi-Vendor-Architektur | VendorAdapter-Pattern, Registry, Vendor hinzufügen |
| Sicherheitsarchitektur | Authentifizierung, Autorisierung, Verschlüsselung, Tenant-Isolation |