Monitoraggio dell'integrità dell'accesso all'applicazione per la resilienza
Per aumentare la resilienza dell'infrastruttura, configurare il monitoraggio dell'integrità dell'accesso alle applicazioni per le applicazioni critiche. È possibile ricevere un avviso quando si verifica un evento imprevisto. Questo articolo illustra come configurare la cartella di lavoro Integrità dell'accesso all'app per monitorare le interruzioni degli accessi degli utenti.
È possibile configurare gli avvisi in base alla cartella di lavoro Integrità dell'accesso all'app. Questa cartella di lavoro consente agli amministratori di monitorare le richieste di autenticazione per le applicazioni nei tenant. Offre le funzionalità chiave seguenti:
- Configurare la cartella di lavoro per monitorare tutte le app o le singole app con dati in tempo quasi reale.
- Configurare gli avvisi per le modifiche al modello di autenticazione in modo da poter analizzare e rispondere.
- Confrontare le tendenze in un periodo di tempo. Settimana dopo settimana è l'impostazione predefinita della cartella di lavoro.
Nota
Vedere tutte le cartelle di lavoro disponibili e i prerequisiti per usarle in Come usare le cartelle di lavoro di Monitoraggio di Azure per i report.
Durante un evento rilevante, possono verificarsi due cose:
- Il numero di accessi per un'applicazione può diminuire bruscamente quando gli utenti non possono accedere.
- Il numero di errori di accesso potrebbe aumentare.
Prerequisiti
- Un tenant di Microsoft Entra.
- Un utente ha assegnato almeno il ruolo di Amministratore della sicurezza.
- Un'area di lavoro Log Analytics nella sottoscrizione di Azure per inviare i log ai log di Monitoraggio di Azure. Informazioni su come creare un'area di lavoro Log Analytics.
- Log di Microsoft Entra integrati con i log di Monitoraggio di Azure. Informazioni su come integrare i log di accesso di Microsoft Entra con Stream di Monitoraggio di Azure.
Configurare la cartella di lavoro Integrità dell'accesso all'app
Per accedere alle cartelle di lavoro nel portale di Azure, selezionare Microsoft Entra ID e poi Cartelle di lavoro.
Le cartelle di lavoro compaiono in Utilizzo, Accesso condizionale e Risoluzione dei problemi. La cartella di lavoro Integrità dell’accesso all’app compare nella sezione Integrità. Dopo aver usato una cartella di lavoro, questa potrebbe comparire nella sezione Cartelle di lavoro modificate di recente.
È possibile usare la cartella di lavoro Integrità dell'accesso all'app per visualizzare le operazioni eseguite con gli accessi. Come illustrato nello screenshot seguente, la cartella di lavoro presenta due grafici.
Nello screenshot precedente sono presenti due grafici:
- Utilizzo orario (numero di utenti riusciti). Il confronto tra il numero corrente di utenti riusciti e un periodo di utilizzo standard consente di individuare un calo dell'utilizzo che potrebbe richiedere un'indagine. Una riduzione della frequenza dell’utilizzo riuscito può aiutare a rilevare problemi di prestazione e di utilizzo che la frequenza di errore non è in grado di rilevare. Ad esempio, quando gli utenti non riescono a raggiungere l'applicazione per tentare di accedere, si verifica un calo dell'utilizzo ma non si verificano errori. Vedere la query di esempio per questi dati nella sezione successiva di questo articolo.
- Frequenza oraria degli errori. Un picco di frequenza degli errori potrebbe indicare un problema con i meccanismi di autenticazione. Le misure di frequenza degli errori compaiono solo quando gli utenti possono tentare di eseguire l'autenticazione. Quando gli utenti non riescono a ottenere l'accesso per effettuare il tentativo, non ci sono errori.
Configurare la query e gli avvisi
Gli avvisi vengono creati in Monitoraggio di Azure e possono eseguire automaticamente query salvate o ricerche personalizzate nei log a intervalli regolari. È possibile configurare un avviso che notifica a un gruppo specifico quando la frequenza di utilizzo o di errore supera una soglia specificata.
Usare le istruzioni seguenti per creare e-mail di avviso in base alle query riflesse nei grafici. Gli script di esempio inviano un’e-mail di notifica quando:
- L'utilizzo riuscito scende del 90% rispetto alla stessa ora di due giorni prima, come illustrato nell'esempio di grafico relativo all'utilizzo orario precedente.
- Il tasso di errore aumenta del 90% rispetto alla stessa ora di due giorni prima, come illustrato nell'esempio di grafico relativo all’utilizzo orario precedente.
Per configurare la query sottostante e impostare gli avvisi, completare i passaggi seguenti usando la query di esempio come base per la configurazione. La descrizione della struttura della query compare alla fine di questa sezione. Informazioni su come creare, visualizzare e gestire gli avvisi dei log usando Monitoraggio di Azure in Gestire gli avvisi dei log.
Nella cartella di lavoro, selezionare Modifica come illustrato nello screenshot seguente. Selezionare l'icona della query nell'angolo superiore destro del grafico.
Visualizzare il log delle query come illustrato nello screenshot seguente.
Copiare uno degli script di esempio seguenti per una nuova query Kusto.
Incollare la query nella finestra. Selezionare Esegui. Cercare il messaggio Completato e i risultati della query, come illustrato nello screenshot seguente.
Evidenziare la query. Selezionare + Nuova regola di avviso.
Configurare le condizioni di avviso. Come illustrato nello screenshot di esempio seguente, nella sezione Condizione sotto Misurazione, selezionare Righe tabella per Misura. Selezionare Conteggio per Tipo di aggregazione Selezionare 2 giorni per Granularità aggregazione.
- Righe della tabella. È possibile usare il numero di righe restituite per lavorare con eventi quali Registri eventi di Windows, Syslog ed eccezioni dell'applicazione.
- Tipo di aggregazione. Punti dati applicati con Count.
- Granularità aggregazione Questo valore definisce il periodo che lavora con Frequenza di valutazione.
In Logica di avviso, configurare i parametri come illustrato nello screenshot di esempio.
- Valore soglia: 0 Questo valore avvisa su tutti i risultati.
- Frequenza della valutazione: 1 ora. Questo valore imposta il periodo di valutazione su una volta all'ora per l'ora precedente.
Nella sezione Azioni, configurare le impostazioni come illustrato nello screenshot di esempio.
- Selezionare Seleziona gruppo di azioni e aggiungi il gruppo per cui si desidera ricevere notifiche di avviso.
- In Personalizza azioni, selezionare Avvisi tramite e-mail.
- Aggiungere una riga dell'oggetto.
Nella sezione Dettagli, configurare le impostazioni come illustrato nello screenshot di esempio.
- Aggiungere un nome Sottoscrizione e una descrizione.
- Selezionare il Gruppo di risorse a cui si vuole aggiungere l'avviso.
- Selezionare la Gravità predefinita.
- Selezionare Abilita al momento della creazione se si vuole che venga attivata immediatamente. In caso contrario, selezionare Disattiva azioni.
Nella sezione Rivedi e crea, configura le impostazioni come illustrato nello screenshot di esempio.
Seleziona Salva. Immettere un nome per la query. Per Salva con nome, selezionare Query. Per Categoria, selezionare Avviso. Selezionare di nuovo Salva.
Ridefinire le query e gli avvisi
Per modificare le query e gli avvisi e ottenere la massima efficacia:
- Testare sempre gli avvisi.
- Modificare la sensibilità e la frequenza degli avvisi per la ricezione di notifiche importanti. Gli amministratori possono diventare insensibili agli avvisi e perdere qualcosa di importante se ne ricevono troppi.
- Nei client di posta elettronica dell'amministratore aggiungere l’e-mail da cui provengono gli avvisi all'elenco dei mittenti consentiti. Questo approccio impedisce che le notifiche vadano perse a causa di un filtro di posta indesiderata nei client della posta elettronica.
- Per impostazione predefinita, le query di avviso in Monitoraggio di Azure possono includere solo i risultati delle ultime 48 ore.
Script di esempio
Query Kusto per aumentare la frequenza di errori
Nella query seguente viene rilevato un aumento delle percentuali di errore. Se necessario, in fondo è possibile regolare il rapporto. Rappresenta la percentuale di variazione del traffico nell'ultima ora rispetto al traffico di ieri alla stessa ora. Il risultato 0,5 indica una differenza del 50% a livello di traffico.
let today = SigninLogs
| where TimeGenerated > ago(1h) // Query failure rate in the last hour
| project TimeGenerated, UserPrincipalName, AppDisplayName, status = case(Status.errorCode == "0", "success", "failure")
// Optionally filter by a specific application
//| where AppDisplayName == **APP NAME**
| summarize success = countif(status == "success"), failure = countif(status == "failure") by bin(TimeGenerated, 1h) // hourly failure rate
| project TimeGenerated, failureRate = (failure * 1.0) / ((failure + success) * 1.0)
| sort by TimeGenerated desc
| serialize rowNumber = row_number();
let yesterday = SigninLogs
| where TimeGenerated between((ago(1h) – totimespan(1d))..(now() – totimespan(1d))) // Query failure rate at the same time yesterday
| project TimeGenerated, UserPrincipalName, AppDisplayName, status = case(Status.errorCode == "0", "success", "failure")
// Optionally filter by a specific application
//| where AppDisplayName == **APP NAME**
| summarize success = countif(status == "success"), failure = countif(status == "failure") by bin(TimeGenerated, 1h) // hourly failure rate at same time yesterday
| project TimeGenerated, failureRateYesterday = (failure * 1.0) / ((failure + success) * 1.0)
| sort by TimeGenerated desc
| serialize rowNumber = row_number();
today
| join (yesterday) on rowNumber // join data from same time today and yesterday
| project TimeGenerated, failureRate, failureRateYesterday
// Set threshold to be the percent difference in failure rate in the last hour as compared to the same time yesterday
// Day variable is the number of days since the previous Sunday. Optionally ignore results on Sat, Sun, and Mon because large variability in traffic is expected.
| extend day = dayofweek(now())
| where day != time(6.00:00:00) // exclude Sat
| where day != time(0.00:00:00) // exclude Sun
| where day != time(1.00:00:00) // exclude Mon
| where abs(failureRate – failureRateYesterday) > 0.5
Query Kusto per il calo dell'utilizzo
Nella query seguente il traffico dell'ultima ora viene confrontato con il traffico di ieri alla stessa ora. Escludiamo sabato, domenica e lunedì perché ci aspettiamo una grande variabilità nel traffico del giorno precedente alla stessa ora.
Se necessario, in fondo è possibile regolare il rapporto. Rappresenta la percentuale di variazione del traffico nell'ultima ora rispetto al traffico di ieri alla stessa ora. Il risultato 0,5 indica una differenza del 50% a livello di traffico. Modificare questi valori in base al modello operativo aziendale.
Let today = SigninLogs // Query traffic in the last hour
| where TimeGenerated > ago(1h)
| project TimeGenerated, AppDisplayName, UserPrincipalName
// Optionally filter by AppDisplayName to scope query to a single application
//| where AppDisplayName contains "Office 365 Exchange Online"
| summarize users = dcount(UserPrincipalName) by bin(TimeGenerated, 1hr) // Count distinct users in the last hour
| sort by TimeGenerated desc
| serialize rn = row_number();
let yesterday = SigninLogs // Query traffic at the same hour yesterday
| where TimeGenerated between((ago(1h) – totimespan(1d))..(now() – totimespan(1d))) // Count distinct users in the same hour yesterday
| project TimeGenerated, AppDisplayName, UserPrincipalName
// Optionally filter by AppDisplayName to scope query to a single application
//| where AppDisplayName contains "Office 365 Exchange Online"
| summarize usersYesterday = dcount(UserPrincipalName) by bin(TimeGenerated, 1hr)
| sort by TimeGenerated desc
| serialize rn = row_number();
today
| join // Join data from today and yesterday together
(
yesterday
)
on rn
// Calculate the difference in number of users in the last hour compared to the same time yesterday
| project TimeGenerated, users, usersYesterday, difference = abs(users – usersYesterday), max = max_of(users, usersYesterday)
| extend ratio = (difference * 1.0) / max // Ratio is the percent difference in traffic in the last hour as compared to the same time yesterday
// Day variable is the number of days since the previous Sunday. Optionally ignore results on Sat, Sun, and Mon because large variability in traffic is expected.
| extend day = dayofweek(now())
| where day != time(6.00:00:00) // exclude Sat
| where day != time(0.00:00:00) // exclude Sun
| where day != time(1.00:00:00) // exclude Mon
| where ratio > 0.7 // Threshold percent difference in sign-in traffic as compared to same hour yesterday
Creare processi per gestire gli avvisi
Dopo aver configurato query e avvisi, creare processi aziendali per gestire gli avvisi.
- Chi monitora la cartella di lavoro e quando?
- Quando compaiono avvisi, chi li esamina?
- Quali sono le esigenze di comunicazione? Chi crea le comunicazioni e chi le riceve?
- Quando si verifica un'interruzione, quali processi aziendali si applicano?
Passaggi successivi
Ulteriori informazioni su Cartelle di lavoro