Eseguire query sui dati usando il linguaggio di query Kusto
- 5 minuti
È possibile usare il linguaggio di query Kusto (KQL) in Microsoft Sentinel per cercare e filtrare i dati raccolti.
Kusto Query Language (linguaggio di interrogazione Kusto)
KQL offre la possibilità di creare, archiviare ed eseguire analisi interattive sui dati raccolti. Microsoft Sentinel usa KQL per visualizzare e analizzare i dati importanti. È possibile usare KQL per creare query analitiche complesse che includono alcuni degli operatori seguenti:
- Colonne calcolate
- Funzioni di aggregazione
- Raggruppa per aggregazioni
Scrivere ed eseguire query di base
Una query è una richiesta di sola lettura che elabora i dati e restituisce i risultati di questa elaborazione senza modificare i dati o i metadati. Analogamente alle query SQL, le query KQL usano entità dello schema organizzate in una gerarchia, ad esempio database, tabelle e colonne. Uno schema è una raccolta di tabelle raggruppate in categorie logiche. Le query sono costituite da sequenze di istruzioni delimitate da un punto e virgola (;).
Quando si crea una query, si inizia con un nome di tabella o un comando di ricerca. Ad esempio, la query seguente recupera tutti i record dalla Event tabella:
Event
È possibile usare il carattere pipe (|) per separare i comandi. L'output del primo comando diventa l'input del comando successivo. È possibile aggiungere un numero qualsiasi di comandi a una singola query. La query seguente recupera i record dalla tabella Event e successivamente li cerca per il termine error in qualsiasi proprietà.
Event
| search error
È possibile costruire la query con operatori tabulari e scalari combinati da KQL in più istruzioni di espressione tabulari, che producono i risultati della query.
source1 | operator1 | operator2
Nell'esempio seguente l'origine è AzureActivity. Il primo operatore è where, che filtra i record in base all'espressione logica. Il secondo operatore è di nuovo where:
AzureActivity
| where OperationName == 'Delete Virtual Machine'
| where ActivityStatus == 'Accepted'
Per impostazione predefinita, Log Analytics limita le query a un intervallo di tempo delle ultime 24 ore. Per impostare un intervallo di tempo diverso, è possibile aggiungere un filtro esplicito TimeGenerated alla query o usare il Time range controllo . Ad esempio, la query seguente restituisce i dati dell'ora precedente:
AzureActivity
| where OperationName == 'Delete Virtual Machine'
| where ActivityStatus == 'Accepted'
| where TimeGenerated > ago (1h)
È possibile combinare le query con alcuni degli operatori usati più di frequente:
-
count. Restituisce il numero di righe nella tabella. -
take. Restituisce fino al numero specificato di righe di dati. -
project. Seleziona un subset di colonne. -
sort. Ordina le righe della tabella di input in base a una o più colonne. -
top. Restituisce i primi N record ordinati in base alle colonne specificate. -
extend. Calcola le colonne derivate. -
summarize. Aggrega gruppi di righe. -
render. Rende i risultati come output grafico.
Per combinare i record di due origini (tabelle), è possibile usare l'operatore join . L'operatore union combina due o più tabelle in una.
Per altre informazioni, vedere l'esercitazione su Log Analytics di Microsoft che utilizza le funzionalità di Log Analytics per creare ed eseguire una query anziché usare la query stessa.
Per informazioni su KQL, è anche possibile usare l'esercitazione su Esplora dati di Azure.
Annotazioni
Microsoft Sentinel Log Analytics non supporta tutta la sintassi KQL usata in Esplora dati di Azure.
Repository di Microsoft Sentinel in GitHub
È anche possibile usare il repository di Microsoft Sentinel in GitHub per cercare query e cartelle di lavoro specializzate per proteggere l'ambiente e cercare minacce. Ad esempio, la query seguente dal repository GitHub di Microsoft Sentinel visualizza la delega sospetta delle autorizzazioni agli account utente.
let timeframe = 7d;
AzureActivity
| where TimeGenerated >= ago(timeframe)
| where OperationName == "Create role assignment"
| where ActivityStatus == "Succeeded"
| project Caller, CallerIpAddress
| evaluate basket()
| extend AccountCustomEntity = Caller, IPCustomEntity = CallerIpAddress
La query analizza l'indirizzo IP da cui l'amministratore concede l'accesso ad altri utenti alle risorse di Azure. Se un'operazione non proviene da un indirizzo IP valido, la query segnala attività sospette, che è possibile analizzare ulteriormente.
Per provare alcuni esempi, usare l'ambiente dimostrativo nel portale di Azure.