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 資源都會自動啟用活動記錄功能。 您必須啟用存取和效能記錄功能,才能開始收集可透過這些記錄取得的資料。 使用下列步驟啟用記錄:
請記下您的儲存體帳戶的資源識別碼 (記錄資料的儲存之處)。 此值的形式為:/subscriptions/<subscriptionId>/resourceGroups/<資源群組名稱>/providers/Microsoft.Storage/storageAccounts/<儲存體帳戶名稱>。 您可以使用訂用帳戶中的所有儲存體帳戶。 您可以使用 Azure 入口網站來尋找此資訊。
請記下您的應用程式閘道的資源識別碼 (將為其啟用記錄功能)。 此值的形式為:/subscriptions/<subscriptionId>/resourceGroups/<資源群組名稱>/providers/Microsoft.Network/applicationGateways/<應用程式閘道名稱>。 您可以使用入口網站來尋找此資訊。
使用下列 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 入口網站啟用記錄功能
在 Azure 入口網站中,找到您的資源並按一下 [診斷設定]。
應用程式閘道有三個記錄:
- 存取記錄檔
- 效能記錄檔
- 防火牆記錄檔
選取 [新增診斷設定]。
該 [診斷設定] 頁面中提供資源記錄的設定。 在此範例中,Log Analytics 會儲存記錄。 您也可以使用事件中樞、儲存體帳戶或合作夥伴解決方案來儲存資源記錄。
輸入要設定的名稱、確認該設定,然後選取 [儲存]。
活動記錄檔
根據預設,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 範本資料夾中的讀我檔案。
下一步
- 利用 Azure 監視器記錄將計數器和事件記錄視覺化。
- 使用 Power BI 將您的 Azure 活動記錄視覺化部落格文章。
- 在 Power BI 和其他工具中檢視和分析 Azure 活動記錄部落格文章。