Поделиться через


Запросы к журналам для ресурсов Azure

В Azure Monitor Log Analytics запросы обычно выполняются в контексте рабочей области. Рабочая область может содержать данные для множества ресурсов, что усложняет их изоляцию для определенного ресурса. Ресурсы могут дополнительно отправлять данные в несколько рабочих областей. Чтобы упростить этот процесс, REST API позволяет выполнять запросы напрямую к журналам ресурсов Azure.

Формат ответа

Запросы ресурсов Azure формируют ту же форму ответа, что и запросы для рабочей области Log Analytics.

Формат URL-адреса

Рассмотрим ресурс Azure с полным идентификатором:

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

Запрос к журналам этого ресурса для конечной точки прямых вызовов API отправляется по такому URL-адресу:

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

Запрос к тому же ресурсу через ARM будет использовать следующий URL-адрес:

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

По сути, этот URL-адрес обозначает полный ресурс Azure и поставщик расширений: /providers/microsoft.insights/logs.

Доступ к таблицам и RBAC

Поставщик ресурсов microsoft.insights предлагает новый набор операций для управления доступом к журналам на уровне таблицы. Эти операции используют описанный ниже формат для таблицы с именем tableName.

    microsoft.insights/logs/<tableName>/read 

Это разрешение можно добавить в роли с помощью свойства actions, чтобы разрешить указанные таблицы, или с помощью свойства notActions, чтобы запретить их.

Контроль доступа к рабочей области

Сейчас запросы ресурсов Azure выполняют поиск в рабочих областях Log Analytics как возможных источниках данных. Однако администраторы могли заблокировать доступ к рабочей области через роли RBAC. По умолчанию API возвращает только результаты из рабочих областей, к которым у пользователя есть разрешения на доступ.

Администраторы рабочей области могут использовать запросы ресурсов Azure без нарушения существующих правил RBAC, создавая сценарии, в котором у пользователя есть доступ для чтения к журналам для ресурса Azure, но нет разрешений для отправки запросов к рабочей области, содержащей эти журналы. Это ресурс администраторов рабочей области, позволяющий просматривать журналы с помощью логического свойства в рабочей области. Это позволяет пользователю обращаться к журналам, относящимся к целевому ресурсу Azure в определенной рабочей области, если у пользователя есть доступ для чтения к журналам для целевого ресурса Azure.

Это действие для определения области доступа к таблицам на уровне рабочей области.

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

Сообщения об ошибках

Ниже приведен краткий список распространенных сценариев сбоев при запросе ресурсов Azure с описанием характерных эффектов.

Ресурс Azure не существует.

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

Нет доступа к ресурсу

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

Нет журналов из ресурса, или нет разрешения для рабочей области, содержащей эти журналы

В зависимости от конкретного сочетания данных и разрешений ответ будет содержать код 200 без результирующих данных или будет возникать ошибка синтаксиса (код 4xx).

Частичный доступ

Существует несколько сценариев, в которых у пользователя могут быть частичные разрешения на доступ к журналам определенного ресурса. Предположим, у пользователя отсутствует:

  • доступ к рабочей области, содержащей журналы для ресурса Azure, или
  • доступ к ссылке на таблицы в запросе.

Он получит нормальный ответ, в котором источники данных, на доступ к которым у него нет разрешений, будут автоматически отфильтрованы. Чтобы просмотреть сведения о доступе пользователя к ресурсу Azure, базовым рабочим областям Log Analytics и конкретным таблицам, добавьте в запрос заголовок Prefer: include-permissions=true. В результате JSON-код ответа будет содержать раздел следующего вида:

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

Полезные данные resources описывают попытку выполнить запрос к двум виртуальным машинам. Машина VM1 отправляет данные в рабочую область WS1, а VM2 — в две рабочие области: WS2 и WS3. Кроме того, у пользователя нет разрешений на запрос к таблицам SecurityEvent и SecurityBaseline для ресурса.

Полезные данные dataSources отфильтровывают результаты, описывая, какие рабочие области пользователь имеет право запрашивать. У пользователя нет разрешений на отправку запросов к области WS3, и из WS1 отфильтровывается дополнительная таблица.

Вот какие данные будет возвращать запрос:

  • Журналы для VM1 в WS1, за исключением Tables.Custom из рабочей области.
  • Журналы для VM2 в WS2, за исключением SecurityEvent и SecurityBaseline.