Запросы к журналам для ресурсов 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.