Condividi tramite


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

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.

Screenshot che mostra i grafici di integrità dell'accesso.

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.

  1. Nella cartella di lavoro, selezionare Modifica come illustrato nello screenshot seguente. Selezionare l'icona della query nell'angolo superiore destro del grafico.

    Screenshot che mostra la modifica della cartella di lavoro.

  2. Visualizzare il log delle query come illustrato nello screenshot seguente.

    Screenshot che mostra il log della query.

  3. Copiare uno degli script di esempio seguenti per una nuova query Kusto.

  4. Incollare la query nella finestra. Selezionare Esegui. Cercare il messaggio Completato e i risultati della query, come illustrato nello screenshot seguente.

    Screenshot che mostra i risultati della query di esecuzione.

  5. Evidenziare la query. Selezionare + Nuova regola di avviso.

    Screenshot che mostra la schermata della nuova regola di avviso.

  6. 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.

    Screenshot che mostra la schermata di configurazione degli avvisi.

    • 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.
  7. In Logica di avviso, configurare i parametri come illustrato nello screenshot di esempio.

    Screenshot che mostra la schermata della logica degli avvisi.

    • 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.
  8. Nella sezione Azioni, configurare le impostazioni come illustrato nello screenshot di esempio.

    Screenshot che mostra la schermata Crea regola di avviso.

    • 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.
  9. Nella sezione Dettagli, configurare le impostazioni come illustrato nello screenshot di esempio.

    Screenshot che mostra la sezione Dettagli.

    • 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.
  10. Nella sezione Rivedi e crea, configura le impostazioni come illustrato nello screenshot di esempio.

    Screenshot che mostra la sezione Rivedi e crea.

  11. Seleziona Salva. Immettere un nome per la query. Per Salva con nome, selezionare Query. Per Categoria, selezionare Avviso. Selezionare di nuovo Salva.

    Screenshot che mostra il pulsante Salva query.

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