服务终结点允许从虚拟网络中的子网安全连接到弹性 SAN,而无需专用 IP。 虚拟网络服务终结点是公共的,可通过 Internet 访问。 在使用存储服务终结点时,可以配置虚拟网络规则来控制对卷组的访问。
本文介绍如何配置与弹性 SAN 的服务终结点连接。
先决条件
可以在 SAN 级别启用对弹性 SAN 终结点的公共 Internet 访问。 为弹性 SAN 启用公用网络访问后,可以配置通过存储服务终结点对各个卷组进行的公共访问。 默认情况下,即使在 SAN 级别允许对各个卷组进行访问,也会拒绝公共访问。 必须显式配置卷组以允许来自特定 IP 地址范围和虚拟网络子网的访问。
可以在创建弹性 SAN 时启用公用网络访问,也可以使用 Azure PowerShell 模块或 Azure CLI 为现有 SAN 启用公用网络访问。
使用 Azure PowerShell 模块或 Azure CLI 启用公用网络访问。
通过 PowerShell 使用此示例代码更新弹性 SAN,以启用公用网络访问。 将 RgName
和 EsanName
的值替换为你自己的值,然后运行示例:
# Set the variable values.
$RgName = "<ResourceGroupName>"
$EsanName = "<ElasticSanName>"
# Update the Elastic San.
Update-AzElasticSan -Name $EsanName -ResourceGroupName $RgName -PublicNetworkAccess Enabled
通过 Azure CLI 使用此示例代码更新弹性 SAN,以启用公用网络访问。 将 RgName
和 EsanName
的值替换为你自己的值:
# Set the variable values.
$RgName="<ResourceGroupName>"
$EsanName="<ElasticSanName>"
# Update the Elastic San.
az elastic-san update \
--elastic-san-name $EsanName \
--resource-group $RgName \
--public-network-access enabled
若要从需要访问权限的虚拟网络配置 Azure 存储服务终结点,你必须拥有通过一个配置服务终结点的自定义 Azure 角色执行 Microsoft.Network/virtualNetworks/subnets/joinViaServiceEndpoint/action
Azure 资源提供程序操作的权限。
虚拟网络服务终结点是公共的,可通过 Internet 访问。 在使用存储服务终结点时,可以配置虚拟网络规则来控制对卷组的访问。
注释
目前只支持通过 PowerShell、CLI 和 REST API 来配置特定的规则,这些规则授予对属于另一 Microsoft Entra 租户的虚拟网络中的子网的访问权限。 无法通过 Azure 门户配置这些规则,只能在门户中查看这些规则。
导航到虚拟网络,然后选择“服务终结点”。
选择 + 添加。
在“添加服务终结点”屏幕上执行以下操作:
- 对于“服务”,请选择“Microsoft.Storage.Global”以添加跨区域服务终结点。
注释
可能会看到 Microsoft.Storage 被列为可用的存储服务终结点。 该选项适用于仅为后向兼容性而存在的区域内终结点。 除非存在使用区域内终结点的具体原因,否则请始终使用跨区域终结点。
对于“子网”,请选择要允许访问的所有子网。
选择 并添加。
使用以下示例代码为您的弹性 SAN 卷组创建一个存储服务终结点。
# Define some variables
$RgName = "<ResourceGroupName>"
$VnetName = "<VnetName>"
$SubnetName = "<SubnetName>"
# Get the virtual network and subnet
$Vnet = Get-AzVirtualNetwork -ResourceGroupName $RgName -Name $VnetName
$Subnet = Get-AzVirtualNetworkSubnetConfig -VirtualNetwork $Vnet -Name $SubnetName
# Enable the storage service endpoint
$Vnet | Set-AzVirtualNetworkSubnetConfig -Name $SubnetName -AddressPrefix $Subnet.AddressPrefix -ServiceEndpoint "Microsoft.Storage.Global" | Set-AzVirtualNetwork
使用以下示例代码创建弹性 SAN 卷组的存储服务终结点:
# Define some variables
RgName="<ResourceGroupName>"
VnetName="<VnetName>"
SubnetName="<SubnetName>"
# Enable the storage service endpoint
az network vnet subnet update --resource-group $RgName --vnet-name $VnetName --name $SubnetName --service-endpoints "Microsoft.Storage.Global"
默认情况下,会阻止通过服务终结点传入的所有数据请求。 只有从网络规则中配置的允许源请求数据的应用程序能够访问数据。
可通过 Azure 门户、PowerShell 或 CLI 管理卷组的虚拟网络规则。
重要
若要允许从另一个Microsoft Entra 租户中的虚拟网络/子网访问存储帐户,必须使用 PowerShell 或 Azure CLI。 Azure 门户不显示其他 Microsoft Entra 租户中的子网。
如果删除网络规则中包含的子网,则会将其从卷组的网络规则中删除。 如果使用同一名称创建新子网,其将无法访问卷组。 若要允许访问,必须在卷组的网络规则中显式授权新子网。
- 导航到 SAN 并选择“卷组”。
- 选择卷组,然后选择“创建”。
- 添加现有虚拟网络和子网,然后选择“保存”。
以下脚本列表为现有虚拟网络和子网上的 Azure 存储启用服务终结点,然后为虚拟网络和子网添加网络规则。
小窍门
若要为属于另一个 Microsoft Entra 租户的虚拟网络中的子网添加网络规则,请使用完全限定的 VirtualNetworkResourceId 参数,并采用“/subscriptions/subscription-ID/resourceGroups/resourceGroup-Name/providers/Microsoft.Network/virtualNetworks/vNet-name/subnets/subnet-name”格式。
$Rules = Get-AzElasticSanVolumeGroup -ResourceGroupName $RgName -ElasticSanName $sanName -Name $volGroupName
$Rules.NetworkAclsVirtualNetworkRule
Get-AzVirtualNetwork -ResourceGroupName "myresourcegroup" -Name "myvnet" | Set-AzVirtualNetworkSubnetConfig -Name "mysubnet" -AddressPrefix "10.0.0.0/24" -ServiceEndpoint "Microsoft.Storage.Global" | Set-AzVirtualNetwork
$rule = New-AzElasticSanVirtualNetworkRuleObject -VirtualNetworkResourceId $Subnet.Id -Action Allow
Add-AzElasticSanVolumeGroupNetworkRule -ResourceGroupName $RgName -ElasticSanName $EsanName -VolumeGroupName $EsanVgName -NetworkAclsVirtualNetworkRule $rule
如果需要,可以使用以下脚本删除虚拟网络规则:
## You can remove a virtual network rule by object, by resource ID, or by removing all the rules in a volume group
### remove by networkRule object
Remove-AzElasticSanVolumeGroupNetworkRule -ResourceGroupName myRGName -ElasticSanName mySANName -VolumeGroupName myVolGroupName -NetworkAclsVirtualNetworkRule $virtualNetworkRule1,$virtualNetworkRule2
### remove by networkRuleResourceId
Remove-AzElasticSanVolumeGroupNetworkRule -ResourceGroupName myRGName -ElasticSanName mySANName -VolumeGroupName myVolGroupName -NetworkAclsVirtualNetworkResourceId "myResourceID"
### Remove all network rules in a volume group by pipeline
((Get-AzElasticSanVolumeGroup -ResourceGroupName myRGName -ElasticSanName mySANName -VolumeGroupName myVolGroupName).NetworkAclsVirtualNetworkRule) | Remove-AzElasticSanVolumeGroupNetworkRule -ResourceGroupName myRGName -ElasticSanName mySANName -VolumeGroupName myVolGroupName
以下脚本列出了来自特定卷组的信息,为现有虚拟网络和子网上的 Azure 存储启用服务终结点,并为虚拟网络和子网添加网络规则。
小窍门
若要为属于另一个 Microsoft Entra 租户的虚拟网络中的子网添加规则,请使用完全限定的子网 ID,格式为 /subscriptions/\<subscription-ID\>/resourceGroups/\<resourceGroup-Name\>/providers/Microsoft.Network/virtualNetworks/\<vNet-name\>/subnets/\<subnet-name\>
。
可以使用 subscription 参数检索属于另一个 Microsoft Entra 租户的虚拟网络的子网 ID。
az elastic-san volume-group show -e $sanName -g $RgName -n $volumeGroupName
az network vnet subnet update --resource-group "myresourcegroup" --vnet-name "myvnet" --name "mysubnet" --service-endpoints "Microsoft.Storage.Global"
# First, get the current length of the list of virtual networks to ensure you append a new network instead of replacing existing ones.
virtualNetworkListLength = az elastic-san volume-group show -e $sanName -n $volumeGroupName -g $RgName --query 'length(networkAcls.virtualNetworkRules)'
az elastic-san volume-group update -e $sanName -g $RgName --name $volumeGroupName --network-acls virtual-network-rules[$virtualNetworkListLength] "{virtualNetworkRules:[{id:/subscriptions/subscriptionID/resourceGroups/RGName/providers/Microsoft.Network/virtualNetworks/$VnetName/subnets/default, action:Allow}]}"
如果需要,可以删除网络规则。 例如,以下命令删除第一个网络规则,对其进行修改以删除所需的网络规则。
az elastic-san volume-group update -e $sanName -g $RgName -n $volumeGroupName --network-acls virtual-network-rules[1]=null
在网络规则中启用所需终结点并授予访问权限后,就可以配置客户端以连接到适当的弹性 SAN 卷。
注释
如果虚拟机(VM)与弹性 SAN 卷之间的连接丢失,连接将重试 90 秒,直到终止。 失去与弹性 SAN 卷的连接不会导致 VM 重启。
后续步骤