Klicks röntgen,
Code verstehen,
Azure beherrschen.
Ein durchgehender Lernpfad durch drei Werkzeuge, die zusammen ein Bild ergeben: Du lernst die Microsoft Graph API kennen, übst sie risikofrei im Graph Explorer, durchleuchtest jeden Portal-Klick mit Graph X-Ray und baust dir dafür ein eigenes Azure / Entra Homelab.
Das große Bild
Bevor wir ins Detail gehen, lohnt sich ein mentales Modell. Diese drei Themen wirken zunächst unabhängig, gehören aber zusammen wie Werkstatt, Werkzeug und Material.
Azure / Entra ID
Die Plattform. Hier leben deine Nutzer, Gruppen, Apps und Richtlinien — die Daten, mit denen du arbeitest.
Microsoft Graph
Die einheitliche Tür zu all diesen Daten. Eine einzige API für Entra, Teams, Outlook, OneDrive, Intune …
Graph Explorer
Deine Übungswerkstatt. Hier feuerst du gefahrlos echte Graph-Anfragen ab und siehst die Antworten.
Graph X-Ray
Die Röntgenbrille. Sie zeigt dir, welche Graph-Aufrufe das Azure-Portal bei jedem Klick im Hintergrund macht.
Der rote Faden
Wenn du im Entra- oder Azure-Portal auf „Speichern" klickst, passiert im Hintergrund fast immer ein Aufruf an die Graph-API. Die meisten Admins sehen das nie. Du wirst es lernen:
- Verstehen, was die Graph-API ist und wie eine Anfrage aufgebaut ist.
- Üben im Graph Explorer — Anfragen selbst formulieren, Antworten lesen, Berechtigungen erkennen.
- Durchleuchten mit Graph X-Ray — sehen, dass das Portal genau dieselbe API benutzt, und den Code dafür generieren lassen.
- Anwenden in deinem eigenen Azure/Entra-Homelab — gefahrlos, kostenlos, mit echten Objekten.
Sobald du verstehst, dass jeder Portal-Klick „nur" ein Graph-Aufruf ist, kannst du jede manuelle Aufgabe automatisieren. Aus „klick dich durch 50 Nutzer" wird ein PowerShell-Einzeiler. Graph X-Ray schreibt dir diesen Code sogar.
Microsoft Graph verstehen
Microsoft Graph ist eine REST-API mit genau einem Endpoint. Statt für Outlook, Teams, OneDrive und Entra je eine eigene Schnittstelle zu lernen, sprichst du alles über dieselbe Adresse an.
Anatomie einer Graph-Anfrage
Jeder Aufruf besteht aus denselben vier Bausteinen. Lerne dieses Muster — danach liest du jede Graph-URL mühelos:
GET // 1. HTTP-Methode: GET·POST·PATCH·DELETE https://graph.microsoft.com // 2. der eine Endpoint (Basis-URL) /v1.0 // 3. Version: /v1.0 (stabil) oder /beta (Vorschau) /me/messages // 4. Ressourcen-Pfad: was du willst ?$select=subject,from&$top=5 // 5. (optional) Query-Parameter
Die HTTP-Methoden
| Methode | Bedeutung | Beispiel |
|---|---|---|
GET | Lesen — verändert nichts | Profil abrufen: /me |
POST | Neu erstellen | Nutzer anlegen: /users |
PATCH | Teilweise ändern | Jobtitel ändern: /users/{id} |
DELETE | Löschen | Gruppe entfernen: /groups/{id} |
v1.0 vs. beta — der wichtigste Unterschied
/v1.0 — stabil
Für echten Einsatz. Microsoft garantiert Stabilität. Hier baust du Produktiv-Automatisierung.
/beta — Vorschau
Mehr Funktionen, aber kann sich jederzeit ändern. Super zum Ausprobieren, nie für Produktion.
Viele coole Eigenschaften gibt es zuerst nur im beta-Endpoint. Findest du etwas nur unter /beta, plane ein, dass es sich ändern kann, bevor es nach /v1.0 wandert.
Berechtigungen — der Türsteher
Graph gibt dir nichts ohne gültigen Access Token, und der Token trägt Scopes (Berechtigungen). Ein Token mit nur User.Read darf dein Profil lesen — aber keine anderen Nutzer. Es gibt zwei Typen:
| Typ | Im Namen einer … | Beispiel-Scope |
|---|---|---|
| Delegated | angemeldeten Person (App handelt für dich) | Mail.Read |
| Application | App selbst, ohne Nutzer (Hintergrunddienste) | User.Read.All |
Probier's aus: Mini-Request-Simulator
Wähle Methode und Pfad und sieh, wie eine echte Graph-Antwort aussehen würde — inklusive der nötigen Berechtigung. (Vereinfachte Demo, keine echten Aufrufe.)
Graph Explorer
Der Graph Explorer ist Microsofts kostenloses Entwicklerwerkzeug zum Ausprobieren der Graph-API direkt im Browser — ohne ein einziges Stück Code. Erreichbar unter developer.microsoft.com/graph/graph-explorer.
Du brauchst keinen eigenen Tenant, um loszulegen. Der Explorer bietet einen vorbefüllten Sample-/Sandbox-Mandanten mit Test-Daten — perfekt, um gefahrlos zu üben, bevor du dich mit deinem eigenen Konto anmeldest.
Die Oberfläche
Drei Bereiche, die du kennen solltest:
Linke Leiste
Sample queries (fertige Beispiele nach Dienst sortiert), Resources (durchsuchbarer Ressourcen-Baum), History (deine letzten 30 Tage).
Abfragebereich (oben)
Methode, Version (v1.0/beta), das URL-Feld und ein Feld für den Request-Body bei POST/PATCH.
Antwortbereich (unten)
Tabs für die Response, die Code-Snippets, die nötigen Berechtigungen und Toolkit-Komponenten.
Das wichtigste Feature: Code-Snippets
Nachdem du eine Abfrage ausgeführt hast, öffne den „Code snippets"-Tab. Der Explorer übersetzt deine Anfrage automatisch in echten Code — wähle deine Sprache:
Connect-MgGraph -Scopes "User.Read" Get-MgUser -UserId "me"
var me = await graphClient.Me .GetAsync();
const me = await client .api('/me') .get();
me = await graph_client.me.get()Weitere nützliche Features
- Documentation-Link an jeder Abfrage — springt direkt zur passenden API-Referenz mit Parametern und nötigen Scopes.
- Resources-Tab → Postman-Export: sammle Ressourcen und exportiere sie als Postman-Collection.
- History (30 Tage): jede Abfrage wird gespeichert, als
.harexportierbar. - Share-Button: erzeugt einen Link, mit dem andere deine Abfrage + Ergebnis sehen.
- Settings → Sandbox: kostenloser Sofort-Sandbox mit Sample-Datenpaketen.
- Öffne den Graph Explorer.
- Klicke in der linken Leiste auf Sample queries → „Get my profile".
- Drücke Run query. Lies die JSON-Antwort: Welche Felder erkennst du?
- Öffne den „Code snippets"-Tab und schau dir denselben Aufruf als PowerShell an.
- Setze die URL auf
https://graph.microsoft.com/v1.0/me/messagesund führe sie aus (im eigenen Tenant; in der Sandbox ggf. Sample-Daten). - Hänge
?$top=5an — nur 5 Ergebnisse. - Ergänze
&$select=subject,from— nur diese Felder. - Teste
&$filter=isRead eq false. Beobachte, wie sich die Antwort ändert.
- Probiere
/users(alle Nutzer). Eventuell bekommst du einen Fehler 403. - Öffne den „Modify permissions"-Tab — er zeigt, welcher Scope fehlt (
User.Read.All). - Erteile die Berechtigung (Consent) und führe erneut aus. Merke dir: kein Scope, keine Daten.
Graph X-Ray
Wo der Graph Explorer dich Anfragen schreiben lässt, zeigt dir Graph X-Ray, welche Anfragen das Portal bereits für dich macht. Es ist eine Browser-Erweiterung von Merill Fernando, die in Echtzeit mitschneidet, welche Graph-API-Aufrufe hinter deinen Klicks in Entra, Intune & Co. stecken — und daraus fertigen Code generiert.
Graph X-Ray wurde von Microsoft-Mitarbeitern entwickelt, ist aber kein offizielles Microsoft-Produkt, sondern ein Community-Tool. Die Idee entstand auf einem Microsoft-Hackathon.
Die Kernidee: „Clicks to Code"
Jede Dropdown-Auswahl, jedes „Speichern" im Admin-Portal löst im Hintergrund eine Graph-Anfrage aus. Normalerweise ist das in den rohen DevTools-Netzwerk-Logs vergraben. Graph X-Ray hebt genau diese Aufrufe hervor und formatiert sie lesbar — und übersetzt sie in Skripte.
Unterstützte Sprachen
Installation
Verfügbar für alle gängigen Browser:
| Browser | Quelle |
|---|---|
| Microsoft Edge | Edge Add-ons Store → „Graph X-Ray" |
| Google Chrome | Chrome Web Store → „Graph X-Ray" |
| Mozilla Firefox | Firefox Add-ons (addons.mozilla.org) |
Graph X-Ray verlangt weitreichende Berechtigungen (Zugriff auf microsoft.com, azure.com, office.com u. a.), weil es Netzwerkverkehr dieser Seiten mitlesen muss. Das ist für seine Funktion nötig — installiere es aber bewusst und idealerweise nur in einem Browser-Profil, das du für Admin-Arbeit nutzt. In sensiblen Produktivumgebungen vorher mit deinem Sicherheitsteam abstimmen.
So benutzt du es
- Installiere die Erweiterung und starte den Browser neu (sonst erscheint das Panel evtl. nicht).
- Öffne ein Admin-Portal, z. B. entra.microsoft.com oder intune.microsoft.com.
- Öffne die DevTools (F12) und wechsle zum Tab „Graph X-Ray".
- Führe im Portal eine Aktion aus — z. B. den Jobtitel eines Nutzers ändern und Speichern.
- Im X-Ray-Panel erscheint der zugehörige Graph-Aufruf plus generierter Code. Scrolle nach unten für die neueste Aktion.
Beispiel: was X-Ray dir zeigt
Du änderst im Portal eine Telefonnummer und klickst Speichern. X-Ray übersetzt das z. B. so:
# X-Ray erkennt: Portal sendet PATCH an /users/{id} Update-MgUser -UserId "8f4e...c2a1" ` -BusinessPhones "+49 30 1234567"
Wofür es brilliert
Automatisieren
Aus einer einmaligen Klick-Aufgabe wird ein wiederholbares Skript — in Sekunden statt Doku-Suche.
Reverse Engineering
Verstehen, wie das Portal intern arbeitet — ideal, um undokumentierte Abläufe nachzubauen.
Lernen
Die schnellste Art, die richtige Graph-Ressource für eine Aufgabe zu finden, ohne die Doku zu durchforsten.
Nicht jede Aktion in jedem Portal nutzt Graph. Manche Konsolen (z. B. Teile des Exchange Admin Centers) bauen nicht mehr auf Graph/PowerShell auf — dort zeigt X-Ray nichts. In den wichtigen Bereichen (Nutzer, Gruppen, Geräte/Intune) funktioniert es aber sehr zuverlässig.
- Installiere Graph X-Ray, Browser neu starten.
- Gehe ins Entra-Portal → ein Testnutzer → bearbeite ein Profilfeld → Speichern.
- DevTools (F12) → Tab „Graph X-Ray" → finde den PATCH-Aufruf.
- Kopiere den generierten PowerShell-Code. Lies ihn: Erkennst du die Ressource und die geänderte Eigenschaft wieder?
- Nimm die von X-Ray gezeigte Graph-URL (z. B.
PATCH /users/{id}). - Baue dieselbe Anfrage manuell im Graph Explorer nach.
- Vergleiche: Der Body, den X-Ray zeigt, ist genau das, was du im Explorer in den Request-Body schreibst.
- Aha-Moment: Portal, X-Ray und Explorer sprechen dieselbe Sprache.
Azure & Entra ID
„Azure" ist Microsofts riesige Cloud-Plattform — Hunderte Dienste von virtuellen Maschinen bis KI. Für deine drei Themen ist vor allem ein Teil zentral: Microsoft Entra ID (früher Azure Active Directory), der Identitätsdienst. Genau dessen Daten erreichst du über Graph.
Azure AD = Microsoft Entra ID. Microsoft hat Azure Active Directory umbenannt. In älteren Anleitungen, Tools und sogar manchen Cmdlets siehst du noch „Azure AD" — gemeint ist dasselbe.
Die wichtigsten Bausteine fürs Lernen
| Begriff | Was es ist | Über Graph |
|---|---|---|
| Tenant | Deine isolierte Cloud-Instanz (dein „Verzeichnis") | /organization |
| Users | Konten von Personen | /users |
| Groups | Sammlungen von Nutzern (für Rechte, Lizenzen) | /groups |
| App registrations | Registrierte Anwendungen, die Graph nutzen dürfen | /applications |
| Roles | Administrative Rollen (z. B. Global Admin) | /roleManagement |
| Conditional Access | Zugriffsregeln (MFA, Geräte, Standort) | /identity/conditionalAccess |
Die drei Portale, die du kennen wirst
portal.azure.com
Das klassische Azure-Portal — alle Cloud-Ressourcen (VMs, Speicher, Netzwerke …).
entra.microsoft.com
Das Entra-Admin-Center — Identität: Nutzer, Gruppen, Apps, Sicherheit. Hier glänzt X-Ray.
intune.microsoft.com
Endpoint Manager — Geräte- & App-Verwaltung. Ebenfalls stark Graph-basiert.
Wie Azure-Kosten funktionieren (damit dein Lab kostenlos bleibt)
Azure rechnet meist nutzungsbasiert ab (Pay-as-you-go): Du zahlst pro Stunde Rechenzeit, pro GB Speicher usw. Für reines Identitäts- und Graph-Lernen entstehen aber praktisch keine Kosten — Entra ID hat eine kostenlose Stufe, und Nutzer/Gruppen/Apps anzulegen kostet nichts. Geld kostet erst echte Infrastruktur wie VMs. Mehr dazu im nächsten Modul.
Stell dir den Tenant als dein leeres Grundstück vor. Entra ID ist das Adressbuch der Bewohner. Graph ist die einheitliche Telefonleitung, über die du mit allen sprichst. Azure-Dienste wie VMs sind Gebäude, die du optional draufbaust — und nur die kosten nennenswert.
Dein Homelab aufbauen
Jetzt baust du dir eine eigene Spielwiese — einen Tenant, in dem du alles gefahrlos ausprobieren kannst, ohne eine Produktivumgebung zu berühren. Es gibt mehrere Wege, je nachdem, was du hast.
Welcher Weg passt zu dir?
| Weg | Was du bekommst | Voraussetzung |
|---|---|---|
| Azure Free Account | 200 $ Guthaben (30 Tage) + 12 Monate Gratis-Dienste + 25+ dauerhaft kostenlose Dienste. Erstellst dir einen eigenen Entra-Tenant. | Kreditkarte zur Verifizierung (keine Belastung bei Free-Tier) |
| Azure for Students | 100 $ Guthaben, ohne Kreditkarte | Verifizierter Studierenden-Status (Uni-Mail) |
| M365 Developer Program | Sandbox-Tenant mit 25 E5-Lizenzen, vorbefüllten Nutzern/Gruppen/Postfächern | Heute eingeschränkt: qualifizierende Subscription (z. B. Visual Studio) nötig |
| Nur Graph Explorer Sandbox | Sofort losüben mit Sample-Daten, kein Setup | Nichts — nur Browser |
Das früher beliebte Microsoft 365 Developer Program mit kostenlosem E5-Sandbox-Tenant ist nicht mehr frei für jeden. Persönliche Microsoft-Konten werden nicht mehr akzeptiert; es braucht eine qualifizierende Subscription (z. B. Visual Studio Enterprise/Professional). Bekommst du die Meldung „You don't currently qualify", ist das normal — nutze dann den Azure Free Account und erstelle dir einen eigenen Tenant.
Empfohlener Weg: eigener Entra-Tenant über Azure Free
- Registriere einen Azure Free Account (Kreditkarte nur zur Identitätsprüfung).
- Im Azure-Portal: Microsoft Entra ID → Manage tenants → Create → neuen Tenant anlegen (Region, Domain-Name, Admin-Konto).
- Du erhältst einen Tenant mit einer
*.onmicrosoft.com-Domain und Entra ID Free-Stufe. - Optional: aktiviere eine kostenlose Entra ID P1/P2-Testphase, um auch Conditional Access & Co. zu testen.
- Lege 3–5 Testnutzer an (z. B. ada@…, alan@…, grace@…).
- Erstelle 2 Gruppen („Lab-Admins", „Lab-Users") und ordne Nutzer zu.
- Registriere eine App (App registrations → New) — die nutzt du später für Application-Berechtigungen.
- Jetzt hast du echte Objekte für
/users,/groups,/applicationsim Explorer und für X-Ray.
Identität (Nutzer/Gruppen/Apps) kostet nichts. Geld kostet echte Infrastruktur. Wenn du doch eine VM oder anderen Dienst zum Testen startest:
- Nutze die kleinste Stufe (z. B.
B1s-VM, in der 12-Monate-Gratis-Stufe für 750 Std./Monat enthalten). - Richte sofort einen Budget-Alert ein (Cost Management → Budgets).
- Lösche Test-Ressourcen über die Ressourcengruppe, wenn du fertig bist.
# Alle Ressourcengruppen anzeigen az group list --output table # Eine Test-Gruppe samt Inhalt löschen az group delete --name rg-mein-lab --yes --no-wait
Werkzeuge fürs Homelab installieren
# Graph PowerShell SDK installieren Install-Module Microsoft.Graph -Scope CurrentUser # An deinem Lab-Tenant anmelden Connect-MgGraph -Scopes "User.Read.All","Group.Read.All" # Test: alle Lab-Nutzer auflisten Get-MgUser -All | Select DisplayName, UserPrincipalName
# Azure CLI anmelden az login # Direkt einen Graph-Aufruf über die CLI machen az rest --method GET ` --url "https://graph.microsoft.com/v1.0/users"
Lernpfad & Übungen
Hier verbindet sich alles. Diese vier aufeinander aufbauenden Übungen führen dich von „klicken" zu „automatisieren". Arbeite sie in deinem Lab-Tenant durch.
- Im Entra-Portal: Erstelle manuell eine neue Gruppe „Projekt-X". Lass dabei Graph X-Ray mitlaufen.
- Lies im X-Ray-Panel den
POST /groups-Aufruf und kopiere den generierten PowerShell-Code. - Teste denselben Aufruf im Graph Explorer (POST mit JSON-Body) → erstelle „Projekt-Y".
- Führe den PowerShell-Code lokal aus → erstelle „Projekt-Z".
- Ergebnis: Drei Gruppen, drei Wege, eine API. Du hast den Kreis geschlossen.
- Stell dir vor, du müsstest 20 Nutzern denselben Jobtitel geben.
- Röntge mit X-Ray eine manuelle Änderung → du bekommst den
PATCH-Aufruf. - Baue daraus eine PowerShell-Schleife, die über alle Lab-Nutzer läuft.
- Spüre den Unterschied: 20 Klicks vs. 1 Skript.
Connect-MgGraph -Scopes "User.ReadWrite.All" # Alle Lab-Nutzer holen und Jobtitel setzen Get-MgUser -All | ForEach-Object { Update-MgUser -UserId $_.Id ` -JobTitle "Cloud Trainee" }
Empfohlene Reihenfolge (TL;DR)
- Tag 1: Module 1–2 lesen. Graph-Explorer-Sandbox: Übungen 1–3.
- Tag 2: Azure Free Account + eigener Tenant (Übungen 6–7).
- Tag 3: Graph X-Ray installieren, Übungen 4–5.
- Tag 4: Den Kreislauf meistern, Übungen 8–9. Sicherheit (Modul 8) lesen.
Führe ein kleines „Snippet-Tagebuch": Jedes Mal, wenn X-Ray dir einen nützlichen Aufruf zeigt, speichere ihn mit einem Kommentar. Nach zwei Wochen hast du deine eigene Automatisierungs-Bibliothek.
Berechtigungen & Sicherheit
Graph ist mächtig — und genau deshalb diszipliniert mit Berechtigungen umzugehen ist der Unterschied zwischen Profi und Risiko. Das gilt selbst im Lab, weil du dir hier gute Gewohnheiten antrainierst.
Das Prinzip der minimalen Rechte
Fordere immer nur die Scopes an, die du wirklich brauchst. Willst du nur lesen, nimm User.Read.All — nicht User.ReadWrite.All. Jede überflüssige Berechtigung ist eine unnötige Angriffsfläche.
| Scope-Muster | Bedeutung | Risiko |
|---|---|---|
.Read | Nur lesen | niedrig |
.ReadWrite | Lesen + ändern | mittel |
.ReadWrite.All | Tenant-weit ändern | hoch |
Directory.ReadWrite.All | Fast alles im Verzeichnis | sehr hoch |
Delegated vs. Application — die Sicherheitssicht
Delegated
App handelt im Namen eines angemeldeten Nutzers. Effektive Rechte = Schnittmenge aus App-Scope und dem, was der Nutzer selbst darf. Sicherer.
Application
App handelt allein, ohne Nutzer (z. B. nächtlicher Job). Keine Nutzer-Begrenzung — entsprechend vorsichtig vergeben und durch Admin-Consent abgesichert.
Goldene Regeln für dein Lab (und später)
- Nie mit dem Global-Admin-Konto im Alltag arbeiten — separates Test-Konto nutzen.
- Tokens sind Geheimnisse: nie in Code, Chats, Screenshots oder URLs einfügen. Ein JWT ist ein Schlüssel.
- App-Secrets/Zertifikate nie im Klartext committen — nutze Secret-Stores (z. B. Azure Key Vault).
- Consent-Dialoge wirklich lesen: Was fordert die App an? Passt das zum Zweck?
- Im Lab ruhig Rechte erteilen und wieder entziehen, um den Effekt zu sehen — so lernst du das Berechtigungsmodell wirklich.
Wenn dir der Graph Explorer einen 403 Forbidden gibt, ist das fast immer ein fehlender Scope — nicht ein Bug. Lerne, das ruhig zu lesen: „Welche Berechtigung verlangt diese Ressource laut Doku?" Das ist eine der wertvollsten Fähigkeiten überhaupt.
Spickzettel & Ressourcen
Dein Schnellzugriff für die häufigsten Aufrufe und die besten weiterführenden Quellen.
Häufige Graph-Endpunkte
| Aufgabe | Aufruf |
|---|---|
| Mein Profil | GET /me |
| Meine E-Mails (5 neueste) | GET /me/messages?$top=5 |
| Mein Kalender heute | GET /me/calendarView |
| Meine OneDrive-Dateien | GET /me/drive/root/children |
| Alle Nutzer | GET /users |
| Nutzer suchen | GET /users?$filter=startswith(displayName,'A') |
| Alle Gruppen | GET /groups |
| Meine Teams | GET /me/joinedTeams |
| Registrierte Apps | GET /applications |
Nützliche Query-Parameter (OData)
| Parameter | Wirkung | Beispiel |
|---|---|---|
$select | Nur bestimmte Felder | $select=displayName,mail |
$filter | Ergebnisse filtern | $filter=accountEnabled eq true |
$top | Anzahl begrenzen | $top=10 |
$orderby | Sortieren | $orderby=displayName |
$expand | Verknüpfte Daten mitladen | $expand=members |
$count | Trefferzahl | $count=true |
PowerShell-Cmdlets, die du oft brauchst
| Cmdlet | Zweck |
|---|---|
Connect-MgGraph -Scopes "..." | Anmelden mit gewünschten Rechten |
Get-MgUser / Get-MgGroup | Nutzer / Gruppen lesen |
New-MgUser / New-MgGroup | Neu anlegen |
Update-MgUser | Ändern (PATCH) |
Get-MgContext | Aktuelle Sitzung & Scopes prüfen |
Disconnect-MgGraph | Abmelden |