設定 Azure App Service 存取限制

您可設定存取限制,定義以優先順序排序的允許/拒絕清單,控制應用程式的網路存取權。 此清單可包含 IP 位址或 Azure 虛擬網路子網路。 有一或多個項目時,清單結尾便會隱含一項全部拒絕規則。 若要深入了解存取限制,請移至存取限制概觀

存取限制功能適用於裝載 Azure App Service 的所有工作負載。 工作負載可包含 Web 應用程式、API 應用程式、Linux 應用程式、Linux 自訂容器和函數。

若應用程式收到要求,則會根據存取限制清單中的規則來評估「來源」位址。 若 FROM 位址位於以 Microsoft.Web 服務端點所設定的子網路中,則來源子網路就會與您存取限制清單中的虛擬網路規則進行比較。 若根據清單規則不允許該位址進行存取,該服務則會回覆 HTTP 403 狀態碼。

存取限制功能在 App Service 前端角色中實作,這類角色為背景工作角色主機 (程式碼執行位置) 的上游。 因此,存取限制實際上是網路存取控制清單 (ACL)。

從 Azure 虛擬網路限制存取 Web 應用程式的功能使用服務端點。 透過服務端點,您可限制所選子網路對多租用戶服務的存取權。 這不適用於將流量限制為 App Service 環境所裝載的應用程式。 若使用 App Service 環境,則可套用 IP 位址規則,以控制您的應用程式存取權。

注意

服務端點必須在網路端及所用的 Azure 服務上同時啟用。 如需支援服務端點的 Azure 服務清單,請參閱虛擬網路服務端點

Diagram of the flow of access restrictions.

在入口網站中管理存取限制規則

若要將存取限制規則新增至您的應用程式,請執行下列步驟:

  1. 登入 Azure 入口網站。

  2. 選取您要新增存取限制的應用程式。

  3. 在左側功能表上,選取 [網路]

  4. [網路] 頁面的 [輸入流量設定] 下,選取 [公用網路存取] 設定。

    Screenshot of the App Service networking options page in the Azure portal.

  5. [存取限制] 頁面上,檢閱您為應用程式定義的存取限制規則清單。

    Screenshot of the Access Restrictions page in the Azure portal, showing the list of access restriction rules defined for the selected app.

    此清單會顯示應用程式套用的所有目前限制。 若應用程式有虛擬網路限制,此資料表便會顯示是否已啟用 Microsoft.Web 的服務端點。 若應用程式未定義任何限制且不相符的規則未設定為 [拒絕],則可從任何位置存取該應用程式。

權限

在子網路或較高的層級必須有下列角色型存取控制權限,才能透過 Azure 入口網站、CLI 或在直接設定網站設定屬性時,設定存取限制:

動作 描述
Microsoft.Web/sites/config/read 取得 Web 應用程式的組態設定
Microsoft.Web/sites/config/write 更新 Web 應用程式的組態設定
Microsoft.Network/virtualNetworks/subnets/joinViaServiceEndpoint/action* 將儲存體帳戶或 SQL 資料庫等資源加入子網路
Microsoft.Web/sites/write** 更新 Web 應用程式設定

*只有新增虛擬網路 (服務端點) 規則時需要。

**只有在透過 Azure 入口網站更新存取限制時需要。

如果您要新增的服務端點型規則和虛擬網路所在的訂用帳戶和應用程式不同,請務必針對 Microsoft.Web 資源提供者註冊包含虛擬網路的訂用帳戶。 您可以遵循本文件來明確註冊提供者,但也可在訂用帳戶中建立第一個 Web 應用程式時自動註冊提供者。

新增存取限制規則

若要將存取限制規則新增至應用程式,請選取 [存取限制] 頁面上的 [新增]。 規則只會在儲存後才有效。

系統會按優先順序強制執行規則,自 [優先順序] 資料行的最小數字起依序進行。 如果您未設定不相符的規則,隱含的全部拒絕會在您即使新增單一規則後隨即生效。

建立規則時,請在 [新增存取限制] 窗格上執行下列動作:

  1. [動作] 下,選取 [允許][拒絕]

    Screenshot of the 'Add Access Restriction' pane.

  2. 您可選擇性輸入規則的名稱和描述。

  3. [優先順序] 方塊中輸入優先順序值。

  4. 選取 [類型] 下拉式清單中的規則類型。 下列各節將描述不同類型的規則。

  5. 在輸入規則特定輸入之後選取 [新增規則],以將規則新增至清單中。

最後,回到 [存取限制] 頁面中選取 [儲存]

注意

  • 存取限制規則數上限為 512。 若所需的存取限制規則超過 512 個,建議考慮安裝獨立的安全性產品,例如 Azure Front Door、Azure 應用程式閘道或替代的 WAF。

設定以 IP 位址為基礎的規則

依上一節所述程序進行,加上下列動作:

  • 在步驟 4 的 [類型] 下拉式清單中,選取 [IPv4][IPv6]

在無類別網域間路由選擇 (CIDR) 標記法中,指定 IPv4 及 IPv6 位址兩者的 IP 位址區塊。 指定位址時,您可使用類似 1.2.3.4/32 的位址,其中前四個八位元代表您的 IP 位址,/32 則為遮罩。 適用於所有位址的 IPv4 CIDR 標記法是 0.0.0.0/0。 若要深入了解 CIDR 標記法,請參閱無類別網域間路由選擇

注意

當您的應用程式位於 App Service 環境時,IP 型存取限制規則只會處理虛擬網路位址範圍。 如果您的應用程式位於多租用戶服務中,則必須使用服務端點來限制流量以選取虛擬網路中的子網路。

設定以服務端點為基礎的規則

  • 在步驟 4 的 [類型] 下拉式清單中,選取 [虛擬網路]

    Screenshot of the 'Add Restriction' pane with the Virtual Network type selected.

指定 [訂用帳戶][虛擬網路][子網路] 下拉式清單,以符合您要限制存取的項目。

您可使用服務端點來限制所選 Azure 虛擬網路子網路的存取。 若您選取子網路的服務端點尚未啟用 Microsoft.Web,系統會自動啟用 (除非您選取了 [忽略缺少 Microsoft.Web 服務端點] 核取方塊,則不會啟用)。 若想在應用程式上啟用服務端點,但不在子網路上啟用,主要取決於您是否有在子網路上啟用端點的權限。

如需讓其他人在子網路上啟用服務端點,請勾選 [忽略缺少的 Microsoft.Web 服務端點] 核取方塊。 應用程式將會針對服務端點進行設定,稍後預期會於子網路上啟用這些端點。

您無法使用服務端點來限制存取在 App Service 環境中執行的應用程式。 當應用程式位於 App Service 環境時,您可套用 IP 存取規則來控制存取權。

透過服務端點,您可設定具有應用程式閘道的應用程式,或其他 Web 應用程式防火牆 (WAF) 裝置。 您也可設定具有安全後端的多層式應用程式。 如需詳細資訊,請參閱網路功能和 App Service整合具有服務端點的應用程式閘道

注意

  • 使用以 IP 為基礎之 TLS/SSL 繫結搭配虛擬 IP (VIP) 的 Web 應用程式並不支援服務端點。

設定以服務標記為基礎的規則

  • 在步驟 4 的 [類型] 下拉式清單中,選取 [服務標籤]

    Screenshot of the 'Add Restriction' pane with the Service Tag type selected.

存取限制規則支援所有可用的服務標籤。 每個服務標籤皆代表一份 Azure 服務 IP 範圍清單。 您可以在服務標記文件中找到這些服務和特定範圍連結的清單。 使用 Azure Resource Manager 範本或指令碼來設定進階規則,如區域範圍規則。

編輯規則

  1. 開始編輯現有的存取限制規則時,請在 [存取限制] 頁面上選取要編輯的規則。

  2. [編輯存取限制] 窗格中進行變更,接著選取 [更新規則]

  3. 選取儲存以儲存變更。

    Screenshot of the 'Edit Access Restriction' pane in the Azure portal, showing the fields for an existing access restriction rule.

    注意

    編輯規則時無法切換規則類型。

刪除規則

  1. 若要刪除規則,請在 [存取限制] 頁面上核取您要刪除的一或多個規則,然後選取 [刪除]

  2. 選取儲存以儲存變更。

Screenshot of the 'Access Restrictions' page, showing the 'Remove' ellipsis next to the access restriction rule to be deleted.

存取限制進階案例

下列各節將描述幾項使用存取限制的進階案例。

依 HTTP 標頭篩選

您可新增 HTTP 標頭篩選器作為任何規則的一部分。 支援下列 HTTP 標頭名稱:

  • X-Forwarded-For
  • X-Forwarded-Host
  • X-Azure-FDID
  • X-FD-HealthProbe

每個標頭名稱最多可新增八個值 (以逗號分隔)。 HTTP 標頭篩選器會在規則本身後進行評估,且兩個條件皆須為 True 才能套用規則。

多來源規則

多來源規則可讓您在單一規則中合併多達 8 個 IP 範圍或 8 個服務標記。 如果您有超過 512 個 IP 範圍或要建立邏輯規則,請使用多來源規則。 邏輯規則可以是將多個 IP 範圍與單一 HTTP 標頭篩選器結合在一起。

多來源規則與單一來源規則的定義方式相同,但每個範圍皆以逗號分隔。

PowerShell 範例:

Add-AzWebAppAccessRestrictionRule -ResourceGroupName "ResourceGroup" -WebAppName "AppName" `
  -Name "Multi-source rule" -IpAddress "192.168.1.0/24,192.168.10.0/24,192.168.100.0/24" `
  -Priority 100 -Action Allow

封鎖單一 IP 位址

如果您想要明確封鎖單一 IP 位址或 IP 位址區塊,但允許存取其他所有位址,請新增特定 IP 位址的拒絕規則,並將不相符的規則動作設定為 [允許]

Screenshot of the 'Access Restrictions' page in the Azure portal, showing a single blocked IP address.

限制 SCM 網站的存取權

您不僅可控制應用程式的存取權,也可限制應用程式所使用的 SCM (進階工具) 網站的存取權。 SCM 網站同時作為 Web 部署端點與 Kudu 主控台。 您可個別指派應用程式和 SCM 網站的存取限制,或讓應用程式與 SCM 網站兩者使用同一組限制。 當您選取 [使用主要網站規則] 核取方塊時,規則清單會隱藏,而會使用主要網站的規則。 如果清除此核取方塊,您的 SCM 網站設定會再次出現。

Screenshot of the 'Access Restrictions' page in the Azure portal, showing that no access restrictions are set for the SCM site or the app.

限制特定 Azure Front Door 執行個體的存取權

從 Azure Front Door 到應用程式的流量源自一組已知的 IP 範圍 (在 AzureFrontDoor.Backend 服務標籤中定義)。 使用服務標籤限制規則時可讓流量僅限來自 Azure Front Door。 為確保流量僅來自特定執行個體,您必須根據 Azure Front Door 傳送的唯一 HTTP 標頭,進一步篩選收到的要求。

Screenshot of the 'Access Restrictions' page in the Azure portal, showing how to add Azure Front Door restriction.

PowerShell 範例:

$afd = Get-AzFrontDoor -Name "MyFrontDoorInstanceName"
Add-AzWebAppAccessRestrictionRule -ResourceGroupName "ResourceGroup" -WebAppName "AppName" `
  -Name "Front Door example rule" -Priority 100 -Action Allow -ServiceTag AzureFrontDoor.Backend `
  -HttpHeader @{'x-azure-fdid' = $afd.FrontDoorId}

以程式設計的方式管理存取限制

您可以透過程式設計的方式管理存取限制,還可以在下方找到如何將規則新增至存取限制,以及如何變更主要網站進階工具網站不相符規則動作的範例。

新增主要網站的存取限制規則

您可以選擇下列其中一個選項,以程式設計的方式新增主要網站的存取限制規則:

您可以在 Cloud Shell 中執行下列命令。 如需 az webapp config access-restriction 命令的詳細資訊,請參閱此頁面

az webapp config access-restriction add --resource-group ResourceGroup --name AppName \
  --rule-name 'IP example rule' --action Allow --ip-address 122.133.144.0/24 --priority 100

az webapp config access-restriction add --resource-group ResourceGroup --name AppName \
  --rule-name "Azure Front Door example" --action Allow --priority 200 --service-tag AzureFrontDoor.Backend \
  --http-header x-azure-fdid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

新增進階工具網站的存取限制規則

您可以選擇下列其中一個選項,以程式設計的方式新增進階工具網站的存取限制規則:

您可以在 Cloud Shell 中執行下列命令。 如需 az webapp config access-restriction 命令的詳細資訊,請參閱此頁面

az webapp config access-restriction add --resource-group ResourceGroup --name AppName \
  --rule-name 'IP example rule' --action Allow --ip-address 122.133.144.0/24 --priority 100 --scm-site true

變更主要網站的不相符規則動作

您可以選擇下列其中一個選項,以程式設計的方式變更主要網站不相符規則動作

您可以在 Cloud Shell 中執行下列命令。 如需 az resource 命令的詳細資訊,請參閱此頁面ipSecurityRestrictionsDefaultAction 接受的值為 AllowDeny

az resource update --resource-group ResourceGroup --name AppName --resource-type "Microsoft.Web/sites" \
  --set properties.siteConfig.ipSecurityRestrictionsDefaultAction=Allow

變更進階工具網站的不相符規則動作

您可以選擇下列其中一個選項,以程式設計的方式變更進階工具網站不相符規則動作

您可以在 Cloud Shell 中執行下列命令。 如需 az resource 命令的詳細資訊,請參閱此頁面scmIpSecurityRestrictionsDefaultAction 接受的值為 AllowDeny

az resource update --resource-group ResourceGroup --name AppName --resource-type "Microsoft.Web/sites" \
  --set properties.siteConfig.scmIpSecurityRestrictionsDefaultAction=Allow

設定 Azure Functions 存取限制

存取限制也適用於與 App Service 方案相同功能的函數應用程式。 啟用存取限制時,同時也會針對不允許的 IP 停用 Azure 入口網站程式碼編輯器。

下一步

Azure Functions 的存取限制
整合具有服務端點的應用程式閘道
Azure App Service 中的進階存取限制案例 - 部落格文章