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


Запросы к журналам для ресурсов 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, но не запрашивать рабочую область, содержащую эти журналы.

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

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, за исключением таблиц. Пользователь из рабочей области.
  • Журналы для VM2 в WS2, за исключением SecurityEvent и SecurityBaseline.