查詢 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 資源的記錄,但可能無權查詢包含這些記錄的工作區。 工作區管理員資源,可透過工作區上的布林屬性來檢視記錄。 只要使用者有權讀取目標 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
承載描述嘗試查詢兩部 VM。 VM1 會將資料傳送至工作區 WS1,而 VM2 會將資料傳送至兩個工作區:WS2 和 WS3。 此外,使用者沒有查詢 SecurityEvent
或 SecurityBaseline
資料表是否有資源的權限。
dataSources
承載會藉由描述使用者可以查詢的工作區,進一步篩選結果。 在這裡,使用者沒有權限,無法查詢 WS3 以及從 WS1 中篩選掉的額外資料表。
若要清楚陳述這類查詢會傳回的資料:
- WS1 中 VM1 的記錄,不包括工作區中的 Tables.Custom。
- 在 WS2 中排除 SecurityEvent 和 SecurityBaseline 的 VM2 記錄。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應