查詢 Azure 資源的記錄
在 Azure 監視器 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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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
承載描述嘗試查詢兩部 VM。 VM1 會將資料傳送至工作區 WS1,而 VM2 會將資料傳送至兩個工作區:WS2 和 WS3。 此外,使用者沒有查詢 SecurityEvent
或 SecurityBaseline
數據表資源的許可權。
dataSources
承載會藉由描述使用者可以查詢的工作區,進一步篩選結果。 在這裡,用戶沒有查詢 WS3 的許可權,以及篩選出 WS1 的另一個數據表。
若要清楚陳述這類查詢會傳回的資料:
- WS1 中 VM1 的記錄,不包括數據表。 從工作區自定義。
- 在 WS2 中排除 SecurityEvent 和 SecurityBaseline 的 VM2 記錄。