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 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.