## Summary - replace broad substring-based masking with a shared exact/path-based secret classifier and workspace-scoped fingerprint hashing - persist protected snapshot metadata on `policy_versions` and keep secret-only changes visible in compare, drift, restore, review, verification, and ops surfaces - add Spec 120 artifacts, audit documentation, and focused Pest regression coverage for snapshot, audit, verification, review-pack, and notification behavior ## Validation - `vendor/bin/sail artisan test --compact tests/Feature/Intune/PolicySnapshotRedactionTest.php tests/Feature/Intune/PolicySnapshotFingerprintIsolationTest.php tests/Feature/ReviewPack/ReviewPackRedactionIntegrityTest.php tests/Feature/OpsUx/OperationRunNotificationRedactionTest.php tests/Feature/Verification/VerificationReportViewerDbOnlyTest.php` - `vendor/bin/sail bin pint --dirty --format agent` ## Spec / checklist status | Checklist | Total | Completed | Incomplete | Status | |-----------|-------|-----------|------------|--------| | requirements.md | 16 | 16 | 0 | ✓ PASS | - `tasks.md`: T001-T032 complete - `tasks.md`: T033 manual quickstart validation is still open and noted for follow-up ## Filament / platform notes - Livewire v4 compliance is unchanged - no panel provider changes; `bootstrap/providers.php` remains the registration location - no new globally searchable resources were introduced, so global search requirements are unchanged - no new destructive Filament actions were added - no new Filament assets were added; no `filament:assets` deployment change is required ## Testing coverage touched - snapshot persistence and fingerprint isolation - compare/drift protected-change evidence - audit, verification, review-pack, ops-failure, and notification sanitization - viewer/read-only Filament presentation updates Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #146
385 lines
30 KiB
Markdown
385 lines
30 KiB
Markdown
# TenantPilot – M365 Policy Coverage Gap Analysis
|
||
|
||
**Date:** 2026-03-07
|
||
**Author:** Gap Analysis (Automated Deep Research)
|
||
**Scope:** Security, Governance & Baseline-relevante Policy-Familien über Microsoft 365 hinweg
|
||
**Methode:** Repo-Ist-Analyse + Microsoft Graph API Research + Produktpriorisierung
|
||
|
||
---
|
||
|
||
## 1. Executive Summary
|
||
|
||
- **Intune-Coverage ist stark:** 27 Policy-Typen + 3 Foundation-Typen sind produktiv integriert mit Backup, Restore, Drift, Inventory und Baselines. Die Intune-Abdeckung gehört zu den umfangreichsten am Markt.
|
||
- **Entra ID ist die größte High-Value-Lücke:** Conditional Access wird bereits gesichert (Preview-Restore), aber Named Locations, Authentication Methods Policy, Authentication Strengths, Cross-Tenant Access Settings und Authorization Policy fehlen komplett — alles davon ist über Graph v1.0 produktreif adressierbar.
|
||
- **Entra Admin Roles sind ein Alleinstellungsmerkmal:** Die Evidence-/Findings-Integration für hochprivilegierte Rollen ist bereits implementiert und in dieser Form selten bei Wettbewerbern.
|
||
- **SharePoint/OneDrive Tenant Settings** sind über die Graph v1.0 `admin/sharepoint/settings` API sauber erreichbar und für MSPs ein sehr häufiger Audit-Punkt (External Sharing, Guest Access).
|
||
- **Exchange Online Security-Policies** (Anti-Phishing, Safe Links, Safe Attachments, Anti-Spam) sind **nicht** sauber über Graph adressierbar — sie erfordern Exchange Online PowerShell (EXO V3). Integration ist **fachlich wichtig, technisch aufwändig**.
|
||
- **Microsoft Defender for Office 365** Policies teilen den Exchange-PowerShell-Kanal — gleiches Integrationsproblem.
|
||
- **UTCM (Unified Tenant Configuration Management)** ist in Preview und signalisiert langfristig einen vereinheitlichten Backup/Restore/Drift-Kanal für alle M365-Workloads. Strategisch relevant, aber noch nicht produktreif.
|
||
- **Die nächsten 5 High-Impact-Kandidaten** sind: Named Locations, Authentication Methods Policy, SharePoint Tenant Settings, Authentication Strengths und Cross-Tenant Access Settings — alle über Graph v1.0.
|
||
- **Purview/DLP** hat für MSPs begrenzten Wert (typischerweise Enterprise-Scope, selten in MSP-Baselines) und sollte nur als Roadmap-Signal behandelt werden.
|
||
- **Die größte strategische Chance** liegt in der Positionierung als „Unified M365 Configuration Governance" — dafür fehlt primär der Entra-ID-Block.
|
||
|
||
---
|
||
|
||
## 2. Current Coverage Snapshot
|
||
|
||
### 2.1 Was ist heute abgedeckt?
|
||
|
||
**Intune / Endpoint Management — 27 Policy-Typen (Full Backup/Restore/Inventory/Drift):**
|
||
|
||
| Kategorie | Policy-Typen |
|
||
|-----------|-------------|
|
||
| Configuration | Device Configuration, Administrative Templates (ADMX), Settings Catalog |
|
||
| Compliance | Device Compliance, Custom Compliance Scripts |
|
||
| Update Management | Windows Update Rings, Feature Updates, Quality Updates, Driver Updates |
|
||
| Apps / MAM | App Protection (MAM), App Configuration (MAM), App Configuration (Device), Mobile Apps (Metadata) |
|
||
| Scripts | PowerShell Scripts, macOS Shell Scripts, Proactive Remediations (Health Scripts) |
|
||
| Enrollment | Autopilot Profiles, Enrollment Status Page, Enrollment Limits, Platform Restrictions, Enrollment Notifications, Enrollment Restrictions, Terms & Conditions |
|
||
| Endpoint Security | Endpoint Security Intents, Endpoint Security Policies, Security Baselines |
|
||
|
||
**Foundation-Typen (3):**
|
||
Assignment Filters, Scope Tags, Notification Message Templates
|
||
|
||
**Entra ID — Teilweise:**
|
||
|
||
| Bereich | Status | Details |
|
||
|---------|--------|---------|
|
||
| Conditional Access Policies | ✅ Backup, Inventory, Versioning | Restore ist `preview-only` (bewusste Entscheidung wegen Risiko) |
|
||
| Entra Admin Roles | ✅ Evidence & Findings | Rolendefinitionen, Assignments, Severity-Klassifizierung, Finding-Generierung, Alerts |
|
||
| Entra Groups | ✅ Directory Cache | Read-only Sync für Group-Name-Resolution |
|
||
| Service Principals | ✅ Probing | RBAC-Onboarding-Validierung |
|
||
|
||
### 2.2 Schwerpunkt
|
||
|
||
Der klare Schwerpunkt liegt auf **Intune Endpoint Management**. Alle Intune-Policy-Familien haben:
|
||
- Graph Contract Definitionen mit Select/Expand/TypeFamily
|
||
- Assignment CRUD Paths
|
||
- Backup/Restore-Unterstützung
|
||
- Inventory Integration
|
||
- Drift Detection (über Baselines/Snapshots)
|
||
|
||
### 2.3 Erkennbare Lücken
|
||
|
||
| Domäne | Gap-Einschätzung |
|
||
|--------|-----------------|
|
||
| Entra ID (Identity) | Nur CA + Admin Roles; Named Locations, Auth Methods, Auth Strengths, Cross-Tenant Access, Authorization Policy, Security Defaults fehlen komplett |
|
||
| SharePoint / OneDrive | Keine Unterstützung |
|
||
| Exchange Online | Keine Unterstützung |
|
||
| Defender for Office 365 | Keine Unterstützung |
|
||
| Purview / DLP | Keine Unterstützung |
|
||
| Intune Policy Sets | Im Repo als Spec (025), aber nicht im `supported_policy_types` |
|
||
| Intune Device Categories | Im Repo als Spec (028), aber nicht im `supported_policy_types` |
|
||
|
||
### 2.4 Im Repo vorbereitet, aber nicht vollständig produktisiert
|
||
|
||
| Element | Status |
|
||
|---------|--------|
|
||
| `conditionalAccessPolicy` | Graph Contract vollständig definiert, aber Restore auf `preview-only` limitiert |
|
||
| Policy Sets (Spec 025) | Spec vorhanden, keine Implementation |
|
||
| Device Categories (Spec 028) | Spec vorhanden, keine Implementation |
|
||
| WIP Policies (Spec 029) | Spec vorhanden, keine Implementation — EOL-Thema, geringe Priorität |
|
||
| Intune RBAC Backup (Spec 030) | Spec vorhanden — Role Definitions/Assignments unter `deviceManagement/` |
|
||
| Cross-Tenant Compare (Spec 043) | Architektur-Spec vorhanden, Implementation läuft |
|
||
|
||
---
|
||
|
||
## 3. Coverage & Gap Matrix
|
||
|
||
### 3.1 Entra ID / Identity & Access
|
||
|
||
| Policy Domain | Policy Family | API / Management Path | Access Channel | Coverage | MSP Value | Governance Relevance | Feasibility | Maturity | SKU Notes | Recommendation | Notes |
|
||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
||
| Entra ID | **Conditional Access Policies** | `identity/conditionalAccess/policies` | Graph v1.0 | **Partial** (Backup+Inventory, no full restore) | High | High | Easy | Production | P1/P2 required | **Now** | Restore-Ausbau ist bewusste Risikoentscheidung; Read/Backup/Versioning ist produktiv |
|
||
| Entra ID | **Named Locations** | `identity/conditionalAccess/namedLocations` | Graph v1.0 | **No** | High | High | Easy | Production | P1/P2 | **Now** | Direkte Abhängigkeit von CA Policies; MSPs brauchen dies für Baseline-Vergleiche. CRUD über Graph v1.0 vollständig. |
|
||
| Entra ID | **Authentication Methods Policy** | `policies/authenticationMethodsPolicy` | Graph v1.0 | **No** | High | High | Easy | Production | Alle SKUs (Basis); einige Methods P1/P2 | **Now** | Tenant-weite Konfiguration (FIDO2, Authenticator, SMS, etc.). Zentrales Audit-Thema für MSPs. Singleton-Resource. |
|
||
| Entra ID | **Authentication Strengths** | `policies/authenticationStrengths/policies` | Graph v1.0 | **No** | High | High | Easy | Production | P1/P2 (CA dependency) | **Now** | Custom Auth Strength Definitions für CA. Graph v1.0 GA. MSP-Baseline-Essential. |
|
||
| Entra ID | **Cross-Tenant Access Settings** | `policies/crossTenantAccessPolicy` | Graph v1.0 | **No** | High | High | Moderate | Production | P1/P2 (B2B) | **Next** | Partner/Default/Inbound/Outbound Settings. Komplexere Struktur (Sub-Resources), aber über Graph v1.0 GA. Kritisch für B2B-Governance. |
|
||
| Entra ID | **Authorization Policy** | `policies/authorizationPolicy` | Graph v1.0 | **No** | Medium | High | Easy | Production | Alle SKUs | **Next** | Singleton: steuert Guest Invite, Self-Service Sign-up, User Consent, etc. Einfache Integration, hoher Audit-Wert. |
|
||
| Entra ID | **Security Defaults** | `policies/identitySecurityDefaultsEnforcementPolicy` | Graph v1.0 | **No** | Medium | High | Easy | Production | Alle SKUs | **Next** | Singleton: ein Boolean + Metadata. Triviale Integration. Wichtig als Posture-Signal (an/aus). |
|
||
| Entra ID | **Admin Consent Request Policy** | `policies/adminConsentRequestPolicy` | Graph v1.0 | **No** | Medium | Medium | Easy | Production | Alle SKUs | **Next** | App Consent Workflow Settings. Simple Singleton. |
|
||
| Entra ID | **Permission Grant Policies** | `policies/permissionGrantPolicies` | Graph v1.0 | **No** | Medium | Medium | Moderate | Production | Alle SKUs | **Later** | Steuert welche Permissions User/Admins auto-consenten dürfen. Relevant, aber Nischen-Audit. |
|
||
| Entra ID | **Conditional Access Templates** | `identity/conditionalAccess/templates` | Graph beta | **No** | Low | Medium | Hard | Beta | P1/P2 | **Roadmap** | Beta-only. Eher Reference-Daten als konfigurierbare Policies. |
|
||
| Entra ID | **Identity Protection Policies** | `identityProtection/` | Graph v1.0 (read) / beta (write) | **No** | Medium | High | Hard | Mixed | P2 required | **Later** | Risk-based CA (User/Sign-In Risk). Lesen über v1.0, Konfiguration nur beta. SKU-abhängig (P2). |
|
||
| Entra ID | **Entra Admin Roles** (Evidence) | `roleManagement/directory/roleDefinitions` + `roleAssignments` | Graph v1.0 | **Yes** | High | High | — | Production | — | — | Bereits implementiert als Findings + Alerts |
|
||
| Entra ID | **Directory Groups** (Cache) | `groups` | Graph v1.0 | **Yes** | Medium | Medium | — | Production | — | — | Read-only Cache für Name-Resolution |
|
||
|
||
### 3.2 SharePoint / OneDrive
|
||
|
||
| Policy Domain | Policy Family | API / Management Path | Access Channel | Coverage | MSP Value | Governance Relevance | Feasibility | Maturity | SKU Notes | Recommendation | Notes |
|
||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
||
| SharePoint | **Tenant Sharing Settings** | `admin/sharepoint/settings` | Graph v1.0 | **No** | High | High | Easy | Production | SPO License | **Now** | External Sharing Level, Guest Access Domains, Link Defaults. Häufigster SPO-Audit-Punkt. Singleton-Resource über Graph v1.0. |
|
||
| SharePoint | **Site Creation Settings** | `admin/sharepoint/settings` (Teil von Tenant Settings) | Graph v1.0 | **No** | Low | Low | Easy | Production | SPO License | **Later** | Enthalten in demselben Endpoint wie Sharing Settings, aber geringerer Governance-Wert. |
|
||
| OneDrive | **OneDrive Storage Settings** | `admin/sharepoint/settings` (Subset) | Graph v1.0 | **No** | Low | Low | Easy | Production | ODB License | **Roadmap** | Default Storage Limits, Sync Restrictions. Limitierter Audit-Wert. |
|
||
|
||
### 3.3 Exchange Online
|
||
|
||
| Policy Domain | Policy Family | API / Management Path | Access Channel | Coverage | MSP Value | Governance Relevance | Feasibility | Maturity | SKU Notes | Recommendation | Notes |
|
||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
||
| Exchange | **Anti-Phishing Policy** | EXO PowerShell: `Get-AntiPhishPolicy` | **Non-Graph (PowerShell)** | **No** | High | High | Hard | Production (PS) | EOP / Defender P1 | **Later** | Kein Graph-Endpoint. Erfordert EXO V3 Remote-PowerShell oder REST-basierte EXO V3 Cmdlets. Fachlich sehr wichtig, technisch aufwändig für SaaS-Produkt. |
|
||
| Exchange | **Safe Links Policy** | EXO PowerShell: `Get-SafeLinksPolicy` | **Non-Graph (PowerShell)** | **No** | High | High | Hard | Production (PS) | Defender P1/P2 | **Later** | Gleiche Situation wie Anti-Phishing. Kein Graph-Endpoint. Kritische Security-Baseline. |
|
||
| Exchange | **Safe Attachments Policy** | EXO PowerShell: `Get-SafeAttachmentPolicy` | **Non-Graph (PowerShell)** | **No** | High | High | Hard | Production (PS) | Defender P1/P2 | **Later** | Gleiche Situation. Kein Graph. |
|
||
| Exchange | **Anti-Spam Policy** | EXO PowerShell: `Get-HostedContentFilterPolicy` | **Non-Graph (PowerShell)** | **No** | Medium | High | Hard | Production (PS) | EOP (alle SKUs) | **Later** | Guter Audit-Wert, aber PowerShell-Only. |
|
||
| Exchange | **DKIM Settings** | EXO PowerShell: `Get-DkimSigningConfig` | **Non-Graph (PowerShell)** | **No** | Medium | High | Hard | Production (PS) | Alle SKUs | **Roadmap** | Email-Authentifizierung. PowerShell-Only. |
|
||
| Exchange | **Transport Rules** | EXO PowerShell: `Get-TransportRule`; teilweise `security/rules` beta | **Non-Graph (PowerShell)** / Graph beta partial | **No** | Medium | Medium | Hard | Mixed | Alle SKUs | **Roadmap** | Komplexe Objekte. PowerShell primär. Beta-Graph sehr limitiert. |
|
||
| Exchange | **Remote Domains** | EXO PowerShell | **Non-Graph (PowerShell)** | **No** | Low | Medium | Hard | Production (PS) | Alle SKUs | **Roadmap** | Nischen-Governance. |
|
||
| Exchange | **OWA Mailbox Policy** | EXO PowerShell | **Non-Graph (PowerShell)** | **No** | Low | Low | Hard | Production (PS) | Alle SKUs | **Roadmap** | Geringer Baseline-Wert. |
|
||
|
||
### 3.4 Microsoft Defender for Office 365 / XDR
|
||
|
||
| Policy Domain | Policy Family | API / Management Path | Access Channel | Coverage | MSP Value | Governance Relevance | Feasibility | Maturity | SKU Notes | Recommendation | Notes |
|
||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
||
| Defender | **Preset Security Policies** | EXO PowerShell: `Get-*Policy` + Portal | **Non-Graph (PowerShell + Portal)** | **No** | High | High | Hard | Indirect | Defender P1/P2 | **Roadmap** | Microsoft's empfohlene Baseline. Keine Graph-API. Nur über PS + Security Portal steuerbar. |
|
||
| Defender | **Attack Simulation Training Config** | `security/attackSimulation/` | Graph beta | **No** | Low | Medium | Hard | Beta | Defender P2 | **Roadmap** | Nur Simulation-Runs über beta-API erreichbar, nicht die Konfiguration. |
|
||
| Defender | **Quarantine Policies** | EXO PowerShell: `Get-QuarantinePolicy` | **Non-Graph (PowerShell)** | **No** | Low | Medium | Hard | Production (PS) | EOP | **Roadmap** | Nischen-Governance. |
|
||
|
||
### 3.5 Intune – Noch fehlende / teilweise fehlende Typen
|
||
|
||
| Policy Domain | Policy Family | API / Management Path | Access Channel | Coverage | MSP Value | Governance Relevance | Feasibility | Maturity | SKU Notes | Recommendation | Notes |
|
||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
||
| Intune | **Policy Sets** | `deviceAppManagement/policySets` | Graph beta | **No** (Spec 025 exists) | Medium | Medium | Moderate | Beta | Intune P1 | **Next** | Spec vorhanden. Beta-API. Nützlich für Gruppierung, aber nicht Kern-Security. |
|
||
| Intune | **Device Categories** | `deviceManagement/deviceCategories` | Graph v1.0 | **No** (Spec 028 exists) | Low | Low | Easy | Production | Intune P1 | **Later** | Einfache Integration, aber geringer Governance-Wert. |
|
||
| Intune | **Intune RBAC** (Role Definitions/Assignments) | `deviceManagement/roleDefinitions` + `roleAssignments` | Graph v1.0 | **No** (Spec 030 exists) | Medium | High | Moderate | Production | Intune P1 | **Next** | Bereits als Graph Contract definiert (`rbacRoleAssignment`). Spec vorhanden. Wichtig für Governance. |
|
||
| Intune | **Apple VPP Tokens** | `deviceAppManagement/vppTokens` | Graph beta | **No** | Low | Low | Moderate | Beta | Intune P1 + Apple VPP | **Roadmap** | Operational, nicht Security-relevant. |
|
||
| Intune | **DEP Profiles (Apple)** | `deviceManagement/depOnboardingSettings` | Graph beta | **No** | Medium | Medium | Moderate | Beta | Intune P1 + Apple DEP | **Later** | Relevant für Apple-heavy MSPs. Beta. |
|
||
| Intune | **Windows Feature Update Expedite** | `deviceManagement/windowsQualityUpdatePolicies` | Graph beta | **No** | Medium | Medium | Moderate | Beta | Intune P1 | **Later** | Neuer Update-Typ. Beta. Eigenständige Policy. |
|
||
|
||
### 3.6 Purview / Information Governance (Optional)
|
||
|
||
| Policy Domain | Policy Family | API / Management Path | Access Channel | Coverage | MSP Value | Governance Relevance | Feasibility | Maturity | SKU Notes | Recommendation | Notes |
|
||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
||
| Purview | **Sensitivity Labels** | `security/informationProtection/sensitivityLabels` | Graph v1.0 (read) / beta (full) | **No** | Medium | High | Hard | Mixed | M365 E3/E5 | **Roadmap** | Lesen über v1.0. Aber Labels + Publishing Policies sind komplex. Enterprise-Feature, selten in MSP-Baselines. |
|
||
| Purview | **DLP Policies** | Security & Compliance PowerShell / `security/` beta | **Non-Graph (PowerShell)** / Graph beta partial | **No** | Low | Medium | Hard | Beta/Indirect | M365 E3/E5/Compliance Add-on | **Roadmap** | Kein stabiler Graph-Kanal. Enterprise-only. Nicht MSP-Baseline-tauglich. |
|
||
| Purview | **Retention Policies** | `security/` beta; PowerShell primary | **Non-Graph (PowerShell)** / Graph beta partial | **No** | Low | Medium | Hard | Beta/Indirect | M365 E3/E5 | **Roadmap** | Ähnliches Problem wie DLP. |
|
||
|
||
---
|
||
|
||
## 4. Top Missing High-Value Gaps
|
||
|
||
Die folgenden 10 Lücken bieten den größten kombinierten Wert aus MSP-Relevanz, Audit-Wichtigkeit und technischer Umsetzbarkeit:
|
||
|
||
### Rang 1: Entra ID – Named Locations
|
||
- **Warum:** Direkte Abhängigkeit von CA Policies. Jeder CA-Baseline-Vergleich ist ohne Named Locations unvollständig. `identity/conditionalAccess/namedLocations` ist Graph v1.0 GA mit vollem CRUD.
|
||
- **Aufwand:** Gering. Gleicher Pattern wie CA Policies.
|
||
|
||
### Rang 2: Entra ID – Authentication Methods Policy
|
||
- **Warum:** Tenant-weite Steuerung von MFA-Methoden (FIDO2, Authenticator, SMS, Temporary Access Pass). Top-Audit-Thema. `policies/authenticationMethodsPolicy` ist ein Singleton über Graph v1.0.
|
||
- **Aufwand:** Gering. Einzelne Resource mit Sub-Configurations pro Method.
|
||
|
||
### Rang 3: SharePoint – Tenant Sharing Settings
|
||
- **Warum:** External Sharing Level, Guest Access Domain Allow/Block, Default Link Type. Häufigster SharePoint-Audit-Punkt. `admin/sharepoint/settings` ist Graph v1.0 GA.
|
||
- **Aufwand:** Gering. Singleton-Resource.
|
||
|
||
### Rang 4: Entra ID – Authentication Strengths
|
||
- **Warum:** Custom Authentication Strength Policies für CA. Definiert erlaubte MFA-Kombinationen. `policies/authenticationStrengths/policies` ist Graph v1.0 GA.
|
||
- **Aufwand:** Gering. Collection mit einfacher Struktur.
|
||
|
||
### Rang 5: Entra ID – Cross-Tenant Access Settings
|
||
- **Warum:** B2B Inbound/Outbound Policies, Default Settings, Partner Configurations. Kritisch für MSP-Governance bei Multi-Tenant-Umgebungen. Graph v1.0 GA.
|
||
- **Aufwand:** Moderat. Verschachtelte Struktur (Default + N Partner-Configs mit je Inbound/Outbound/Trust).
|
||
|
||
### Rang 6: Entra ID – Authorization Policy
|
||
- **Warum:** Steuert grundlegende Tenant-Einstellungen: Wer darf Guests einladen, Self-Service Sign-up, User Consent Flow. `policies/authorizationPolicy` ist Graph v1.0 GA. Singleton.
|
||
- **Aufwand:** Gering. Ein Objekt.
|
||
|
||
### Rang 7: Entra ID – Security Defaults Policy
|
||
- **Warum:** Ein Boolean (+ Metadata) das bestimmt ob Security Defaults aktiviert sind. Trivialer Check, aber kritisches Posture-Signal: Ein Tenant mit Security Defaults OFF und ohne CA ist ein Red Flag.
|
||
- **Aufwand:** Trivial. Ein GET-Request.
|
||
|
||
### Rang 8: Intune – RBAC Role Definitions & Assignments
|
||
- **Warum:** Intune RBAC Backup/Governance. Wer hat welche Rechte im Intune-Kontext? Graph Contract bereits definiert. Spec 030 existiert.
|
||
- **Aufwand:** Moderat. Graph Contract Grundstruktur vorhanden.
|
||
|
||
### Rang 9: Entra ID – Admin Consent Request Policy
|
||
- **Warum:** App Consent Workflow Settings. Einfaches Singleton. Audit-relevant (wer darf Apps genehmigen?).
|
||
- **Aufwand:** Gering.
|
||
|
||
### Rang 10: Conditional Access – Restore-Ausbau
|
||
- **Warum:** CA Backup ist produktiv, Restore ist `preview-only`. Full Restore (mit Safeguards wie reportOnly-Modus, Dry-Run Validation) würde den CA-Workflow komplett machen.
|
||
- **Aufwand:** Moderat. Risiko-Management ist die eigentliche Herausforderung, nicht die API.
|
||
|
||
---
|
||
|
||
## 5. Not Sensible Before Launch
|
||
|
||
Die folgenden Kandidaten sind fachlich relevant, aber aktuell **nicht sinnvoll für die unmittelbare Umsetzung**:
|
||
|
||
### Exchange Online Anti-Phishing / Safe Links / Safe Attachments
|
||
- **Warum nicht:** Kein Graph-Endpoint. Erfordert Exchange Online PowerShell V3 (REST-based) Integration. Das bedeutet: separater Auth-Flow (Certificate-Based Auth für EXO), separater Management-Kanal, separates Rate-Limit-Handling. Die technische Architektur von TenantPilot (Graph-Contract-basiert) müsste fundamental erweitert werden.
|
||
- **Status:** Wichtig, aber aktuell schlecht integrierbar. Eher Roadmap-/Marketing-Signal.
|
||
|
||
### Microsoft Defender Preset Security Policies
|
||
- **Warum nicht:** Gleiche EXO-PowerShell-Abhängigkeit. Zusätzlich: Preset Security Policies sind ein Microsoft-eigenes Baseline-Konzept — die sinnvolle Governance-Integration erfordert Verständnis des Tiering-Modells (Standard/Strict).
|
||
- **Status:** Roadmap only.
|
||
|
||
### Purview DLP / Retention Policies
|
||
- **Warum nicht:** Kein stabiler Graph-Kanal. Erfordert Security & Compliance PowerShell. SKU-abhängig (E3/E5). MSPs nutzen DLP seltener als Enterprise-Kunden. ROI für TenantPilot ist gering.
|
||
- **Status:** Roadmap only (ggf. Enterprise-Tier).
|
||
|
||
### Identity Protection Policies (Risk-Based CA)
|
||
- **Warum nicht:** Lesen über Graph v1.0 möglich, aber Konfiguration nur über beta. Harte P2-SKU-Abhängigkeit. MSPs mit M365 BP (Business Premium) haben kein P2.
|
||
- **Status:** Later / Roadmap.
|
||
|
||
### Intune Policy Sets (beta API)
|
||
- **Warum nicht:** Beta-API. Policy Sets sind ein Organisations-Feature, kein Security-Feature. Der Governance-Wert (welche Policies gehören zusammen?) ist nice-to-have, nicht must-have.
|
||
- **Status:** Next (nach Stabilisierung der beta-API).
|
||
|
||
### Sensitivity Labels
|
||
- **Warum nicht:** Read-API ist v1.0, aber die vollständige Konfiguration (Label Policies, Auto-Labeling, Publishing) erfordert beta oder S&C PowerShell. Enterprise-Feature. Rare im MSP-Baseline-Kontext.
|
||
- **Status:** Roadmap only.
|
||
|
||
---
|
||
|
||
## 6. UTCM Roadmap Signals
|
||
|
||
### Was ist UTCM?
|
||
|
||
**Unified Tenant Configuration Management** (Codename: Microsoft 365 Backup & Configuration Management) ist Microsofts Ansatz, Konfigurationen über alle M365-Workloads hinweg einheitlich zu adressieren. Stand März 2026:
|
||
|
||
### Strategisch interessante Signale
|
||
|
||
| Signal | Bedeutung für TenantPilot | Zeitrahmen |
|
||
|--------|--------------------------|------------|
|
||
| **UTCM Configuration Profiles API** (Preview) | Einheitliches Read/Write/Diff für SPO, EXO, Teams, Defender Settings über Graph | Beobachten. Preview seit Mitte 2025. Keine GA-Timeline bekannt. |
|
||
| **M365 Backup API** (`solutions/backupRestore/`) | Graph v1.0 GA für SPO/ODB/EXO **Data** Backup. Nicht für Konfiguration. | **Nicht relevant** für TenantPilot (Data Backup ≠ Config Governance). |
|
||
| **Multi-Tenant Management APIs** (`tenantRelationships/managedTenants/`) | Read-only Aggregation über MSP-Managed Tenants. Baselines, Alerts, Compliance Trends. | **Beobachten.** Überschneidung mit TenantPilot's eigenem Multi-Tenant-Modell. Könnte als Datenquelle nützlich sein. |
|
||
| **UTCM Drift Detection** | Microsoft's eigene Drift Detection für M365 Config. Aktuell sehr begrenzt (nur wenige Workloads). | **Langfristiges Wettbewerbsrisiko.** TenantPilot's Drift Engine ist deutlich umfangreicher. |
|
||
|
||
### Bewertung
|
||
|
||
UTCM ist heute ein **Beobachtungssignal**, kein Umsetzungsziel:
|
||
- Die Preview-APIs sind instabil und haben sehr begrenzten Workload-Scope
|
||
- Microsoft's eigene Roadmap zeigt keine klare GA-Timeline
|
||
- TenantPilot sollte UTCM als **langfristigen Integrationspartner** betrachten, nicht als kurzfristiges Feature-Ziel
|
||
- Die Strategie sollte sein: Graph v1.0 APIs zuerst, UTCM als Beschleuniger wenn GA
|
||
|
||
---
|
||
|
||
## 7. Recommended Product Sequencing
|
||
|
||
### Now (Q2 2026 – unmittelbar umsetzbar, hoher ROI)
|
||
|
||
| # | Kandidat | Begründung |
|
||
|---|----------|-----------|
|
||
| 1 | **Entra: Named Locations** | CA-Abhängigkeit, Graph v1.0, triviales Pattern |
|
||
| 2 | **Entra: Authentication Methods Policy** | Top-Audit-Thema, Graph v1.0, Singleton |
|
||
| 3 | **SharePoint: Tenant Sharing Settings** | Häufigster SPO-Audit-Punkt, Graph v1.0, Singleton |
|
||
| 4 | **Entra: Authentication Strengths** | CA-Dependency, Graph v1.0, einfach |
|
||
| 5 | **Entra: Security Defaults** | Trivial (1 Boolean), aber kritisches Posture-Signal |
|
||
|
||
*Alle 5 Kandidaten nutzen ausschließlich Graph v1.0 Stable-APIs und erfordern keinen neuen Integrationskanal.*
|
||
|
||
### Next (Q3-Q4 2026 – moderater Aufwand, solider Wert)
|
||
|
||
| # | Kandidat | Begründung |
|
||
|---|----------|-----------|
|
||
| 6 | **Entra: Cross-Tenant Access Settings** | B2B-Governance, Graph v1.0, aber verschachtelte Struktur |
|
||
| 7 | **Entra: Authorization Policy** | Tenant-Grundkonfiguration, Graph v1.0, Singleton |
|
||
| 8 | **Intune: RBAC Role Definitions/Assignments** | Spec 030 vorhanden, Graph Contract existiert, Governance-Must |
|
||
| 9 | **Entra: Admin Consent Request Policy** | Einfach, Graph v1.0, App-Consent-Governance |
|
||
| 10 | **Conditional Access: Full Restore** | Backup existiert; Restore-Workflow mit Safety-Guardrails ausbauen |
|
||
|
||
### Later (2027 H1 – requires architecture investment or beta stabilization)
|
||
|
||
| # | Kandidat | Begründung |
|
||
|---|----------|-----------|
|
||
| 11 | **Entra: Permission Grant Policies** | Graph v1.0, aber Nischen-Thema |
|
||
| 12 | **Entra: Identity Protection Policies** | SKU-abhängig (P2), Write nur beta |
|
||
| 13 | **Intune: Policy Sets** | Beta API, nice-to-have Governance |
|
||
| 14 | **Intune: DEP Profiles (Apple)** | Beta, Apple-spezifisch |
|
||
| 15 | **Exchange: Anti-Phishing/Safe Links/Safe Attachments** | Erfordert EXO PowerShell-Kanal — architektonische Erweiterung |
|
||
|
||
### Roadmap Only (strategisch, nicht kurzfristig)
|
||
|
||
| Kandidat | Begründung |
|
||
|----------|-----------|
|
||
| **UTCM Integration** | Preview, keine GA-Timeline |
|
||
| **Defender Preset Security Policies** | PowerShell-Only, komplexes Tiering |
|
||
| **Purview DLP / Retention** | PowerShell + beta, Enterprise-SKU, geringer MSP-ROI |
|
||
| **Sensitivity Labels (Full)** | Mixed API, Enterprise-Feature |
|
||
| **Exchange Transport Rules** | PowerShell primary, komplexe Objekte |
|
||
| **Multi-Tenant Management API** | Read-only Aggregation, Überschneidung mit eigenem Modell |
|
||
|
||
---
|
||
|
||
## 8. Sources
|
||
|
||
### Microsoft Graph API Documentation (v1.0)
|
||
- [Conditional Access Policies](https://learn.microsoft.com/en-us/graph/api/resources/conditionalaccesspolicy?view=graph-rest-1.0)
|
||
- [Named Locations](https://learn.microsoft.com/en-us/graph/api/resources/namedlocation?view=graph-rest-1.0)
|
||
- [Authentication Methods Policy](https://learn.microsoft.com/en-us/graph/api/resources/authenticationmethodspolicy?view=graph-rest-1.0)
|
||
- [Authentication Strength Policy](https://learn.microsoft.com/en-us/graph/api/resources/authenticationstrengthpolicy?view=graph-rest-1.0)
|
||
- [Cross-Tenant Access Policy](https://learn.microsoft.com/en-us/graph/api/resources/crosstenantaccesspolicy-overview?view=graph-rest-1.0)
|
||
- [Authorization Policy](https://learn.microsoft.com/en-us/graph/api/resources/authorizationpolicy?view=graph-rest-1.0)
|
||
- [Identity Security Defaults](https://learn.microsoft.com/en-us/graph/api/resources/identitysecuritydefaultsenforcementpolicy?view=graph-rest-1.0)
|
||
- [Admin Consent Request Policy](https://learn.microsoft.com/en-us/graph/api/resources/adminconsentrequestpolicy?view=graph-rest-1.0)
|
||
- [Permission Grant Policies](https://learn.microsoft.com/en-us/graph/api/resources/permissiongrantpolicy?view=graph-rest-1.0)
|
||
- [SharePoint Settings](https://learn.microsoft.com/en-us/graph/api/resources/sharepointsettings?view=graph-rest-1.0)
|
||
- [Role Management (Directory)](https://learn.microsoft.com/en-us/graph/api/resources/rolemanagement?view=graph-rest-1.0)
|
||
|
||
### Microsoft Graph API Documentation (beta)
|
||
- [Identity Protection](https://learn.microsoft.com/en-us/graph/api/resources/identityprotection-overview?view=graph-rest-beta)
|
||
- [Policy Sets (Intune)](https://learn.microsoft.com/en-us/graph/api/resources/intune-policyset-policyset?view=graph-rest-beta)
|
||
- [UTCM / Multi-Tenant Management](https://learn.microsoft.com/en-us/graph/api/resources/managedtenants-managedtenant?view=graph-rest-beta)
|
||
|
||
### Exchange Online / Defender (PowerShell)
|
||
- [EXO V3 Module](https://learn.microsoft.com/en-us/powershell/exchange/exchange-online-powershell-v2?view=exchange-ps)
|
||
- [Anti-Phishing Policies](https://learn.microsoft.com/en-us/defender-office-365/anti-phishing-policies-about)
|
||
- [Safe Links](https://learn.microsoft.com/en-us/defender-office-365/safe-links-about)
|
||
- [Safe Attachments](https://learn.microsoft.com/en-us/defender-office-365/safe-attachments-about)
|
||
- [Preset Security Policies](https://learn.microsoft.com/en-us/defender-office-365/preset-security-policies)
|
||
|
||
### Purview
|
||
- [Sensitivity Labels API](https://learn.microsoft.com/en-us/graph/api/resources/security-sensitivitylabel?view=graph-rest-1.0)
|
||
- [Data Loss Prevention (Compliance)](https://learn.microsoft.com/en-us/purview/dlp-learn-about-dlp)
|
||
|
||
### UTCM / M365 Backup
|
||
- [Microsoft 365 Backup (Data)](https://learn.microsoft.com/en-us/graph/api/resources/backuprestoreroot?view=graph-rest-1.0)
|
||
- [Multi-Tenant Management (Lighthouse)](https://learn.microsoft.com/en-us/graph/api/resources/managedtenants-managedtenant?view=graph-rest-beta)
|
||
|
||
---
|
||
|
||
## Appendix A: Architektur-Anmerkungen für die Umsetzung
|
||
|
||
### "Now"-Kandidaten folgen dem bestehenden Graph-Contract-Pattern
|
||
|
||
Alle 5 „Now"-Kandidaten können in das bestehende `config/graph_contracts.php` + `GraphContractRegistry` Muster integriert werden:
|
||
|
||
```
|
||
// Beispiel-Contract für Named Locations
|
||
'namedLocation' => [
|
||
'resource' => 'identity/conditionalAccess/namedLocations',
|
||
'allowed_select' => ['id', 'displayName', '@odata.type', 'modifiedDateTime'],
|
||
'allowed_expand' => [],
|
||
'type_family' => [
|
||
'#microsoft.graph.ipNamedLocation',
|
||
'#microsoft.graph.countryNamedLocation',
|
||
],
|
||
'create_method' => 'POST',
|
||
'update_method' => 'PATCH',
|
||
'id_field' => 'id',
|
||
'hydration' => 'properties',
|
||
],
|
||
```
|
||
|
||
### Singleton-Resources (neue Kategorie)
|
||
|
||
Authentication Methods Policy, Authorization Policy und Security Defaults sind **Singletons** (ein Objekt pro Tenant, kein Collection-CRUD). Das bestehende Pattern (Collection-basiert mit CRUD) muss um einen Singleton-Modus erweitert werden:
|
||
- GET (kein $top, kein Paging)
|
||
- PATCH (kein POST/DELETE)
|
||
- Vergleich: Vorher/Nachher eines einzelnen Objekts
|
||
|
||
### Permissions-Impact
|
||
|
||
| Kandidat | Benötigte Permission | Typ |
|
||
|----------|---------------------|-----|
|
||
| Named Locations | `Policy.Read.All` (bereits granted) | Read |
|
||
| Auth Methods Policy | `Policy.Read.All` (bereits granted) | Read |
|
||
| Auth Strengths | `Policy.Read.All` (bereits granted) | Read |
|
||
| Security Defaults | `Policy.Read.All` (bereits granted) | Read |
|
||
| SharePoint Settings | `SharePointTenantSettings.Read.All` | **Neu** |
|
||
| Cross-Tenant Access | `Policy.Read.All` (bereits granted) | Read |
|
||
| Authorization Policy | `Policy.Read.All` (bereits granted) | Read |
|
||
|
||
Bemerkenswert: **4 von 5 „Now"-Kandidaten** erfordern keine neuen Permissions — `Policy.Read.All` ist bereits in `config/intune_permissions.php` als granted definiert. Nur SharePoint benötigt eine neue Permission.
|