共用方式為


查詢 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。 此外,使用者沒有查詢 SecurityEventSecurityBaseline 數據表資源的許可權。

dataSources 承載會藉由描述使用者可以查詢的工作區,進一步篩選結果。 在這裡,用戶沒有查詢 WS3 的許可權,以及篩選出 WS1 的另一個數據表。

若要清楚陳述這類查詢會傳回的資料:

  • WS1 中 VM1 的記錄,不包括數據表。 從工作區自定義。
  • 在 WS2 中排除 SecurityEvent 和 SecurityBaseline 的 VM2 記錄。