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