可以拒绝对存储帐户的所有公共访问,然后将 Azure 网络设置配置为接受源自特定虚拟网络子网的请求。 若要了解详细信息,请参阅 虚拟网络子网。
若要将虚拟网络规则应用于存储帐户,用户必须具有要添加的子网的适当权限。
存储帐户参与者或拥有Microsoft.Network/virtualNetworks/subnets/joinViaServiceEndpoint/actionAzure 资源提供程序操作权限的用户可以使用自定义的 Azure 角色应用规则。
创建虚拟网络规则
注释
如果要从另一个Microsoft Entra 租户中的虚拟网络启用访问,则必须使用 PowerShell 或 Azure CLI。 Azure 门户不显示其他 Microsoft Entra 租户中的子网。
转到要为其配置虚拟网络和访问规则的存储帐户。
在服务菜单中,在 “安全性 + 网络”下,选择“ 网络”,然后在 “资源设置”下:“虚拟网络”、“IP 地址”和“例外”下,选择“ 查看”。
在“虚拟网络”下,选择“添加现有虚拟网络”。
此时会显示 “添加网络 ”窗格。
从 “虚拟网络 ”下拉列表中,选择一个虚拟网络。
从“ 子网 ”下拉列表中,选择所需的子网,然后选择“ 添加”。
如果需要创建新的虚拟网络,请选择“ 添加新虚拟网络”。 提供创建新的虚拟网络所需的信息,然后选择“创建”。 在创建规则期间,只有属于同一Microsoft Entra 租户的虚拟网络才会显示供选择。 若要授予对属于另一租户的虚拟网络中的子网的访问权限,请使用 PowerShell、Azure CLI 或 REST API。
若要删除虚拟网络或子网规则,请选择省略号 (...) 来打开虚拟网络或子网的上下文菜单,然后选择“删除”。
选择保存以应用更改。
重要
如果删除网络规则中包含的子网,则会从存储帐户的网络规则中删除该子网。 如果创建具有相同名称的新子网,则它无权访问存储帐户。 若要允许访问,则必须在存储帐户的网络规则中明确授权新子网。
安装 Azure PowerShell 并登录。
要仅允许来自特定虚拟网络的流量,可使用 Update-AzStorageAccountNetworkRuleSet 命令,并将 -DefaultAction 参数设置为 Deny:
Update-AzStorageAccountNetworkRuleSet -ResourceGroupName "myresourcegroup" -Name "mystorageaccount" -DefaultAction Deny
重要
除非将 -DefaultAction 参数 Deny设置为 .,否则网络规则不起作用。 但是,更改此设置可能会影响应用程序的连接到 Azure 存储的功能。 在更改此设置之前,请确保向任何允许的网络授予访问权限,或设置通过专用终结点进行的访问。
列出虚拟网络规则:
(Get-AzStorageAccountNetworkRuleSet -ResourceGroupName "myresourcegroup" -AccountName "mystorageaccount").VirtualNetworkRules
在现有虚拟网络和子网上启用 Azure 存储的服务终结点:
Get-AzVirtualNetwork -ResourceGroupName "myresourcegroup" -Name "myvnet" | Set-AzVirtualNetworkSubnetConfig -Name "mysubnet" -AddressPrefix "10.0.0.0/24" -ServiceEndpoint "Microsoft.Storage.Global" | Set-AzVirtualNetwork
为虚拟网络和子网添加网络规则:
$subnet = Get-AzVirtualNetwork -ResourceGroupName "myresourcegroup" -Name "myvnet" | Get-AzVirtualNetworkSubnetConfig -Name "mysubnet"
Add-AzStorageAccountNetworkRule -ResourceGroupName "myresourcegroup" -Name "mystorageaccount" -VirtualNetworkResourceId $subnet.Id
要为属于其他 Microsoft Entra 租户的虚拟网络中的子网添加网络规则,请使用格式为 VirtualNetworkResourceId 的完全限定参数 /subscriptions/subscription-ID/resourceGroups/resourceGroup-Name/providers/Microsoft.Network/virtualNetworks/vNet-name/subnets/subnet-name。
移除虚拟网络和子网的网络规则:
$subnet = Get-AzVirtualNetwork -ResourceGroupName "myresourcegroup" -Name "myvnet" | Get-AzVirtualNetworkSubnetConfig -Name "mysubnet"
Remove-AzStorageAccountNetworkRule -ResourceGroupName "myresourcegroup" -Name "mystorageaccount" -VirtualNetworkResourceId $subnet.Id
安装 Azure CLI 并 登录。
要仅允许来自特定虚拟网络的流量,可使用 az storage account update 命令,并将 --default-action 参数设置为 Deny:
az storage account update --resource-group "myresourcegroup" --name "mystorageaccount" --default-action Deny
重要
除非将 --default-action 参数 Deny设置为 .,否则网络规则不起作用。 但是,更改此设置可能会影响应用程序的连接到 Azure 存储的功能。 在更改此设置之前,请确保向任何允许的网络授予访问权限,或设置通过专用终结点进行的访问。
列出虚拟网络规则:
az storage account network-rule list --resource-group "myresourcegroup" --account-name "mystorageaccount" --query virtualNetworkRules
在现有虚拟网络和子网上启用 Azure 存储的服务终结点:
az network vnet subnet update --resource-group "myresourcegroup" --vnet-name "myvnet" --name "mysubnet" --service-endpoints "Microsoft.Storage.Global"
为虚拟网络和子网添加网络规则:
subnetid=$(az network vnet subnet show --resource-group "myresourcegroup" --vnet-name "myvnet" --name "mysubnet" --query id --output tsv)
az storage account network-rule add --resource-group "myresourcegroup" --account-name "mystorageaccount" --subnet $subnetid
若要为属于另一个 Microsoft Entra 租户的虚拟网络中的子网添加规则,请使用完全限定的子网 ID,格式为 /subscriptions/<subscription-ID>/resourceGroups/<resourceGroup-Name>/providers/Microsoft.Network/virtualNetworks/<vNet-name>/subnets/<subnet-name>。 可以使用 subscription 参数检索属于其他 Microsoft Entra 租户的虚拟网络的子网 ID。
移除虚拟网络和子网的网络规则:
subnetid=$(az network vnet subnet show --resource-group "myresourcegroup" --vnet-name "myvnet" --name "mysubnet" --query id --output tsv)
az storage account network-rule remove --resource-group "myresourcegroup" --account-name "mystorageaccount" --subnet $subnetid
另请参阅