Query's uitvoeren op logboeken voor Azure-resources
In Azure Monitor Log Analytics worden query's doorgaans uitgevoerd in de context van een werkruimte. Een werkruimte kan gegevens bevatten voor veel resources, waardoor het moeilijk is om gegevens voor een bepaalde resource te isoleren. Resources kunnen ook gegevens naar meerdere werkruimten verzenden. Om deze ervaring te vereenvoudigen, staat de REST API toe om rechtstreeks query's uit te voeren op Azure-resources voor hun logboeken.
Antwoordindeling
Azure-resourcequery's produceren dezelfde antwoordvorm als query's die zijn gericht op een Log Analytics-werkruimte.
URL-indeling
Overweeg een Azure-resource met een volledig gekwalificeerde id:
/subscriptions/<sid>/resourceGroups/<rg>/providers/<providerName>/<resourceType>/<resourceName>
Een query voor de logboeken van deze resource op het directe API-eindpunt gaat naar de volgende URL:
https://api.loganalytics.azure.com/v1/subscriptions/<sid>/resourceGroups/<rg>/providers/<providerName>/<resourceType>/<resourceName>/query
Een query naar dezelfde resource via ARM gebruikt de volgende URL:
https://management.azure.com/subscriptions/<sid>/resourceGroups/<rg>/providers/<providerName>/<resourceType>/<resourceName>/providers/microsoft.insights/logs?api-version=2018-03-01-preview
In wezen is deze URL de volledig gekwalificeerde Azure-resource plus de extensieprovider: /providers/microsoft.insights/logs
.
Tabeltoegang en RBAC
De microsoft.insights
resourceprovider maakt een nieuwe set bewerkingen beschikbaar voor het beheren van de toegang tot logboeken op tabelniveau. Deze bewerkingen hebben de volgende indeling voor een tabel met de naam tableName
.
microsoft.insights/logs/<tableName>/read
Deze machtiging kan worden toegevoegd aan rollen met behulp van de eigenschap 'actions' om opgegeven tabellen toe te staan en de eigenschap 'notActions' om opgegeven tabellen niet toe te staan.
Toegangsbeheer voor werkruimten
Tegenwoordig kijken Azure-resourcequery's naar Log Analytics-werkruimten als mogelijke gegevensbronnen. Beheerders hebben echter mogelijk de toegang tot de werkruimte vergrendeld via RBAC-rollen. Standaard retourneert de API alleen resultaten van werkruimten waarvoor de gebruiker toegangsmachtigingen heeft.
Werkruimtebeheerders willen mogelijk Azure-resourcequery's gebruiken zonder bestaande RBAC te verbreken, waardoor een gebruiker mogelijk toegang heeft om de logboeken voor een Azure-resource te lezen, maar mogelijk niet gemachtigd is om een query uit te voeren op de werkruimte die deze logboeken bevat. Resource voor werkruimtebeheerders om logboeken weer te geven via een booleaanse eigenschap in de werkruimte. Hierdoor hebben gebruikers toegang tot de logboeken met betrekking tot de Azure-doelresource in een bepaalde werkruimte, zolang de gebruiker toegang heeft om de logboeken voor de Azure-doelresource te lezen.
Dit is de actie voor het bepalen van het bereik van toegang tot tabellen op werkruimteniveau:
microsoft.operationalinsights/workspaces/query/<tableName>/read
Foutreactiess
Hieronder vindt u een korte lijst met veelvoorkomende foutscenario's bij het uitvoeren van query's op Azure-resources, samen met een beschrijving van symptomatisch gedrag.
Azure-resource bestaat niet
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"
}
}
Geen toegang tot resource
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"
}
}
Geen logboeken van de resource of geen machtiging voor werkruimte die deze logboeken bevat
Afhankelijk van de exacte combinatie van gegevens en machtigingen, bevat het antwoord een 200 zonder resulterende gegevens of genereert het een syntaxisfout (4xx-fout).
Gedeeltelijke toegang
Er zijn enkele scenario's waarin een gebruiker gedeeltelijke machtigingen heeft om toegang te krijgen tot de logboeken van een bepaalde resource. Wanneer een gebruiker ontbreekt:
- Toegang tot de werkruimte met logboeken voor de Azure-resource
- Toegang tot de tabelreferentie in de query
Ze zien een normaal antwoord, met gegevensbronnen die de gebruiker niet heeft machtigingen voor toegang op de achtergrond uitgefilterd. Als u informatie wilt zien over de toegang van een gebruiker tot een Azure-resource, bevatten de onderliggende Log Analytics-werkruimten en specifieke tabellen de header Prefer: include-permissions=true
met aanvragen. Dit zorgt ervoor dat de JSON van het antwoord een sectie bevat die er ongeveer als volgt uitziet:
{
"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"
}
]
}
}
De resources
nettolading beschrijft een poging om query's uit te voeren op twee VM's. VM1 verzendt gegevens naar werkruimte WS1, terwijl VM2 gegevens naar twee werkruimten verzendt: WS2 en WS3. Bovendien is de gebruiker niet gemachtigd om query's uit te voeren op de SecurityEvent
tabellen of SecurityBaseline
voor de resource.
De dataSources
nettolading filtert de resultaten verder door te beschrijven op welke werkruimten de gebruiker een query kan uitvoeren. Hier heeft de gebruiker geen machtigingen voor het uitvoeren van query's op WS3 en een extra tabel gefilterd uit WS1.
Ga als volgt te werk om duidelijk aan te geven welke gegevens een dergelijke query zou retourneren:
- Logboeken voor VM1 in WS1, met uitzondering van Tables.Custom van de werkruimte.
- Logboeken voor VM2, met uitzondering van SecurityEvent en SecurityBaseline, in WS2.