Teilen über


Abfragen von Protokollen für Azure-Ressourcen

In Azure Monitor Log Analytics werden Abfragen in der Regel im Kontext eines Arbeitsbereichs ausgeführt. Ein Arbeitsbereich kann Daten für zahlreiche Ressourcen enthalten. Dadurch kann es schwierig werden, Daten für eine bestimmte Ressource zu isolieren. Ressourcen können darüber hinaus Daten an mehrere Arbeitsbereiche senden. Zur Vereinfachung dieses Vorgangs ermöglicht die REST-API das direkte Abfragen von Azure-Ressourcen nach ihren Protokollen.

Antwortformat

Azure-Ressourcenabfragen erzeugen das gleiche Antwortformat wie Abfragen für einen Log Analytics-Arbeitsbereich.

URL-Format

Stellen Sie sich eine Azure-Ressource mit einem vollqualifizierten Bezeichner vor:

/subscriptions/<sid>/resourceGroups/<rg>/providers/<providerName>/<resourceType>/<resourceName>

Eine Abfrage für die Protokolle dieser Ressource für den direkten API-Endpunkt würde an die folgende URL gesendet werden:

https://api.loganalytics.azure.com/v1/subscriptions/<sid>/resourceGroups/<rg>/providers/<providerName>/<resourceType>/<resourceName>/query

Eine Abfrage an die gleiche Ressource über ARM würde die folgende URL verwenden:

https://management.azure.com/subscriptions/<sid>/resourceGroups/<rg>/providers/<providerName>/<resourceType>/<resourceName>/providers/microsoft.insights/logs?api-version=2018-03-01-preview

Im Wesentlichen handelt es sich bei dieser URL um die vollqualifizierte Azure-Ressource und den Erweiterungsanbieter: /providers/microsoft.insights/logs.

Tabellenzugriff und RBAC

Der Ressourcenanbieter microsoft.insights macht neue Vorgänge zum Steuern des Zugriffs auf Protokolle auf Tabellenebene verfügbar. Diese Vorgänge haben das folgende Format für eine Tabelle mit dem Namen tableName:

microsoft.insights/logs/<tableName>/read 

Diese Berechtigung kann Rollen hinzugefügt werden. Mit der Eigenschaft actions werden dabei angegebene Tabellen zugelassen und mit der Eigenschaft notActions werden sie nicht zugelassen.

Zugriffssteuerung für Arbeitsbereiche

Log Analytics-Arbeitsbereiche sind mögliche Datenquellen für Azure-Ressourcenabfragen. Administratoren können jedoch den Zugriff auf den Arbeitsbereich mithilfe von RBAC-Rollen sperren. Standardmäßig gibt die API nur Ergebnisse aus Arbeitsbereichen zurück, für die der Benutzer über Zugriffsberechtigungen verfügt.

Arbeitsbereichsadministratoren können Azure-Ressourcenabfragen verwenden, ohne die vorhandene RBAC zu unterbrechen. Mit einer booleschen Eigenschaft im Arbeitsbereich können Benutzer mit Leseberechtigung Protokolle einer bestimmten Azure-Ressource einsehen, den Arbeitsbereich, der diese Protokolle enthält, jedoch nicht abfragen.

Die folgende Aktion dient zum Beschränken des Zugriffs auf Tabellen auf Arbeitsbereichsebene:

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

Fehlercodes

Hier finden Sie eine kurze Liste häufiger Fehlerszenarios beim Abfragen von Azure-Ressourcen sowie eine Beschreibung des symptomatischen Verhaltens.

Die Azure-Ressource ist nicht vorhanden.

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" 
    }
}

Kein Zugriff auf die Ressource

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"
        }
    } 
}

Keine Protokolle von der Ressource oder keine Berechtigung für den Arbeitsbereich, der diese Protokolle enthält

Abhängig von der genauen Kombination aus Daten und Berechtigungen enthält die Antwort entweder den Fehlercode 200 ohne Ergebnisdaten, oder es wird ein Syntaxfehler (Fehlercode 4xx) zurückgegeben.

Teilzugriff

Es gibt einige Szenarien, in denen ein Benutzer möglicherweise über Teilberechtigungen für den Zugriff auf die Protokolle einer bestimmten Ressource verfügt. Dies ist der Fall, wenn dem Benutzer eines der folgenden Elemente fehlt:

  • Zugriff auf den Arbeitsbereich, der die Protokolle für die Azure-Ressource enthält
  • Zugriff auf die Tabellen, auf die in der Abfrage verwiesen wird

Sie erhalten eine normale Antwort, bei der die Datenquellen im Hintergrund herausgefiltert wurden, für die der Benutzer keine Zugriffsberechtigungen hat. Um Informationen zum Zugriff eines Benutzers auf eine Azure-Ressource, die zugrunde liegenden Log Analytics-Arbeitsbereiche und bestimmte Tabellen anzuzeigen, schließen Sie den Header Prefer: include-permissions=true in die Abfragen ein. Dies hat zur Folge, dass die JSON-Antwort einen Abschnitt ähnlich dem folgenden Beispiel enthält:

{ 
    "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" 
            } 
        ] 
    } 
}

Die resources-Nutzlast beschreibt einen Versuch, zwei virtuelle Computer abzufragen. VM1 sendet Daten an den Arbeitsbereich WS1, während VM2 Daten an zwei Arbeitsbereiche sendet: WS2 und WS3. Darüber hinaus verfügt der Benutzer nicht über die Berechtigung zum Abfragen der Tabellen SecurityEvent oder SecurityBaseline der Ressource.

Die dataSources-Nutzlast filtert die Ergebnisse weiter, indem beschrieben wird, welche Arbeitsbereiche der Benutzer abfragen kann. Hier hat der Benutzer keine Berechtigungen zum Abfragen von WS3 und einer anderen Tabelle, die aus WS1 herausgefiltert wurde.

So geben Sie eindeutig an, welche Daten eine solche Abfrage zurückgeben würde:

  • Protokolle für VM1 in WS1 mit Ausnahme von Tabellen Benutzerdefiniert aus dem Arbeitsbereich
  • Protokolle für VM2, mit Ausnahme von SecurityEvent und SecurityBaseline, in WS2