使用 Azure 防火牆 的 HTTP 標頭插入功能,為 Web 流量新增或修改 HTTP 標頭。 透過自訂標頭,組織能執行安全政策、嵌入認證權杖,並與後端服務整合。 此功能提升安全性、協助合規性,並優化流量管理,尤其適用於需要特定標頭用於存取或識別的應用。 依應用程式規則設定 HTTP 標頭插入。 當流量符合你設定的 HTTP 標頭插入規則時,Azure 防火牆 會插入已設定的 HTTP 標頭。
支援的案例和限制
HTTP 標頭插入功能是針對特定使用情境設計,並有一定的限制。
支援劇本
- 在 Premium SKU 中,此功能支援 HTTP 流量,以及透過 TLS 檢查解密後的 HTTPS 流量。
- 在標準與基本 SKU 中,此功能支援 HTTP 流量。
- 你也可以透過使用 Azure 防火牆 Policy Draft + Deployment 來設定此功能。
局限性
請留意以下限制:
- 你不能在應用程式規則中插入某些保留標頭作為自訂 HTTP 標頭。 下表列出了依類別分組的保留標頭。
- 插入 HTTP 標頭可以減少規則集合群組中的規則總數,因此 HTTP 標頭插入時要謹慎。 如果你在某個規則集合群組達到 JSON 限制,請建立新的規則集合群組並在那裡新增規則。
| Category |
保留的標頭 |
| 一般情況與關聯 |
host、connection、content-length、transfer-encoding、upgrade、via、te、trailer |
| 認證與 Cookie |
proxy-authorization、、 proxy-authenticate、 authorization、 cookie、 set-cookie |
| 安全性 |
content-security-policy、strict-transport-security、x-content-type-options、x-frame-options、referrer-policy、x-xss-protection、public-key-pins、expect-ct、x-xsrf-token |
| Forwarding |
x-forwarded-for、x-forwarded-proto、x-forwarded-host、x-forwarded-port、x-forwarded-scheme、forwarded |
| Other |
metadata |
設定步驟
以下章節將逐步指導 HTTP 標頭插入的操作。
這些步驟假設你已經有現有的 Azure 防火牆 政策(fw-policy以下範例中)。 如果你還沒有,請參考部署與設定 Azure 防火牆 政策。
Note
對啟用 TLS 檢查的 HTTPS 流量執行相同步驟。
標頭名稱最多可包含 100 個字元。
標頭值最多可有 16K(16,000) 個字元。
每個應用程式規則中 HTTP 標頭的最大長度(HTTP 標頭名稱與 HTTP 標頭值的總和)為 16KB(16,384 位元組)。
在 Azure 入口網站中,切換到現有的防火牆政策或建立新的。
選擇規則,然後選擇應用程式規則。
建立新的應用程式規則或編輯現有的規則。
在規則設定窗格中,找到 HTTP 標頭插入 區塊。
透過指定標頭名稱和值來新增所需的標頭。 你可以根據需要新增多個標頭。
儲存規則。
要確認標頭設定正確,請重新開啟規則並確認 HTTP 標頭插入 區塊顯示你新增的標頭名稱和值。
請執行 az login 指令登入你的 Azure 帳號。
透過 az network firewall policy-collection-group create 建立規則收集群組。
az network firewall policy rule-collection-group create \
--name rcg-c \
--policy-name fw-policy \
--resource-group test-rg \
--priority 10000
使用 az network firewall policy rule-collection-group collection add-filter-collection 新增包含具有自訂 HTTP 標頭之應用程式規則的規則集合。
az network firewall policy rule-collection-group collection add-filter-collection \
--policy-name "fw-policy" \
--resource-group "test-rg" \
--rcg-name "rcg-c" \
--name "app_collection_1" \
--collection-priority 10003 \
--action Allow \
--rule-name "app_rule_1" \
--rule-type ApplicationRule \
--target-fqdns "*.microsoft.com" "*.azure.com" \
--source-addresses "10.0.0.5" "10.0.0.6" \
--protocols Http=80 \
--description "Allow access to Microsoft and Azure domains with header insertion" \
--http-headers-to-insert "Restrict-Access-To-Tenants=contoso.com,fabrikam.onmicrosoft.com" "Restrict-Access-Context=aaaabbbb-0000-cccc-1111-dddd2222eeee"
請使用 az network firewall policy rule-collection-group show 驗證規則已建立,且標頭已正確設定。
az network firewall policy rule-collection-group show \
--policy-name fw-policy \
--resource-group test-rg \
--name rcg-c
此指令會回傳規則收集群組 rcg-c的完整配置。 搜尋你的規則名稱輸出(例如, app_rule_1),並驗證其屬性。
請使用 New-AzFirewallPolicyApplicationRule 建立新的應用程式規則。
$rule = New-AzFirewallPolicyApplicationRule `
-Name "app_rule_1" `
-SourceAddress "10.0.0.5", "10.0.0.6" `
-Protocol "Http:80" `
-TargetFqdn "*.microsoft.com", "*.azure.com"
使用 New-AzFirewallPolicyApplicationRuleCustomHttpHeader 建立自訂 HTTP 標頭,並將其加入規則中。
$header1 = New-AzFirewallPolicyApplicationRuleCustomHttpHeader -HeaderName "Restrict-Access-To-Tenants" -HeaderValue "contoso.com,fabrikam.onmicrosoft.com"
$header2 = New-AzFirewallPolicyApplicationRuleCustomHttpHeader -HeaderName "Restrict-Access-Context" -HeaderValue "aaaabbbb-0000-cccc-1111-dddd2222eeee"
$rule.AddCustomHttpHeaderToInsert($header1)
$rule.AddCustomHttpHeaderToInsert($header2)
使用 New-AzFirewallPolicyFilterRuleCollection 建立包含該規則的應用程式規則集合。
$collection = New-AzFirewallPolicyFilterRuleCollection `
-Name "app_collection_1" `
-Priority 10003 `
-Rule @($rule) `
-ActionType "Allow"
使用 New-AzFirewallPolicyRuleCollectionGroup 建立一個包含規則集合的規則集合群組。
New-AzFirewallPolicyRuleCollectionGroup `
-Name "rcg-c" `
-FirewallPolicyName "fw-policy" `
-ResourceGroupName "test-rg" `
-Priority 10000 `
-RuleCollection $collection
請使用 Get-AzFirewallPolicyRuleCollectionGroup 驗證規則已建立且標頭設定正確。
Get-AzFirewallPolicyRuleCollectionGroup `
-AzureFirewallPolicyName "fw-policy" `
-ResourceGroupName "test-rg" `
-Name "rcg-c"
此指令會回傳規則收集群組 rcg-c的完整配置。 搜尋你的規則名稱輸出(例如, app_rule_1),並驗證其屬性。
下一步