Delen via


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 voor veel resources bevatten, waardoor het lastig is om gegevens voor een bepaalde resource te isoleren. Resources kunnen ook gegevens verzenden naar meerdere werkruimten. Om deze ervaring te vereenvoudigen, kan met de REST API rechtstreeks query's worden uitgevoerd 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 basis van 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.

Toegang tot tabellen 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 actions eigenschap om opgegeven tabellen en de notActions eigenschap toe te staan opgegeven tabellen niet toe te staan.

Toegangsbeheer voor werkruimten

Azure-resourcequery's kijken naar Log Analytics-werkruimten als mogelijke gegevensbronnen. Beheerders kunnen echter de toegang tot de werkruimte vergrendelen via RBAC-rollen. Standaard retourneert de API alleen resultaten van werkruimten die de gebruiker toegangsmachtigingen heeft.

Werkruimtebeheerders kunnen Azure-resourcequery's gebruiken zonder bestaande RBAC te verbreken. Met een booleaanse eigenschap in de werkruimte kunnen gebruikers met leesmachtigingen logboeken weergeven voor een specifieke Azure-resource, maar geen query uitvoeren op de werkruimte die deze logboeken bevat.

Dit is de actie voor het bereik van toegang tot tabellen op werkruimteniveau:

microsoft.operationalinsights/workspaces/query/<tableName>/read

Foutreactiess

Hier volgt 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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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 resource of geen machtiging voor werkruimte met deze logboeken

Afhankelijk van de exacte combinatie van gegevens en machtigingen bevat het antwoord ofwel een 200 zonder resulterende gegevens, of genereert een syntaxisfout (4xx-fout).

Gedeeltelijke toegang

Er zijn enkele scenario's waarin een gebruiker mogelijk gedeeltelijke machtigingen heeft voor toegang tot de logboeken van een bepaalde resource. Dit is het geval als de gebruiker ontbreekt:

  • Toegang tot de werkruimte met logboeken voor de Azure-resource.
  • Toegang tot de naslaginformatie over tabellen in de query.

Ze zien een normaal antwoord, met gegevensbronnen waarvoor de gebruiker geen machtigingen heeft om op de achtergrond toegang te krijgen tot uitgefilterd. Als u informatie wilt zien over de toegang van een gebruiker tot een Azure-resource, de onderliggende Log Analytics-werkruimten en specifieke tabellen, neemt u de header Prefer: include-permissions=true met aanvragen op. Dit zorgt ervoor dat de antwoord-JSON een sectie bevat zoals in het volgende voorbeeld:

{ 
    "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 een query uit te voeren op twee VM's. VM1 verzendt gegevens naar werkruimte WS1, terwijl VM2 gegevens verzendt naar twee werkruimten: WS2 en WS3. Bovendien is de gebruiker niet gemachtigd om een query uit te voeren op de SecurityEvent resource of SecurityBaseline tabellen.

De dataSources nettolading filtert de resultaten verder door te beschrijven welke werkruimten de gebruiker kan opvragen. Hier heeft de gebruiker geen machtigingen om een query uit te voeren op WS3 en een andere tabel die is gefilterd op WS1.

Als u duidelijk wilt aangeven welke gegevens een dergelijke query zou retourneren:

  • Logboeken voor VM1 in WS1, met uitzondering van tabellen. Aangepast vanuit de werkruimte.
  • Logboeken voor VM2, met uitzondering van SecurityEvent en SecurityBaseline, in WS2.