共用方式為


查詢 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。 此外,使用者沒有查詢 SecurityEventSecurityBaseline 資料表是否有資源的權限。

dataSources 承載會藉由描述使用者可以查詢的工作區,進一步篩選結果。 在這裡,使用者沒有權限,無法查詢 WS3 以及從 WS1 中篩選掉的額外資料表。

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

  • WS1 中 VM1 的記錄,不包括工作區中的 Tables.Custom。
  • 在 WS2 中排除 SecurityEvent 和 SecurityBaseline 的 VM2 記錄。