← Back

JML Monitor Lab

Detta projekt byggdes för att förstå Joiner / Mover / Leaver-processer, gruppbaserad RBAC och hur access förändras över tid i Microsoft Entra ID.

Målet var också att förstå hur Microsoft Graph API fungerar i praktiken och hur man kan upptäcka access drift och risker via automation.

Arkitektur

Entra ID → Microsoft Graph API → Python → State Comparison → JML Detection

Steg 1 — Skapa Entra-labb

Först skapades en testmiljö i Microsoft Entra ID.

Flera users skapades för att simulera olika typer av access:

Sedan skapades grupper:

Users placerades sedan i olika grupper för att simulera RBAC.

Steg 2 — Registrera app i Entra ID

För att kunna använda Microsoft Graph API skapades en App Registration.

Appen fick namnet:

JML-Monitor

Efter skapandet sparades:

Steg 3 — Skapa Client Secret

Sedan skapades en Client Secret för authentication mot Microsoft identity platform.

Secret-värdet sparades direkt eftersom det bara visas en gång.

Steg 4 — API Permissions

För att kunna läsa users, grupper och audit-data behövdes Microsoft Graph permissions.

Permissions:

Efter detta gavs:

Grant admin consent

Steg 5 — Installera Python

För att bygga monitorn installerades:

Sedan installerades requests:

pip install requests

Steg 6 — Skapa Python-script

Ett Python-script skapades:

get_token.py

Scriptet skulle:

Steg 7 — Authentication mot Entra

Scriptet började med authentication mot Microsoft identity platform.

Använde:

Token hämtades via:

https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token

Grant type:

client_credentials

Steg 8 — Hämta users från Graph API

Efter authentication hämtades users från Microsoft Graph API.

https://graph.microsoft.com/v1.0/users

Följande data hämtades:

Steg 9 — Loopa users

Alla users loopades:

for user in users["value"]

För varje user hämtades:

Steg 10 — Hämta gruppmedlemskap

För varje user hämtades gruppmedlemskap via Graph API:

https://graph.microsoft.com/v1.0/users/{user_id}/memberOf

Sedan loopades grupperna:

for g in groups.get("value", [])

Gruppnamn sparades i:

user_groups = []

Steg 11 — Skapa JML-logik

Efter att users och grupper hämtats byggdes logik för att upptäcka risker och förändringar.

Exempel:

Steg 12 — Skapa state snapshot

För att kunna jämföra förändringar över tid skapades:

state.json

Den sparade:

Steg 13 — Jämföra historik

Vid nästa körning:

Exempel:

Steg 14 — Exempel på detektion

Monitorn kunde sedan visa:

⚠️ NY ACCESS 🚨 BORTTAGEN ACCESS 🚨 RISK: Admin access 🚨 RISK: SoD-konflikt

Steg 15 — Skydda secrets

Under projektet upptäcktes att secrets varit exponerade i script.

Detta åtgärdades genom att:

Resultat

Monitorn kunde nu:

Lärdomar

Möjliga nästa steg