Configurez une surveillance et une alerte complètes pour les activités de récupération de compte afin de détecter les incidents de sécurité potentiels et d'assurer la conformité.
Configurez les alertes Azure Monitor pour les événements de récupération :
{
"name": "Alerte de récupération de compte",
"description": "Alerte sur la récupération de compte utilisant la vérification faciale",
"severity": 2,
"enabled": true,
"scopes": ["/subscriptions/your-subscription-id"],
"condition": {
"allOf": [
{
"field": "category",
"equals": "SignInLogs"
},
{
"field": "operationName",
"equals": "Account Recovery"
},
{
"field": "properties.authenticationDetails",
"contains": "Identity Verification"
}
]
},
"actions": {
"actionGroups": ["/subscriptions/your-subscription-id/resourceGroups/rg-security/providers/microsoft.insights/actionGroups/ag-security-team"]
}
}
Créez une requête KQL personnalisée pour des analyses de récupération détaillées :
// Requête d'analyse de récupération de compte
SigninLogs
| where TimeGenerated >= ago(30d)
| where AuthenticationDetails has "Identity Verification"
| extend RecoveryMethod = tostring(parse_json(AuthenticationDetails)[0].authenticationMethod)
| extend IDVProvider = tostring(parse_json(AuthenticationDetails)[0].authenticationStepRequirement)
| project TimeGenerated, UserPrincipalName, IPAddress, Location, RecoveryMethod, IDVProvider, ResultType, ResultDescription
| where ResultType == 0 // Récupérations réussies
| summarize RecoveryCount = count(),
UniqueUsers = dcount(UserPrincipalName),
SuccessRate = countif(ResultType == 0) * 100.0 / count()
by bin(TimeGenerated, 1d)
| order by TimeGenerated desc
Mettez en place un rapport de conformité automatisé :
# Script PowerShell pour rapport de récupération hebdomadaire
$startDate = (Get-Date).AddDays(-7)
$endDate = Get-Date
$recoveryReport = Get-MgAuditLogSignIn -Filter "createdDateTime ge $($startDate.ToString('yyyy-MM-ddTHH:mm:ssZ')) and authenticationDetails/any(x:x/authenticationMethod eq 'Identity Verification')" -All
$report = $recoveryReport | Group-Object {$_.CreatedDateTime.Date} | ForEach-Object {
[PSCustomObject]@{
Date = $_.Name
TotalRecoveries = $_.Count
SuccessfulRecoveries = ($_.Group | Where-Object {$_.Status.ErrorCode -eq 0}).Count
FailedRecoveries = ($_.Group | Where-Object {$_.Status.ErrorCode -ne 0}).Count
UniqueUsers = ($_.Group | Select-Object -Unique UserPrincipalName).Count
}
}
$report | Export-Csv "AccountRecoveryReport_$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation
Conseil pro : Configurez un espace de travail Log Analytics dédié aux événements de sécurité et configurez la rétention des données en fonction de vos exigences de conformité. La plupart des organisations ont besoin de plus de 90 jours pour l'enquête sur les incidents de sécurité.
Vérification : Déclenchez une récupération de test et confirmez que les alertes se déclenchent correctement et que l'événement apparaît sur votre tableau de bord de surveillance dans les 5 minutes. Vérifiez que la requête KQL renvoie des statistiques de récupération précises.