Ce que vous saurez faire
- Distinguer sign-in logs, audit logs et provisioning logs, et savoir où chacun répond.
- Configurer l'export des logs Entra vers Log Analytics (diagnostic settings).
- Écrire des requêtes KQL de base pour investiguer (SigninLogs, AuditLogs).
- Mettre en place une alerte / un rapport automatisé.
- Situer Microsoft Sentinel comme à connaître, non déployable en l'état, avec son alternative.
Compétences transférées depuis l'AD classique
| L'admin AD réutilise | L'admin AD doit désapprendre |
|---|---|
| Lecture des journaux d'événements, analyse d'incidents | « Les logs sont sur le DC (Event Viewer) » — ici, logs cloud, requêtables en KQL |
| Corrélation d'événements | Grep / Event Viewer → KQL (langage de requête) |
| Notion de rétention | La rétention par défaut est limitée — l'export est nécessaire pour conserver |
Voir et investiguer dans Entra
1. Les journaux Entra
Trois journaux principaux, à ne pas confondre :
| Journal | Répond à la question | Exemples |
|---|---|---|
| Sign-in logs | Qui s'est connecté, d'où, comment, avec quel résultat ? | Connexion réussie / échouée, MFA, CA appliqué, IP, appareil |
| Audit logs | Qui a fait quoi dans l'annuaire ? | Création d'utilisateur, ajout à un groupe, changement de rôle, modif de politique CA |
| Provisioning logs | Le provisioning (SCIM) a-t-il bien fonctionné ? | Compte créé / mis à jour / désactivé dans une app SaaS |
Événements de sécurité dans l'Event Viewer de chaque DC (4624, 4625, 4740…), à corréler manuellement.
Journaux centralisés, filtrables au portail, requêtables en KQL après export.
Croire que la rétention est illimitée. Par défaut : 7 à 30 jours selon la licence. Pour conserver, il faut exporter.
2. Export vers Log Analytics / Sentinel
Pour conserver, corréler et alerter au-delà de la rétention native, on exporte les logs via les Diagnostic settings d'Entra vers :
- Log Analytics workspace (Azure Monitor) : stockage requêtable en KQL, rétention configurable, base des alertes et classeurs (workbooks). Coût Azure (ingestion + rétention).
- Un compte de stockage (archivage long terme, peu coûteux, non requêtable directement).
- Event Hub (streaming vers un SIEM tiers).
3. KQL de base
KQL (Kusto Query Language) interroge les tables de Log Analytics (SigninLogs, AuditLogs, AADProvisioningLogs…). Structure : on part d'une table, on enchaîne des opérateurs avec |.
Opérateurs essentiels :
| Opérateur | Rôle | Analogie |
|---|---|---|
where | Filtrer | WHERE SQL / Where-Object |
project | Sélectionner des colonnes | SELECT / Select-Object |
summarize | Agréger (count, dcount, avg…) | GROUP BY |
sort by | Trier | ORDER BY |
ago(x) | Fenêtre temporelle | — |
Exemple 1 — Connexions échouées des dernières 24h, par utilisateur
SigninLogs
| where TimeGenerated > ago(24h)
| where ResultType != 0 // 0 = succès ; != 0 = échec
| summarize Echecs = count() by UserPrincipalName
| sort by Echecs desc
Exemple 2 — Détecter un possible password spraying
Beaucoup d'échecs « mauvais mot de passe » (50126), peu de comptes ciblés, une IP.
SigninLogs
| where TimeGenerated > ago(1h)
| where ResultType == 50126 // mauvais mot de passe
| summarize Tentatives = count(), Comptes = dcount(UserPrincipalName) by IPAddress
| where Tentatives > 20
| sort by Tentatives desc
Exemple 3 — Qui a modifié des politiques CA cette semaine ?
AuditLogs
| where TimeGenerated > ago(7d)
| where OperationName has "conditional access policy"
| project TimeGenerated, InitiatedBy, OperationName, TargetResources
Vous écrivez votre première requête KQL sur SigninLogs. Quel filtre mettez-vous toujours en premier ?
ago().
Toujours borner le temps en premier filtre (where TimeGenerated > ago(24h)). Sans ça, la requête scanne toute la table depuis le début de la rétention (parfois des mois), consomme des ressources et facture de l'ingestion inutile. Après le filtre temporel, on affine avec les autres critères.
4. Alertes & rapports automatisés
- Alertes Azure Monitor — déclenchées sur une requête KQL planifiée (ex : « alerter si un compte break-glass se connecte » — signal fort à surveiller).
- Workbooks — tableaux de bord visuels (connexions, échecs MFA, application des politiques CA).
- Rapports Entra natifs — usage MFA, application des politiques CA, connexions à risque (Identity Protection).
Sources Microsoft Learn
- Sign-in logs
- Audit logs
- Export vers Log Analytics
- KQL — prise en main
- Alertes Azure Monitor
- Microsoft Sentinel (à connaître)
Rappel : en cas d'écart entre ce support et le portail, le portail fait foi.
Export, KQL, alerte break-glass
Partie A — Configurer l'export vers Log Analytics (30 min)
- Créer un workspace Log Analytics :
portal.azure.com > Log Analytics workspaces > Create. Région et resource group cohérents avec votre tenant Azure. - Configurer les diagnostic settings :
Entra admin center > Monitoring & health > Diagnostic settings > Add diagnostic setting. - Cocher SignInLogs, AuditLogs (au minimum ; ajouter les autres selon besoin). Destination : le workspace créé.
- Attendre 15-30 min qu'un premier lot arrive dans le workspace.
Partie B — Écrire vos premières requêtes KQL (45 min)
Portail : Log Analytics workspace > Logs.
- Comptez les connexions réussies aujourd'hui :
SigninLogs | where TimeGenerated > ago(1d) | where ResultType == 0 | count. - Top 10 des utilisateurs par nombre de connexions : ajoutez
| summarize N=count() by UserPrincipalName | top 10 by N. - Recherchez les modifications de politiques CA de la semaine :
AuditLogs | where TimeGenerated > ago(7d) | where OperationName has "conditional access policy" | project TimeGenerated, InitiatedBy, OperationName. - Reproduisez la requête spraying de la section 3 et adaptez le seuil
Tentatives > 20à votre volume.
Partie C — Alerte « break-glass utilisé » (45 min)
Portail : Log Analytics workspace > Alerts > New alert rule.
- Signal : Custom log search, requête :
SigninLogs | where TimeGenerated > ago(5m) | where UserPrincipalName in ("break-glass-01@votretenant.onmicrosoft.com", "break-glass-02@votretenant.onmicrosoft.com") | project TimeGenerated, UserPrincipalName, IPAddress, AppDisplayName, ResultType - Threshold : Number of results > 0. Evaluation : toutes les 5 min sur 5 min.
- Action group : notification e-mail + SMS à l'équipe sécurité.
- Severity : Sev 1 (haute).
5 pièges de supervision
Testez vos acquis
Une évaluation interactive qui vous donne le badge Acquis (≥60%) ou Maîtrisé (≥80%).
Cas pratique — Tentative d'intrusion signalée
Contexte : après une tentative d'intrusion signalée, la direction veut « savoir ce qui se passe » et être alertée à l'avenir. SI en E3 + P2, pas de budget pour un SIEM complet.
Questions :
- Où regardez-vous en premier, et pour chercher quoi ?
- Écrivez (en français ou en KQL) la logique pour détecter un password spraying.
- Quelle architecture de supervision proposez-vous, compte tenu du budget ?
- Quelles 2-3 alertes mettez-vous en place en priorité ?
Démarche attendue
- Sign-in logs en premier : connexions échouées, IP inhabituelles, pays inattendus, MFA contournée, politiques CA appliquées. Puis audit logs pour vérifier qu'aucun changement suspect (rôle, politique CA, ajout d'app) n'a suivi.
- Spraying : sur une fenêtre courte, chercher une IP générant beaucoup d'échecs « mauvais mot de passe » (50126) répartis sur peu de comptes distincts. En KQL :
SigninLogs | where TimeGenerated > ago(1h) | where ResultType == 50126 | summarize Tentatives=count(), Comptes=dcount(UserPrincipalName) by IPAddress | where Tentatives > 20 - Architecture E3+P2 (sans SIEM) : export des SignInLogs / AuditLogs vers un Log Analytics workspace (coût Azure maîtrisé), KQL + workbooks pour l'investigation, alertes Azure Monitor + rapports Entra natifs. Sentinel est écarté (coût / complexité) mais connu comme évolution possible.
- Alertes prioritaires : (a) connexion d'un compte break-glass, (b) password spraying (règle ci-dessus), (c) modification d'un rôle à privilèges ou d'une politique CA. Peu d'alertes, à forte valeur, sur lesquelles on agit réellement.