M365Con 2027 – die kostenlose Online-Konferenz · 11–22 Jan 2027 · 120 sessions→ m365con.net

Blog · Mirko Peters

Skalieren: Paginierung, Drosselung und Audits großer Mandanten in Microsoft 365

Von ·

Willkommen zurück im Blog! Wenn Sie eine große Microsoft-365-Umgebung verwalten, wissen Sie bereits, dass die standardmäßig verfügbaren Reporting-Tools nur an der Oberfläche kratzen…

Automatisch mit KI aus dem Originalbeitrag übersetzt. Englisches Original lesen

▶ BLOGScaling Up: ManagingPagination, Throttling,…M365.FM
Titelbild: Scaling Up: Managing Pagination, Throttling, and Large Tenant M365 Audits

Willkommen zurück im Blog! Wenn Sie eine große Microsoft-365-Umgebung verwalten, wissen Sie bereits, dass die Standardberichte aus dem Lieferumfang nur an der Oberfläche kratzen. Wenn Sicherheitsteams und Compliance-Beauftragte große Mandanten prüfen, scheitern einfache Skripte und die Ansichten im Admin Center schlicht an der Menge von Tausenden Benutzern, Gruppen und Dateien. Ein Audit großer Microsoft-365-Mandanten erfordert mehr als einfache Skripte. Es verlangt einen taktischen, programmatischen Ansatz über die Microsoft Graph API. In diesem umfassenden Leitfaden knüpfen wir direkt an unser aktuelles Gespräch in der Podcast-Folge Map Microsoft 365 Users, Groups, Files, and Shares with Graph an. Schauen wir uns genauer an, wie Sie mit @odata.nextLink-Paginierung umgehen, 429-Drosselungen mit exponentiellem Backoff berücksichtigen und typische Fallen wie den Page-1-Bias vermeiden, um volle Transparenz über den gesamten Mandanten zu erhalten.

Einführung in die Herausforderungen beim M365-Audit

Unternehmensumgebungen wachsen organisch. Benutzer kommen und gehen, Projekte legen über Nacht ganze Abteilungen an, und externe Dienstleister werden in Zusammenarbeitsbereiche eingeladen. Mit der Zeit verliert die administrative Transparenz an Schärfe. Standardmäßige Admin Center zeigen nur isolierte Ausschnitte Ihrer Infrastruktur und hinterlassen blinde Flecken, die böswillige Akteure oder unachtsame Insider ausnutzen können. Um ein wirklich vollständiges Bild Ihrer Sicherheitslage im Mandanten zu erhalten, müssen Sie von manueller Prüfung per Mausklick auf automatisierte, API-gestützte Graph-Traversierung umsteigen. Wenn Sie diese Abfragen jedoch auf Unternehmensgröße skalieren, stoßen Sie auf komplexe Hürden: riesige Datenmengen, aggressive Drosselung und tief verschachtelte Beziehungsstrukturen.

Warum Microsoft 365 nicht isoliert ist: Verständnis relationaler Zugriffe

Eine der grundlegenden Gegebenheiten von Microsoft 365 ist, dass Dienste wie SharePoint, Teams und OneDrive keine isolierten Silos sind. Sie sind über Gruppenmitgliedschaften und die zugrunde liegenden Zugriffssteuerungslisten ständig miteinander verbunden. Eine einzelne administrative Aktion, etwa das Hinzufügen eines Benutzers zu einer Sicherheitsgruppe, kann sich über Dutzende Teamwebsites, Dokumentbibliotheken und private Kanäle ausbreiten, ohne in den üblichen Ansichten eine eindeutige Spur im Audit zu hinterlassen.

Daraus entstehen versteckte Compliance-Risiken. Gastlinks, die in isolierten Chats geteilt wurden, Dateien, die in verschiedenen Teambibliotheken gespiegelt sind, und verwaiste Freigaben aus längst abgeschlossenen Projekten schaffen unsichtbare Zugangswege zu Ihren Unternehmensdaten. Der Zugriff in Microsoft 365 ist grundsätzlich relational und nicht standortbezogen. Für ein wirksames Audit müssen Sie diese kaskadierenden Beziehungen abbilden, statt jeden Dienst als eigene Insel zu betrachten.

Footprint-Mapping mit dem Graph Explorer

Bevor Sie Automatisierung im Unternehmensmaßstab schreiben, sollten Sie manuell nachvollziehen können, wie sich die Aktivitäten eines Benutzers verteilen. Der Graph Explorer eignet sich dafür gut. Wenn Sie Ihre Abfragen Schritt für Schritt aufbauen, stellen Sie sicher, dass Ihre Logik stimmt, bevor Sie die ersten Zeilen Code schreiben. Hier ist der Bauplan zur Abbildung der Berührungspunkte eines Benutzers:

  1. Am Benutzer ansetzen: Rufen Sie zuerst das zentrale Benutzerobjekt ab, etwa mit GET /v1.0/users/{userPrincipalName}?$select=id,displayName,userPrincipalName.
  2. Mitgliedschaften auflisten: Ermitteln Sie die Gruppen und Rollen, die mit dieser Identität verknüpft sind, mit GET /v1.0/users/{id}/memberOf?$select=id,displayName.
  3. Von den Gruppen zurück zu den Ressourcen wechseln: Für Microsoft 365-Gruppen und Teams gehen Sie zur zugrunde liegenden SharePoint-Website, etwa mit GET /v1.0/groups/{groupId}/drive/root/children?$select=id,name,lastModifiedDateTime,webUrl, oder Sie listen die Laufwerke der Website direkt mit GET /v1.0/sites/{siteId}/drives auf.
  4. Berechtigungen und Links von Elementen prüfen: Prüfen Sie den Zugriff auf einzelne Dateien mit GET /v1.0/drives/{driveId}/items/{itemId}/permissions?$select=id,grantedToV2,link,roles,shareId.
  5. Nachvollziehen, wer worauf zugegriffen hat: Korrelieren Sie Benutzeraktionen über Anmeldeprotokolle oder Sicherheitswarnungen, ergänzt um Datei- und Website-Kontext.
  6. Den Kreis zu Teams-Beiträgen schließen: Durchsuchen Sie Kanalnachrichten nach bestimmten Dateiverweisen mit GET /v1.0/teams/{teamId}/channels/{channelId}/messages?$search="filename". Beachten Sie dabei die Berechtigungen und Voraussetzungen der Beta-Version.

Rauschfilter, die Sie tatsächlich einsetzen werden

Eine Abfrage der Microsoft Graph API ohne Filter führt schnell dazu, dass Ihr System mit Datenfluten überfordert wird. Um echte Risiken sichtbar zu machen, brauchen Sie präzise Filterstrategien. Dies sind die Abfragemuster, die Sie einsetzen sollten:

  • Externe Freigaben der letzten 7 Tage: Filtern Sie auf anonyme oder unternehmensweite Links über GET /v1.0/drives/{driveId}/items/{itemId}/permissions?$filter=link/scope eq 'anonymous' oder link/scope eq 'organization'.
  • Nur riskante Dateitypen: Hängen Sie Filter wie $filter=endsWith(resourceReference/name,'.xlsm') oder endsWith(resourceReference/name,'.pst') an, um Makros und Archive zu erfassen.
  • Außerhalb der Geschäftszeiten erwähnte sensible Begriffe in Teams: Durchsuchen Sie Kanalnachrichten nach Begriffen wie vertraulich und filtern Sie die Ergebnisse anschließend nach Erstellungszeitstempeln außerhalb der üblichen Geschäftszeiten.
  • Nutzdaten schlank halten: Geben Sie immer $select-Parameter an, damit nur die notwendigen Kennungen, Namen, URLs und Zeitstempel zurückgegeben werden.
  • Obergrenze für die Triage: Verwenden Sie $top=50 für schnelle Stichproben, entfernen Sie diesen Parameter jedoch, wenn Sie vollständige Exporte in Ihren Datenspeicher ausführen.

Musts für Unternehmensmaßstäbe: Paginierung und Drosselung

Wenn Sie Audits über einen Mandanten mit Hunderttausenden Objekten ausführen, stoßen Ihre Skripte an Grenzen, sofern sie API-Limits und Paginierung nicht berücksichtigen. Sie sind erst fertig mit dem Abrufen von Daten, wenn Sie der @odata.nextLink-Eigenschaft für jede einzelne von der API zurückgegebene Seite folgen. Ignorieren Sie dies, erfassen Ihre Skripte nur die erste Charge an Ergebnissen und übersehen den Rest Ihres Mandanten vollständig.

Außerdem müssen Sie HTTP-429-Antworten zur Ratenbegrenzung beachten. Implementieren Sie eine robuste Logik für exponentielles Backoff, damit Ihr Skript pausiert, die Abkühlphase abwartet und nahtlos dort fortfährt, wo es aufgehört hat. Bündeln Sie Ihre Anfragen gezielt: Bevorzugen Sie wenige, dafür größere logische Anfragen und speichern Sie Gruppen-zu-Website-Zuordnungen zwischen. Bei großen Mandanten partitionieren Sie Ihre Crawls nach Website oder Zeitraum und planen Sie sie außerhalb der Hauptlastzeiten, um die Produktionsleistung nicht zu beeinträchtigen.

Häufige Fallstricke und schnelle Lösungen

Selbst erfahrene Administratoren stoßen beim Skalieren von M365-Audits auf Hindernisse. Hier sind die häufigsten Fallstricke und wie Sie sie beheben:

  • Fallstrick: CSV-Exporte driften mit der Zeit auseinander, wenn sich Schemas ändern. Lösung: Verwenden Sie die Graph API direkt mit versionierten Transformationen und behandeln Sie unbekannte Felder robust.
  • Fallstrick: Gemischte Kennungen wie GUIDs und User Principal Names unterbrechen Datenbankverknüpfungen. Lösung: Normalisieren Sie alles in ein sauberes semantisches Modell mit Benutzern, Gruppen, Websites, Laufwerken, Elementen und Berechtigungen.
  • Fallstrick: Eine Verzerrung auf Seite 1 verbirgt den Großteil der Sicherheitsvorfälle, die tiefer in den Ergebnismengen liegen. Lösung: Protokollieren Sie stets die Gesamtzahl der verarbeiteten Seiten und richten Sie Warnungen ein, falls das erwartete Datenvolumen plötzlich sinkt.
  • Fallstrick: Eine Flut irrelevanter Dateien belastet die Verarbeitungsengines. Lösung: Wenden Sie strikte Filter für Freigabebereiche, Zeitfenster und Listen sensibler Begriffe an.
  • Fallstrick: Teams-Freigaben sind von den zugrunde liegenden Dateien getrennt. Lösung: Verknüpfen Sie die Web-URLs der Kanalnachrichten direkt mit Laufwerkselementen und speichern Sie beide Kennungen gemeinsam.

Management-KPIs, die sich damit erschließen

Technische Daten sind nur dann wertvoll, wenn Sie sie für die Führungsebene in verwertbare Business Intelligence übersetzen können. Eine automatisierte Graph-Audit-Pipeline erschließt leistungsstarke Management-KPIs:

  • Dynamik externer Freigaben: Messen Sie die pro Woche neu erstellten Gastlinks, aufgeschlüsselt nach Website und Team.
  • Berührungsrate sensibler Dateien: Verfolgen Sie eindeutige Betrachter von Inhalten mit Vertraulichkeitsbezeichnung und unterscheiden Sie dabei interne Benutzer von externen Gästen.
  • Gruppen-Folgerisiko: Messen Sie Dateien, die innerhalb von 24 Stunden nach größeren Änderungen der Gruppenmitgliedschaften neu zugänglich werden.
  • Schatten-Weitergabe: Überwachen Sie sensible Dateien, die innerhalb eines einzigen Sprints in mehreren Teams oder Websites auftauchen.
  • Wirksamkeit der Bereinigung: Verfolgen Sie die Anzahl widerrufener Links und die Zeit bis zur Behebung über die Zeit hinweg.

Schnellstart-Abfragerezept

Wenn Sie bereit sind, Ihre eigene Erfassungspipeline aufzubauen, nutzen Sie diesen Ablauf zum Kopieren und Einfügen, um loszulegen:

  1. Rufen Sie Benutzerkerndaten und Mitgliedschaften ab: /users/{upn}?$select=id,displayName und /users/{id}/memberOf?$select=id,displayName.
  2. Listen Sie für jede M365-Gruppe die Laufwerkselemente auf: /groups/{groupId}/drive/root/children?$select=id,name,webUrl,lastModifiedDateTime&$top=200. Achten Sie dabei darauf, @odata.nextLink zu folgen.
  3. Rufen Sie für jedes Element die Berechtigungen ab: /drives/{driveId}/items/{itemId}/permissions?$select=id,roles,grantedToV2,link, und filtern Sie nach anonymen oder organisationsweiten Bereichen.
  4. Exportieren Sie Zeilen in Ihren vorgesehenen Datenspeicher und erfassen Sie Mandantenzeit, Website-IDs, Laufwerks-IDs, Element-IDs, Web-URLs, Eigentümer, Bereiche und Ablaufdetails.
  5. Visualisieren Sie Ihre normalisierten Daten in Power BI für Management- und Betriebsdashboards.

So wird daraus ein lebendiges Dashboard

Ein einmaliger Audit ist eine Momentaufnahme, ein kontinuierlich durchgeführter Audit ist ein Sicherheitsprogramm. Damit Sie aus rohen Graph-Aufrufen ein lebendiges Dashboard machen, speisen Sie Ihre Daten über Power Dataflows in normalisierte Tabellen für Users, Groups, Sites, Drives, Items, Permissions und Messages ein. Modellieren Sie Ihre Daten als Sternschema mit Items im Zentrum und sauberen Beziehungen zu Users und Groups.

Konfigurieren Sie inkrementelle Aktualisierungen auf Basis der Felder lastModifiedDateTime und führen Sie für Websites mit hohem Risiko Aktualisierungen innerhalb des Tages aus. Richten Sie abschließend automatisierte Warnungen ein, die auslösen, sobald neue externe Links auf gekennzeichneten Inhalten auftauchen oder Group-Ripple-Spitzen auf eine unberechtigte Ausweitung von Zugriffen hindeuten.

30-Tage-Rollout-Plan

Rom wurde auch nicht an einem Tag erbaut, und ein unternehmensweites Audit-Framework braucht eine sorgfältige Vorbereitung. Folgen Sie diesem 30-Tage-Rollout-Plan, damit die Bereitstellung reibungslos verläuft:

Woche 1: Richten Sie Ihre Azure-App-Registrierung ein, weisen Sie Graph-API-Berechtigungen mit minimalen Rechten zu und erstellen Sie Ihre ersten Basisabfragen mit den Parametern $select und $filter.

Woche 2: Entwickeln Sie Ihre Paginierungsskripte, normalisieren Sie Bezeichner zu einheitlichen UPNs und Gerätenamen und führen Sie Ihren ersten erfolgreichen End-to-End-Datenexport durch.

Woche 3: Erstellen Sie Ihr Power BI-Datenmodell und konfigurieren Sie Kennzahlen wie externe Freigaben, Ripple-Risiko und die Zeiträume von der Verweildauer bis zum Widerruf.

Woche 4: Automatisieren Sie die Datenaktualisierungen, implementieren Sie Warnungen bei Anomalien und dokumentieren Sie Standardarbeitsanweisungen für Ihr Team, das Sicherheitsuntersuchungen durchführt.

Für wen dieses Thema relevant ist

Dieses Framework richtet sich speziell an M365-Administratoren und SecOps-Verantwortliche, die vermuten, dass sich hinter grünen Dashboards graue Bereiche verbergen, an Compliance-Teams, die eine durchgängige Sicht auf Freigaben ohne eine Vielzahl von Drittanbieter-Tools benötigen, sowie an Verantwortliche für die Zusammenarbeit, die für sichere externe Freigabepraktiken zuständig sind.

Praxistipps

Wenn Sie diese Skripte in der Praxis einsetzen, beachten Sie diese kurzen Tipps: Beginnen Sie Ihre Untersuchungen immer entweder beim Benutzer oder bei der Datei und prüfen Sie dann in beide Richtungen, um blinde Flecken auszuschließen. Behandeln Sie jedes Hinzufügen zu einer Gruppe als Änderung mit hohem Risiko und prüfen Sie die nachgelagerten Zugriffe innerhalb von 24 Stunden. Pflegen Sie eine laufend aktualisierte Liste sensibler Begriffe, nach denen Sie in Dateinamen und Teams-Nachrichten suchen. Protokollieren Sie schließlich Ihre Seitenanzahlen und Ergebnismengen sorgfältig, denn das Ausbleiben von Ausgaben eines Skripts deutet oft auf einen fehlerhaften Auftrag hin und nicht auf einen sauberen Mandanten.

Fazit

Die Beherrschung der Paginierung, die Einhaltung von Ratenbegrenzungen und die Vermeidung der Verzerrung durch Seite 1 sind unverzichtbare Fähigkeiten für alle, die einen großen Microsoft 365-Mandanten absichern. Wenn Sie über die einfachen Verwaltungskonsolen hinausgehen und die volle programmatische Leistungsfähigkeit der Microsoft Graph API nutzen, können Sie unsichtbare Freigaberisiken in klare, messbare Erkenntnisse zur Sicherheit verwandeln.

Weitere Vertiefungen, Codebeispiele und praxisnahe Graph-Rezepte finden Sie in unserer vollständigen Diskussion im Podcast. Die passende Folge und alle Details finden Sie unter Map Microsoft 365 Users, Groups, Files, and Shares with Graph. Bleiben Sie sicher, automatisieren Sie weiter, und wir sehen uns in der nächsten Folge!

Entitäten in diesem Artikel

Throttling Microsoft Graph Graph Explorer OData Microsoft 365 SharePoint Compliance Dashboards OneDrive Power BI

Verwandte Artikel

RSS