簡介
強化儲存體帳戶的資料平面存取是增強安全性的常見做法。但是,當使用具有虛擬網路 (VNET) 整合的 Azure 資源,或從私人 IP 或其他租戶存取儲存體端點時,如果來源未正確列入白名單,則可能會發生授權錯誤。本文探討導致此類錯誤的常見場景並提供可行的解決方法。
常見授權錯誤場景
場景 1:從其他區域存取
當發出呼叫的來源位於不同的 Azure 區域時,通常可以透過將來源的 公用 IP 位址 新增到儲存體帳戶防火牆來解決。
場景 2:同一區域存取失敗
來自同一 Azure 區域的要求通常使用 Azure 私人 IP 位址 ,而不是公用 IP。在這種情況下,將公用 IP 列入白名單將會失敗。請參閱 設定 Azure 儲存體防火牆和虛擬網路 以了解更多詳細資訊。
場景 3:將存取限制到特定子網路
如果資源沒有公用 IP,但客戶希望將存取限制到特定子網路,則可能會因可見性限制而遇到問題。儲存體帳戶防火牆可能不會顯示目標子網路,需要由具有 參與者 RBAC 存取權限 或更高權限的人手動列入白名單。
場景 4:從不同的 Azure 租戶存取
當嘗試存取儲存體帳戶的資源屬於不同的 Azure 租戶時,需要採取額外步驟將來源子網路列入白名單。
解決步驟
新增來自其他租戶的子網路
要將來自不同 Azure 租戶的虛擬網路中的子網路列入白名單,必須使用 VirtualNetworkResourceId 參數。需要按以下形式指定子網路 URI:
/subscriptions/<subscription-ID>/resourceGroups/<resourceGroup-Name>/providers/Microsoft.Network/virtualNetworks/<vNet-name>/subnets/<subnet-name>
PowerShell 命令範例
要取得子網路 URI,請使用以下命令:
$subnet = Get-AzVirtualNetwork -ResourceGroupName "myresourcegroup" -Name "myvnet" | Get-AzVirtualNetworkSubnetConfig -Name "mysubnet"
如果使用者在來源租戶中沒有足夠的存取權限來執行此命令,他們可以透過檢查 Azure 中 VNET 資源的 JSON 本文來擷取子網路 URI。這需要對該資源擁有 控制平面 READ 存取權限 。
啟用儲存體服務端點
在將子網路列入白名單之前,請確保 Microsoft.Storage 或 Microsoft.Storage.Global 服務端點已啟用。這可以透過 Azure PowerShell、CLI 或 Azure 入口網站來完成。有關逐步指示,請參閱 設定 Azure 儲存體防火牆和虛擬網路。
列入白名單的命令範例
取得子網路 URI 後,使用以下命令新增網路規則:
Add-AzStorageAccountNetworkRule -ResourceGroupName "myresourcegroup" -AccountName "mystorageaccount" -VirtualNetworkResourceId $subnet
驗證
要驗證連線,請使用 curl 命令,並使用 SAS 權杖:
curl https://storageaccountname.blob.core.windows.net/container/hello.txt?<SAS token>
提示:
-
-v旗標在curl命令中可啟用詳細輸出,這有助於識別 HTTP 回應,例如403 Forbidden。刪除該旗標可獲得更簡潔的輸出。

下面的範例將顯示目標儲存體帳戶防火牆中的子網路

提示: 醒目顯示的警告可以安全地忽略,它與對已列入白名單的子網路的 READ 控制平面存取有關,資料平面存取將被允許。
其他注意事項
- 服務端點啟用:啟用儲存體服務端點可能會導致暫時的連線中斷。有關更多資訊,請參閱 Azure 虛擬網路服務端點。
- 私人端點:私人端點會繞過防火牆網路規則,因為它們依賴 DNS 以及透過已授權子網路的連線。請參閱 使用私人端點 – Azure 儲存體。
- 控制平面與資料平面:理解控制平面操作和資料平面操作之間的區別對於疑難排解至關重要。在以下位置了解更多: 控制平面和資料平面操作。
結論
存取 Azure 儲存體端點時的授權錯誤通常源於設定錯誤的防火牆規則或子網路可見性不足。按照上述步驟,您可以有效地疑難排解和解決這些問題,確保安全、無縫的資料平面存取。