Köra frågor mot loggar för Azure-resurser
I Azure Monitor Log Analytics körs frågor vanligtvis i kontexten för en arbetsyta. En arbetsyta kan innehålla data för många resurser, vilket gör det svårt att isolera data för en viss resurs. Resurser kan dessutom skicka data till flera arbetsytor. För att förenkla den här upplevelsen tillåter REST-API:et att köra frågor mot Azure-resurser direkt för sina loggar.
Svarsformat
Azure-resursfrågor skapar samma svarsform som frågor som riktar sig till en Log Analytics-arbetsyta.
URL-format
Överväg en Azure-resurs med en fullständigt kvalificerad identifierare:
/subscriptions/<sid>/resourceGroups/<rg>/providers/<providerName>/<resourceType>/<resourceName>
En fråga för den här resursens loggar mot den direkta API-slutpunkten skulle gå till följande URL:
https://api.loganalytics.azure.com/v1/subscriptions/<sid>/resourceGroups/<rg>/providers/<providerName>/<resourceType>/<resourceName>/query
En fråga till samma resurs via ARM använder följande URL:
https://management.azure.com/subscriptions/<sid>/resourceGroups/<rg>/providers/<providerName>/<resourceType>/<resourceName>/providers/microsoft.insights/logs?api-version=2018-03-01-preview
Den här URL:en är i princip den fullständigt kvalificerade Azure-resursen plus tilläggsprovidern: /providers/microsoft.insights/logs
.
Tabellåtkomst och RBAC
Resursprovidern microsoft.insights
exponerar en ny uppsättning åtgärder för att kontrollera åtkomsten till loggar på tabellnivå. Dessa åtgärder har följande format för en tabell med namnet tableName
.
microsoft.insights/logs/<tableName>/read
Den här behörigheten actions
kan läggas till i roller med hjälp av egenskapen för att tillåta att angivna tabeller och egenskapen notActions
inte tillåter angivna tabeller.
Åtkomstkontroll för arbetsyta
Azure-resursfrågor tittar över Log Analytics-arbetsytor som möjliga datakällor. Administratörer kan dock låsa åtkomsten till arbetsytan via RBAC-roller. Som standard returnerar API:et endast resultat från arbetsytor som användaren har behörighet att komma åt.
Arbetsyteadministratörer kan använda Azure-resursfrågor utan att bryta befintliga RBAC. Med en boolesk egenskap på arbetsytan kan användare med läsbehörighet visa loggar för en specifik Azure-resurs, men inte köra frågor mot arbetsytan som innehåller loggarna.
Det här är åtgärden för omfångsåtkomst till tabeller på arbetsytenivå:
microsoft.operationalinsights/workspaces/query/<tableName>/read
Felsvar
Här är en kort lista över vanliga felscenarier när du kör frågor mot Azure-resurser tillsammans med en beskrivning av symptomatiskt beteende.
Azure-resursen finns inte
HTTP/1.1 404 Not Found
{
"error": {
"message": "The resource /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/test-rg/providers/microsoft.storage/storageaccounts/exampleResource was not found",
"code": "ResourceNotFoundError"
}
}
}
Ingen åtkomst till resurs
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"
}
}
}
Inga loggar från resursen eller ingen behörighet till arbetsytan som innehåller dessa loggar
Beroende på den exakta kombinationen av data och behörigheter innehåller svaret antingen 200 utan resulterande data eller genererar ett syntaxfel (4xx-fel).
Partiell åtkomst
Det finns vissa scenarier där en användare kan ha partiell behörighet att komma åt en viss resurs loggar. Så här är fallet om användaren saknar något av följande:
- Åtkomst till arbetsytan som innehåller loggar för Azure-resursen.
- Åtkomst till tabellreferensen i frågan.
De ser ett normalt svar, med datakällor som användaren inte har behörighet att komma åt tyst filtrerad. Om du vill se information om en användares åtkomst till en Azure-resurs, de underliggande Log Analytics-arbetsytorna och specifika tabeller inkluderar du huvudet Prefer: include-permissions=true
med begäranden. Detta gör att svarets JSON inkluderar ett avsnitt som i följande exempel:
{
"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"
}
]
}
}
Nyttolasten resources
beskriver ett försök att fråga två virtuella datorer. VM1 skickar data till arbetsytan WS1, medan VM2 skickar data till två arbetsytor: WS2 och WS3. Dessutom har användaren inte behörighet att fråga efter resursens SecurityEvent
tabeller eller SecurityBaseline
tabeller.
Nyttolasten dataSources
filtrerar resultatet ytterligare genom att beskriva vilka arbetsytor som användaren kan fråga efter. Här har användaren inte behörighet att fråga WS3 och en annan tabell filtreras bort från WS1.
För att tydligt ange vilka data som en sådan fråga skulle returnera:
- Loggar för VM1 i WS1, exklusive tabeller. Anpassad från arbetsytan.
- Loggar för VM2, exklusive SecurityEvent och SecurityBaseline, i WS2.