分享方式:


Azure Web 應用程式防火牆的資源記錄

您可以用記錄來監視 Web 應用程式防火牆的資源。 您可以儲存效能、存取和其他資料,或從資源取用資料來進行監視。

注意

建議您使用 Azure Az PowerShell 模組來與 Azure 互動。 若要開始使用,請參閱安裝 Azure PowerShell (部分機器翻譯)。 若要了解如何移轉至 Az PowerShell 模組,請參閱將 Azure PowerShell 從 AzureRM 移轉至 Az

診斷記錄

您可以在 Azure 中使用不同類型的記錄來管理和針對應用程式閘道進行疑難排解。 您可以透過入口網站存取其中一些記錄。 可以從 Azure Blob 儲存體擷取所有記錄,並且在不同的工具中進行檢視 (例如 Azure 監視器記錄、Excel 和 Power BI)。 您可以從下列清單進一步了解不同類型的記錄:

  • 活動記錄:您可以使用 Azure 活動記錄 來檢視已提交至您在 Azure 訂閱的所有作業及其狀態。 預設會收集活動記錄,您可在 Azure 入口網站中檢視它們。
  • 存取資源記錄:您可以使用此記錄來檢視應用程式閘道存取模式並分析重要資訊。 這包含呼叫者的 IP、所要求的 URL、回應延遲、傳回碼,以及輸入和輸出位元組。此記錄包含每個要求的個別記錄,並將該要求與處理該要求的唯一應用程式閘道產生關聯。 唯一應用程式閘道執行個體可以由屬性 instanceId 識別。
  • 效能資源記錄:您可以使用此記錄來檢視應用程式閘道執行個體的執行情況。 此記錄會擷取每個執行個體的效能資訊,包括提供的要求總數、輸送量 (以位元組為單位)、提供的總要求數、失敗的要求計數、狀況良好和狀況不良的後端執行個體計數。 每隔 60 秒會收集一次效能記錄。 該效能記錄僅適用於 v1 SKU。 針對 v2 SKU,請使用效能資料的計量
  • 防火牆資源記錄:您可以使用此記錄,檢視透過應用程式閘道的偵測或防止模式所記錄的要求。

注意

記錄僅適用於在 Azure Resource Manager 部署模型中部署的資源。 您無法將記錄使用於傳統部署模型中的資源。 若要深入了解這兩個模型,請參閱了解 Resource Manager 部署和傳統部署一文。

您有三個選項可用來排序您的記錄:

  • 儲存體帳戶:如果記錄會儲存一段較長的持續期間,並在需要時加以檢閱,則最好針對記錄使用儲存體帳戶。
  • 事件中樞:如果要整合其他安全性資訊和事件管理 (SEIM) 工具以利於在資源上取得警示,則事件中樞是絕佳的選項。
  • Azure 監視器記錄:Azure 監視器記錄最適合用來進行應用程式的一般即時監視,或查看趨勢。

透過 PowerShell 啟用記錄功能

每個 Resource Manager 資源都會自動啟用活動記錄功能。 您必須啟用存取和效能記錄功能,才能開始收集可透過這些記錄取得的資料。 使用下列步驟啟用記錄:

  1. 請記下您的儲存體帳戶的資源識別碼 (記錄資料的儲存之處)。 此值的形式為:/subscriptions/<subscriptionId>/resourceGroups/<資源群組名稱>/providers/Microsoft.Storage/storageAccounts/<儲存體帳戶名稱>。 您可以使用訂用帳戶中的所有儲存體帳戶。 您可以使用 Azure 入口網站來尋找此資訊。

    入口網站:儲存體帳戶的資源識別碼

  2. 請記下您的應用程式閘道的資源識別碼 (將為其啟用記錄功能)。 此值的形式為:/subscriptions/<subscriptionId>/resourceGroups/<資源群組名稱>/providers/Microsoft.Network/applicationGateways/<應用程式閘道名稱>。 您可以使用入口網站來尋找此資訊。

    入口網站:應用程式閘道的資源識別碼

  3. 使用下列 PowerShell Cmdlet 啟用資源診斷記錄功能:

    Set-AzDiagnosticSetting  -ResourceId /subscriptions/<subscriptionId>/resourceGroups/<resource group name>/providers/Microsoft.Network/applicationGateways/<application gateway name> -StorageAccountId /subscriptions/<subscriptionId>/resourceGroups/<resource group name>/providers/Microsoft.Storage/storageAccounts/<storage account name> -Enabled $true     
    

提示

活動記錄不需要個別的儲存體帳戶。 將儲存體用於記錄存取和效能會產生服務費用。

透過 Azure 入口網站啟用記錄功能

  1. 在 Azure 入口網站中,找到您的資源並按一下 [診斷設定]

    應用程式閘道有三個記錄:

    • 存取記錄檔
    • 效能記錄檔
    • 防火牆記錄檔
  2. 選取 [新增診斷設定]。

  3. 該 [診斷設定] 頁面中提供資源記錄的設定。 在此範例中,Log Analytics 會儲存記錄。 您也可以使用事件中樞、儲存體帳戶或合作夥伴解決方案來儲存資源記錄。

    顯示診斷設定的螢幕擷取畫面。

  4. 輸入要設定的名稱、確認該設定,然後選取 [儲存]

活動記錄檔

根據預設,Azure 會產生活動記錄。 記錄會在 Azure 的事件記錄存放區中保留 90 天。 閱讀檢視事件和活動記錄一文,深入了解這些記錄。

存取記錄檔

只有當您如上述步驟所述,在每個應用程式閘道上啟用存取記錄,才會產生存取記錄。 資料會儲存在您啟用記錄功能時指定的儲存體帳戶中。 應用程式閘道的每次存取會以 JSON 格式來記錄,如下列 v1 範例所示:

Description
instanceId 處理要求的應用程式閘道執行個體。
clientIP 要求的原始 IP。
clientPort 要求的原始連接埠。
httpMethod 要求使用的 HTTP 方法。
requestUri 接收之要求的 URI。
RequestQuery 伺服器路由:已傳送要求的後端集區執行個體。
X-AzureApplicationGateway-LOG-ID:用於要求的相互關聯識別碼。 它可以用來針對後端伺服器上的流量問題進行疑難排解。
SERVER-STATUS:應用程式閘道從後端接收的 HTTP 回應碼。
UserAgent HTTP 要求標頭中的使用者代理程式。
httpStatus 應用程式閘道傳回用戶端的 HTTP 狀態碼。
httpVersion 要求的 HTTP 版本。
receivedBytes 接收的封包大小,單位為位元組。
sentBytes 傳送的封包大小,單位為位元組。
timeTaken 處理要求並傳送其回應所花費的時間長度,單位為毫秒。 算法是從應用程式閘道收到 HTTP 要求的回應第一個位元組的時間,到回應傳送作業完成時的時間間隔。 請務必注意,timeTaken 欄位通常包含要求和回應封包在網路上傳輸的時間。
sslEnabled 與後端集區的通訊是否使用 TLS/SSL。 有效值為 on 和 off。
host 要求已傳送至後端伺服器的主機名稱。 如果後端主機名稱已覆寫,此名稱將反射那個名稱。
originalHost 從用戶端應用程式閘道已接收要求的主機名稱。
{
    "resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/PEERINGTEST/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
    "operationName": "ApplicationGatewayAccess",
    "timestamp": "2017-04-26T19:27:38Z",
    "category": "ApplicationGatewayAccessLog",
    "properties": {
        "instanceId": "ApplicationGatewayRole_IN_0",
        "clientIP": "203.0.113.97",
        "clientPort": 46886,
        "httpMethod": "GET",
        "requestUri": "/phpmyadmin/scripts/setup.php",
        "requestQuery": "X-AzureApplicationGateway-CACHE-HIT=0&SERVER-ROUTED=10.4.0.4&X-AzureApplicationGateway-LOG-ID=aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e&SERVER-STATUS=404",
        "userAgent": "-",
        "httpStatus": 404,
        "httpVersion": "HTTP/1.0",
        "receivedBytes": 65,
        "sentBytes": 553,
        "timeTaken": 205,
        "sslEnabled": "off",
        "host": "www.contoso.com",
        "originalHost": "www.contoso.com"
    }
}

針對應用程式閘道和 WAF v2,該記錄會顯示一些詳細資訊:

Description
instanceId 處理要求的應用程式閘道執行個體。
clientIP 要求的原始 IP。
clientPort 要求的原始連接埠。
httpMethod 要求使用的 HTTP 方法。
requestUri 接收之要求的 URI。
UserAgent HTTP 要求標頭中的使用者代理程式。
httpStatus 應用程式閘道傳回用戶端的 HTTP 狀態碼。
httpVersion 要求的 HTTP 版本。
receivedBytes 接收的封包大小,單位為位元組。
sentBytes 傳送的封包大小,單位為位元組。
timeTaken 處理要求並傳送其回應所花費的時間長度,單位為毫秒。 算法是從應用程式閘道收到 HTTP 要求的回應第一個位元組的時間,到回應傳送作業完成時的時間間隔。 請務必注意,timeTaken 欄位通常包含要求和回應封包在網路上傳輸的時間。
sslEnabled 與後端集區的通訊是否使用 TLS。 有效值為 on 和 off。
sslCipher 將使用 TLS 通訊來加密套件 (如果已啟用 TLS)。
sslProtocol 將使用 TLS 通訊協定 (如果已啟用 TLS)。
serverRouted 應用程式閘道將要求路由傳送至的後端伺服器。
serverStatus 後端伺服器的 HTTP 狀態碼。
serverResponseLatency 來自後端伺服器的回應延遲。
host 要求在主機標頭中列出的位址。
{
    "resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/PEERINGTEST/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
    "operationName": "ApplicationGatewayAccess",
    "time": "2017-04-26T19:27:38Z",
    "category": "ApplicationGatewayAccessLog",
    "properties": {
        "instanceId": "appgw_1",
        "clientIP": "203.0.113.97",
        "clientPort": 46886,
        "httpMethod": "GET",
        "requestUri": "/phpmyadmin/scripts/setup.php",
        "userAgent": "-",
        "httpStatus": 404,
        "httpVersion": "HTTP/1.0",
        "receivedBytes": 65,
        "sentBytes": 553,
        "timeTaken": 205,
        "sslEnabled": "off",
        "sslCipher": "",
        "sslProtocol": "",
        "serverRouted": "104.41.114.59:80",
        "serverStatus": "200",
        "serverResponseLatency": "0.023",
        "host": "www.contoso.com",
    }
}

效能記錄檔

只有當您如上述步驟所述,在每個應用程式閘道上啟用效能記錄,才會產生效能記錄。 資料會儲存在您啟用記錄功能時指定的儲存體帳戶中。 產生效能記錄資料的時間間隔為 1 分鐘。 僅適用於 v1 SKU。 針對 v2 SKU,請使用效能資料的計量。 會記錄下列資料:

Description
instanceId 將產生此應用程式閘道執行個體的效能資料。 應用程式閘道若有多個執行個體,則是一個執行個體一行資料。
healthyHostCount 後端集區中狀況良好主機的數目。
unHealthyHostCount 後端集區中狀況不良主機的數目。
requestCount 處理的要求數目。
延遲 從執行個體到處理要求的後端之間的要求平均延遲,單位為毫秒。
failedRequestCount 失敗的要求數目。
throughput 自最後一個記錄以來的平均輸送量,測量單位為每秒位元組。
{
    "resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/{resourceGroupName}/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
    "operationName": "ApplicationGatewayPerformance",
    "time": "2016-04-09T00:00:00Z",
    "category": "ApplicationGatewayPerformanceLog",
    "properties":
    {
        "instanceId":"ApplicationGatewayRole_IN_1",
        "healthyHostCount":"4",
        "unHealthyHostCount":"0",
        "requestCount":"185",
        "latency":"0",
        "failedRequestCount":"0",
        "throughput":"119427"
    }
}

注意

延遲的計算是從收到 HTTP 要求的第一個位元組時算起,到送出 HTTP 回應的最後一個位元組時結束。 是應用程式閘道處理時間,加上網路傳送到後端的時間,再加上後端處理要求所花時間的總和。

防火牆記錄檔

只有當您如上述步驟所述,在每個應用程式閘道上啟用防火牆記錄,才會產生防火牆記錄。 此記錄也需要在應用程式閘道上設定該 Web 應用程式防火牆。 資料會儲存在您啟用記錄時所指定的目的地。 會記錄下列資料:

Description
instanceId 將產生此應用程式閘道執行個體的防火牆資料。 應用程式閘道若有多個執行個體,則是一個執行個體一行資料。
clientIp 要求的原始 IP。
requestUri 接收之要求的 URL。
ruleSetType 規則集類型。 可用的值是 OWASP。
ruleSetVersion 規則集版本。 可用值為 2.2.9 和 3.0。
ruleId 觸發事件的規則識別碼。
message 方便使用的觸發事件訊息。 詳細資料區段中會提供詳細資料。
action 原則模式:偵測
- 已偵測 - 這是 WAF 在偵測模式下的唯一動作。 已符合指定規則的所有條件,並記錄要求,然後將其傳遞至後端。

原則模式:防止
- 已允許 - 已符合指定規則的所有條件,並將要求傳遞至後端。
- 已封鎖 - 已符合指定規則的所有條件,並封鎖要求。
- 已符合 - 已符合指定規則的一/多個條件,但封鎖或通過要求的決定需要進一步的評估,並將根據最終的異常評分規則進行評估。

原則模式:JS 查問
- JSChallengeIssued:由於查問許可遺漏/無效、答案遺漏而發佈。

此記錄是在用戶端首次要求存取 Web 應用程式時建立的,並且以前沒有受到查問。 此用戶端接收 JS 查問頁面並繼續計算 JS 查問。 計算成功後,用戶端將獲授與驗證 Cookie。

- JSChallengePass:由於查問答案有效,已通過。

此記錄是在用戶端解决 JS 查問並重新提交具有正確答案的要求時建立的。 在這種情況下,Azure WAF 驗證 Cookie 並繼續處理剩餘的規則,而不產生另一個 JS 查問。

- JSChallengeValid:由於有效查問而登入/通過

此記錄是在用戶端先前解决了挑戰時建立的。 在這種情況下,Azure WAF 會記錄要求並繼續處理剩餘的規則。

- JSChallengeBlock:已封鎖

此記錄是在 JS 查問計算失敗時建立的。
site 將產生此網站的記錄。 目前只列出 Global,因為規則為全域。
詳細資料 觸發事件的詳細資料。
details.message 規則的描述。
details.data 在符合規則之要求中找到的特定資料。
details.file 包含規則的組態檔。
details.line 觸發事件的組態檔中的行號。
hostname 應用程式閘道的主機名稱或 IP 位址。
transactionId 指定交易的唯一識別碼,可協助將相同要求間所發生的多個規則違規群組分組。
policyId 與應用程式閘道、接聽程式或路徑相關聯的防火牆原則唯一識別碼。
policyScope 原則的位置 - 值可以為 「全域」、「接聽程式」或「位置」。
policyScopeName 已套用原則的物件名稱。
{
  "resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/{resourceGroupName}/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
  "operationName": "ApplicationGatewayFirewall",
  "time": "2017-03-20T15:52:09.1494499Z",
  "category": "ApplicationGatewayFirewallLog",
  "properties": {
      "instanceId": "ApplicationGatewayRole_IN_0",
      "clientIp": "203.0.113.147",
      "requestUri": "/",
      "ruleSetType": "OWASP",
      "ruleSetVersion": "3.0",
      "ruleId": "920350",
      "ruleGroup": "920-PROTOCOL-ENFORCEMENT",
      "message": "Host header is a numeric IP address",
      "action": "Matched",
      "site": "Global",
      "details": {
        "message": "Warning. Pattern match \"^[\\\\d.:]+$\" at REQUEST_HEADERS:Host ....",
        "data": "127.0.0.1",
        "file": "rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf",
        "line": "791"
      },
      "hostname": "127.0.0.1",
      "transactionId": "16861477007022634343",
      "policyId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/drewRG/providers/Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies/perListener",
      "policyScope": "Listener",
      "policyScopeName": "httpListener1"
    }
  }
}

檢視及分析活動記錄

您可以使用下列任何方法來檢視及分析活動記錄資料:

  • Azure 工具:透過 Azure PowerShell、Azure CLI、Azure REST API 或 Azure 入口網站,從活動記錄擷取資訊。 活動作業與 Resource Manager 一文會詳述每個方法的逐步指示。
  • Power BI:如果還沒有 Power BI 帳戶,您可以免費試用。 透過使用 Power BI 範本應用程式,可以分析您的資料。

檢視及分析存取、效能和防火牆記錄

Azure 監視器記錄可以從您的 Blob 儲存體帳戶收集計數器和事件記錄。 它也納入了視覺效果和強大的搜尋功能來分析您的記錄。

您也可以連接到儲存體帳戶並擷取存取和效能記錄的 JSON 記錄項目。 下載 JSON 檔案後,可以將它們轉換成 CSV,並在 Excel、PowerBI 或任何其他資料視覺化工具中檢視它們。

提示

如果您熟悉 Visual Studio 以及在 C# 中變更常數和變數值的基本概念,您可以使用 GitHub 所提供的記錄檔轉換器工具 (英文)

透過 GoAccess 分析存取記錄

我們已發佈會安裝並執行常用 GoAccess 記錄分析器的 Resource Manager 範本,該分析器適用於應用程式閘道存取記錄。 GoAccess 提供實用的 HTTP 流量統計資料,例如非重複訪客、要求的檔案、主機、作業系統、瀏覽器、HTTP 狀態碼等等。 如需詳細資訊,請參閱 GitHub 中 Resource Manager 範本資料夾中的讀我檔案

下一步