Log di query per le risorse di Azure
In Log Analytics di Monitoraggio di Azure, le query vengono in genere eseguite nel contesto di un'area di lavoro. Un'area di lavoro può contenere dati per molte risorse, rendendo difficile isolare i dati per una determinata risorsa. Le risorse possono anche inviare dati a più aree di lavoro. Per semplificare questa esperienza, l'API REST consente di eseguire query sulle risorse di Azure direttamente per i log.
Formato della risposta
Le query sulle risorse di Azure producono la stessa forma di risposta delle query destinate a un'area di lavoro Log Analytics.
Formato di URL
Prendere in considerazione una risorsa di Azure con un identificatore completo:
/subscriptions/<sid>/resourceGroups/<rg>/providers/<providerName>/<resourceType>/<resourceName>
Una query per i log di questa risorsa sull'endpoint API diretto passa all'URL seguente:
https://api.loganalytics.azure.com/v1/subscriptions/<sid>/resourceGroups/<rg>/providers/<providerName>/<resourceType>/<resourceName>/query
Una query sulla stessa risorsa tramite ARM usa l'URL seguente:
https://management.azure.com/subscriptions/<sid>/resourceGroups/<rg>/providers/<providerName>/<resourceType>/<resourceName>/providers/microsoft.insights/logs?api-version=2018-03-01-preview
Essenzialmente, questo URL è la risorsa di Azure completa più il provider di estensioni: /providers/microsoft.insights/logs
.
Accesso alle tabelle e RBAC
Il provider di risorse microsoft.insights
espone un nuovo set di operazioni per controllare l'accesso ai log a livello di tabella. Queste operazioni hanno il formato seguente per una tabella denominata tableName
.
microsoft.insights/logs/<tableName>/read
Questa autorizzazione può essere aggiunta ai ruoli usando la actions
proprietà per consentire alle tabelle specificate e alla notActions
proprietà di non consentire le tabelle specificate.
Controllo di accesso ad aree di lavoro
Le query sulle risorse di Azure esaminano le aree di lavoro Log Analytics come possibili origini dati. Tuttavia, gli amministratori possono bloccare l'accesso all'area di lavoro tramite i ruoli controllo degli accessi in base al ruolo. Per impostazione predefinita, l'API restituisce solo i risultati delle aree di lavoro a cui l'utente dispone delle autorizzazioni per l'accesso.
Gli amministratori dell'area di lavoro possono usare query sulle risorse di Azure senza interrompere il controllo degli accessi in base al ruolo esistente. Una proprietà booleana nell'area di lavoro consente agli utenti con autorizzazioni di lettura di visualizzare i log per una risorsa di Azure specifica, ma non di eseguire query sull'area di lavoro che contiene tali log.
Questa è l'azione per definire l'ambito dell'accesso alle tabelle a livello di area di lavoro:
microsoft.operationalinsights/workspaces/query/<tableName>/read
Risposte di errore
Ecco un breve elenco di scenari di errore comuni durante l'esecuzione di query sulle risorse di Azure insieme a una descrizione del comportamento sintomatico.
La risorsa di Azure non esiste
HTTP/1.1 404 Not Found
{
"error": {
"message": "The resource /subscriptions/7fd50ca7-1e78-4144-ab9c-0ec2faafa046/resourcegroups/test-rg/providers/microsoft.storage/storageaccounts/exampleResource was not found",
"code": "ResourceNotFoundError"
}
}
Nessun accesso alla risorsa
HTTP/1.1 403 Forbidden
{
"error": {
"message": "The provided credentials have insufficient access to perform the requested operation",
"code": "InsufficientAccessError",
"innererror": {
"code": "AuthorizationFailedError",
"message": "User '92eba38a-70da-42b0-ab83-ffe82cce658f' does not have access to read logs for this resource"
}
}
}
Nessun log dalla risorsa o nessuna autorizzazione per l'area di lavoro contenente tali log
A seconda della combinazione precisa di dati e autorizzazioni, la risposta contiene 200 senza dati risultanti o genera un errore di sintassi (errore 4xx).
Accesso parziale
Esistono alcuni scenari in cui un utente può avere autorizzazioni parziali per accedere ai log di una determinata risorsa. Questo è il caso in cui l'utente non sia presente:
- Accesso all'area di lavoro contenente i log per la risorsa di Azure.
- Accesso alle tabelle di riferimento nella query.
Viene visualizzata una risposta normale, con origini dati a cui l'utente non ha le autorizzazioni per accedere in modo invisibile all'utente. Per visualizzare informazioni sull'accesso di un utente a una risorsa di Azure, sulle aree di lavoro Log Analytics sottostanti e su tabelle specifiche, includere l'intestazione Prefer: include-permissions=true
con le richieste. In questo modo, il codice JSON della risposta include una sezione simile all'esempio seguente:
{
"permissions": {
"resources": [
{
"resourceId": "/subscriptions/<id>/resourceGroups<id>/providers/Microsoft.Compute/virtualMachines/VM1",
"dataSources": [
"/subscriptions/<id>/resourceGroups<id>/providers/Microsoft.OperationalInsights/workspaces/WS1"
]
},
{
"resourceId": "/subscriptions/<id>/resourceGroups<id>/providers/Microsoft.Compute/virtualMachines/VM2",
"denyTables": [
"SecurityEvent",
"SecurityBaseline"
],
"dataSources": [
"/subscriptions/<id>/resourceGroups<id>/providers/Microsoft.OperationalInsights/workspaces/WS2",
"/subscriptions/<id>/resourceGroups<id>/providers/Microsoft.OperationalInsights/workspaces/WS3"
]
}
],
"dataSources": [
{
"resourceId": "/subscriptions/<id>/resourceGroups<id>/providers/Microsoft.OperationalInsights/workspaces/WS1",
"denyTables": [
"Tables.Custom"
]
},
{
"resourceId": "/subscriptions/<id>/resourceGroups<id>/providers/Microsoft.OperationalInsights/workspaces/WS2"
}
]
}
}
Il payload resources
descrive un tentativo di eseguire query su due macchine virtuali. VM1 invia i dati all'area di lavoro WS1, mentre VM2 invia i dati a due aree di lavoro: WS2 e WS3. Inoltre, l'utente non dispone dell'autorizzazione per eseguire query sulle SecurityEvent
tabelle o SecurityBaseline
per la risorsa.
Il payload dataSources
filtra ulteriormente i risultati descrivendo le aree di lavoro su cui l'utente può eseguire query. In questo caso, l'utente non dispone delle autorizzazioni per eseguire query su WS3 e un'altra tabella filtrata da WS1.
Per indicare chiaramente i dati restituiti da una query di questo tipo:
- Log per VM1 in WS1, escluse le tabelle. Personalizzato dall'area di lavoro.
- Log per VM2, esclusi SecurityEvent e SecurityBaseline, in WS2.