Файлы Azure предоставляют два основных типа конечных точек для доступа к общим папкам Azure:
Общедоступные и частные конечные точки размещаются в учетной записи хранения Azure. Учетная запись хранения — это конструкция управления, представляющая собой общий пул хранения, в котором можно размещать несколько файловых общих ресурсов, а также другие ресурсы хранения, такие как контейнеры больших двоичных объектов или очереди.
В этой статье показано, как настроить конечные точки учетной записи хранения для получения доступа к общей папке Azure напрямую. Большая часть этой статьи также относится к тому, как Синхронизация файлов Azure взаимодействует с общедоступными и частными конечными точками для учетной записи хранения. Дополнительные сведения о сетевых рекомендациях по использованию Azure File Sync см. в разделе Настройка параметров прокси-сервера и брандмауэра для Azure File Sync.
Вы можете настроить конечные точки, чтобы ограничить сетевой доступ к учетной записи хранения. Существуют два подхода к ограничению доступа к учетной записи хранения для виртуальной сети.
При создании частной конечной точки для учетной записи хранения развертываются следующие ресурсы Azure:
Перейдите к учетной записи хранения, для которой вы хотите создать частную конечную точку. В меню службы в разделе "Безопасность и сеть" выберите "Сеть", "Подключения частной конечной точки", а затем + "Частная конечная точка", чтобы создать новую частную конечную точку.
В мастере нужно будет заполнить несколько страниц.
В колонке Основные сведения выберите нужную подписку, группу ресурсов, имя, имя сетевого интерфейса и регион для частной конечной точки. Они могут быть любыми, но не должны совпадать с учетной записью хранения. Тем не менее необходимо создать частную конечную точку в том же регионе, что и виртуальная сеть, в которой вы хотите создать частную конечную точку. Затем щелкните Далее: Ресурс.
В колонке Ресурс выберите для целевого подресурса файл. Затем выберите Далее: Виртуальная сеть.
В колонке Виртуальная сеть можно выбрать определенную виртуальную сеть и подсеть, в которую нужно добавить частную конечную точку. Выберите динамическое или статическое выделение IP-адреса для новой частной конечной точки. Если вы выберете статический IP-адрес, потребуется также указать имя и частный IP-адрес. При желании можно указать группу безопасности приложений. По завершении выберите Далее: DNS.
Колонка DNS содержит сведения об интеграции частной конечной точки с частной зоной DNS. Убедитесь в правильности подписки и группы ресурсов, затем щелкните Далее: теги.
При необходимости можно применить теги для классификации ресурсов (например, назначить тег с именем Среда и значением Тест всем ресурсам тестирования). При необходимости введите пары имени/значения, а затем нажмите кнопку Далее: Проверить и создать.
Выберите "Создать", чтобы создать частную конечную точку.
Чтобы создать частную конечную точку для учетной записи хранения, сначала нужно получить ссылку на учетную запись хранения и подсеть виртуальной сети, в которую вы хотите добавить частную конечную точку. Замените <storage-account-resource-group-name>
, <storage-account-name>
, <vnet-resource-group-name>
, <vnet-name>
и <vnet-subnet-name>
ниже:
$storageAccountResourceGroupName = "<storage-account-resource-group-name>"
$storageAccountName = "<storage-account-name>"
$virtualNetworkResourceGroupName = "<vnet-resource-group-name>"
$virtualNetworkName = "<vnet-name>"
$subnetName = "<vnet-subnet-name>"
# Get storage account reference, and throw error if it doesn't exist
$storageAccount = Get-AzStorageAccount `
-ResourceGroupName $storageAccountResourceGroupName `
-Name $storageAccountName `
-ErrorAction SilentlyContinue
if ($null -eq $storageAccount) {
$errorMessage = "Storage account $storageAccountName not found "
$errorMessage += "in resource group $storageAccountResourceGroupName."
Write-Error -Message $errorMessage -ErrorAction Stop
}
# Get virtual network reference, and throw error if it doesn't exist
$virtualNetwork = Get-AzVirtualNetwork `
-ResourceGroupName $virtualNetworkResourceGroupName `
-Name $virtualNetworkName `
-ErrorAction SilentlyContinue
if ($null -eq $virtualNetwork) {
$errorMessage = "Virtual network $virtualNetworkName not found "
$errorMessage += "in resource group $virtualNetworkResourceGroupName."
Write-Error -Message $errorMessage -ErrorAction Stop
}
# Get reference to virtual network subnet, and throw error if it doesn't exist
$subnet = $virtualNetwork | `
Select-Object -ExpandProperty Subnets | `
Where-Object { $_.Name -eq $subnetName }
if ($null -eq $subnet) {
Write-Error `
-Message "Subnet $subnetName not found in virtual network $virtualNetworkName." `
-ErrorAction Stop
}
Чтобы создать частную конечную точку, необходимо создать подключение службы частной связи к учетной записи хранения. Подключение службы частного канала используется как входные данные для создания частной конечной точки.
# Disable private endpoint network policies
$subnet.PrivateEndpointNetworkPolicies = "Disabled"
$virtualNetwork = $virtualNetwork | `
Set-AzVirtualNetwork -ErrorAction Stop
# Create a private link service connection to the storage account.
$privateEndpointConnection = New-AzPrivateLinkServiceConnection `
-Name "$storageAccountName-Connection" `
-PrivateLinkServiceId $storageAccount.Id `
-GroupId "file" `
-ErrorAction Stop
# Create a new private endpoint.
$privateEndpoint = New-AzPrivateEndpoint `
-ResourceGroupName $storageAccountResourceGroupName `
-Name "$storageAccountName-PrivateEndpoint" `
-Location $virtualNetwork.Location `
-Subnet $subnet `
-PrivateLinkServiceConnection $privateEndpointConnection `
-ErrorAction Stop
Создание частной зоны DNS в Azure позволяет оригинальному имени учетной записи хранения, например storageaccount.file.core.windows.net
, разрешаться в частный IP-адрес внутри виртуальной сети. Хотя с точки зрения создания частной конечной точки это необязательно, оно явно необходимо для монтирования общей папки Azure с использованием учетной записи пользователя AD или для доступа через REST API.
# Get the desired storage account suffix (core.windows.net for public cloud).
# This is done like this so this script will seamlessly work for non-public Azure.
$storageAccountSuffix = Get-AzContext | `
Select-Object -ExpandProperty Environment | `
Select-Object -ExpandProperty StorageEndpointSuffix
# For public cloud, this will generate the following DNS suffix:
# privatelink.file.core.windows.net.
$dnsZoneName = "privatelink.file.$storageAccountSuffix"
# Find a DNS zone matching desired name attached to this virtual network.
$dnsZone = Get-AzPrivateDnsZone | `
Where-Object { $_.Name -eq $dnsZoneName } | `
Where-Object {
$privateDnsLink = Get-AzPrivateDnsVirtualNetworkLink `
-ResourceGroupName $_.ResourceGroupName `
-ZoneName $_.Name `
-ErrorAction SilentlyContinue
$privateDnsLink.VirtualNetworkId -eq $virtualNetwork.Id
}
if ($null -eq $dnsZone) {
# No matching DNS zone attached to virtual network, so create new one.
$dnsZone = New-AzPrivateDnsZone `
-ResourceGroupName $virtualNetworkResourceGroupName `
-Name $dnsZoneName `
-ErrorAction Stop
$privateDnsLink = New-AzPrivateDnsVirtualNetworkLink `
-ResourceGroupName $virtualNetworkResourceGroupName `
-ZoneName $dnsZoneName `
-Name "$virtualNetworkName-DnsLink" `
-VirtualNetworkId $virtualNetwork.Id `
-ErrorAction Stop
}
Теперь, когда у вас есть ссылка на частную зону DNS, нужно создать запись типа A для учетной записи хранения.
$privateEndpointIP = $privateEndpoint | `
Select-Object -ExpandProperty NetworkInterfaces | `
Select-Object @{
Name = "NetworkInterfaces";
Expression = { Get-AzNetworkInterface -ResourceId $_.Id }
} | `
Select-Object -ExpandProperty NetworkInterfaces | `
Select-Object -ExpandProperty IpConfigurations | `
Select-Object -ExpandProperty PrivateIpAddress
$privateDnsRecordConfig = New-AzPrivateDnsRecordConfig `
-IPv4Address $privateEndpointIP
New-AzPrivateDnsRecordSet `
-ResourceGroupName $virtualNetworkResourceGroupName `
-Name $storageAccountName `
-RecordType A `
-ZoneName $dnsZoneName `
-Ttl 600 `
-PrivateDnsRecords $privateDnsRecordConfig `
-ErrorAction Stop | `
Out-Null
Чтобы создать частную конечную точку для учетной записи хранения, сначала нужно получить ссылку на учетную запись хранения и подсеть виртуальной сети, в которую вы хотите добавить частную конечную точку. Замените <storage-account-resource-group-name>
, <storage-account-name>
, <vnet-resource-group-name>
, <vnet-name>
и <vnet-subnet-name>
ниже:
storageAccountResourceGroupName="<storage-account-resource-group-name>"
storageAccountName="<storage-account-name>"
virtualNetworkResourceGroupName="<vnet-resource-group-name>"
virtualNetworkName="<vnet-name>"
subnetName="<vnet-subnet-name>"
# Get storage account ID
storageAccount=$(az storage account show \
--resource-group $storageAccountResourceGroupName \
--name $storageAccountName \
--query "id" | \
tr -d '"')
# Get virtual network ID
virtualNetwork=$(az network vnet show \
--resource-group $virtualNetworkResourceGroupName \
--name $virtualNetworkName \
--query "id" | \
tr -d '"')
# Get subnet ID
subnet=$(az network vnet subnet show \
--resource-group $virtualNetworkResourceGroupName \
--vnet-name $virtualNetworkName \
--name $subnetName \
--query "id" | \
tr -d '"')
Чтобы создать частную конечную точку, необходимо сначала убедиться, что политика сетевой частной конечной точки для подсети отключена. Затем создайте частную конечную точку с помощью команды az network private-endpoint create
.
# Disable private endpoint network policies
az network vnet subnet update \
--ids $subnet \
--disable-private-endpoint-network-policies \
--output none
# Get virtual network location
region=$(az network vnet show \
--ids $virtualNetwork \
--query "location" | \
tr -d '"')
# Create a private endpoint
privateEndpoint=$(az network private-endpoint create \
--resource-group $storageAccountResourceGroupName \
--name "$storageAccountName-PrivateEndpoint" \
--location $region \
--subnet $subnet \
--private-connection-resource-id $storageAccount \
--group-id "file" \
--connection-name "$storageAccountName-Connection" \
--query "id" | \
tr -d '"')
Создание частной зоны DNS в Azure позволяет использовать для учетной записи хранения оригинальное имя, например storageaccount.file.core.windows.net
, которое будет разрешаться в частный IP-адрес в пределах виртуальной сети. Хотя с точки зрения создания частной конечной точки это является необязательным, оно явно необходимо при подключении общей папки Azure с использованием учетной записи пользователя AD или при доступе через REST API.
# Get the desired storage account suffix (core.windows.net for public cloud).
# This is done like this so this script will seamlessly work for non-public Azure.
storageAccountSuffix=$(az cloud show \
--query "suffixes.storageEndpoint" | \
tr -d '"')
# For public cloud, this will generate the following DNS suffix:
# privatelink.file.core.windows.net.
dnsZoneName="privatelink.file.$storageAccountSuffix"
# Find a DNS zone matching desired name attached to this virtual network.
possibleDnsZones=""
possibleDnsZones=$(az network private-dns zone list \
--query "[?name == '$dnsZoneName'].id" \
--output tsv)
dnsZone=""
possibleDnsZone=""
for possibleDnsZone in $possibleDnsZones
do
possibleResourceGroupName=$(az resource show \
--ids $possibleDnsZone \
--query "resourceGroup" | \
tr -d '"')
link=$(az network private-dns link vnet list \
--resource-group $possibleResourceGroupName \
--zone-name $dnsZoneName \
--query "[?virtualNetwork.id == '$virtualNetwork'].id" \
--output tsv)
if [ -z $link ]
then
echo "1" > /dev/null
else
dnsZoneResourceGroup=$possibleResourceGroupName
dnsZone=$possibleDnsZone
break
fi
done
if [ -z $dnsZone ]
then
# No matching DNS zone attached to virtual network, so create a new one
dnsZone=$(az network private-dns zone create \
--resource-group $virtualNetworkResourceGroupName \
--name $dnsZoneName \
--query "id" | \
tr -d '"')
az network private-dns link vnet create \
--resource-group $virtualNetworkResourceGroupName \
--zone-name $dnsZoneName \
--name "$virtualNetworkName-DnsLink" \
--virtual-network $virtualNetwork \
--registration-enabled false \
--output none
dnsZoneResourceGroup=$virtualNetworkResourceGroupName
fi
Теперь, когда у вас есть ссылка на частную зону DNS, нужно создать запись типа A для учетной записи хранения.
privateEndpointNIC=$(az network private-endpoint show \
--ids $privateEndpoint \
--query "networkInterfaces[0].id" | \
tr -d '"')
privateEndpointIP=$(az network nic show \
--ids $privateEndpointNIC \
--query "ipConfigurations[0].privateIPAddress" | \
tr -d '"')
az network private-dns record-set a create \
--resource-group $dnsZoneResourceGroup \
--zone-name $dnsZoneName \
--name $storageAccountName \
--output none
az network private-dns record-set a add-record \
--resource-group $dnsZoneResourceGroup \
--zone-name $dnsZoneName \
--record-set-name $storageAccountName \
--ipv4-address $privateEndpointIP \
--output none
Если у вас есть виртуальная машина в виртуальной сети или вы настроили перенаправление DNS, как описано в разделе "Настройка перенаправления DNS для Файлы Azure", можно проверить правильность настройки частной конечной точки. Выполните следующие команды из PowerShell, командной строки или терминала (работает для Windows, Linux или macOS). Следует заменить <storage-account-name>
на соответствующее имя учетной записи хранения.
nslookup <storage-account-name>.file.core.windows.net
В случае успешного выполнения вы увидите следующие выходные данные, где 192.168.0.5
находится частный IP-адрес частной конечной точки в виртуальной сети (выходные данные, показанные для Windows):
Server: UnKnown
Address: 10.2.4.4
Non-authoritative answer:
Name: storageaccount.privatelink.file.core.windows.net
Address: 192.168.0.5
Aliases: storageaccount.file.core.windows.net
Если у вас есть виртуальная машина внутри виртуальной сети или вы настроили перенаправление DNS, как описано в разделе "Настройка перенаправления DNS для Файлы Azure", можно проверить правильность настройки частной конечной точки, выполнив следующие команды:
$storageAccountHostName = [System.Uri]::new($storageAccount.PrimaryEndpoints.file) | `
Select-Object -ExpandProperty Host
Resolve-DnsName -Name $storageAccountHostName
В случае успешного выполнения вы увидите следующие выходные данные, где 192.168.0.5
находится частный IP-адрес частной конечной точки в виртуальной сети:
Name Type TTL Section NameHost
---- ---- --- ------- --------
storageaccount.file.core.windows CNAME 60 Answer storageaccount.privatelink.file.core.windows.net
.net
Name : storageaccount.privatelink.file.core.windows.net
QueryType : A
TTL : 600
Section : Answer
IP4Address : 192.168.0.5
Если у вас есть виртуальная машина внутри виртуальной сети или вы настроили перенаправление DNS, как описано в разделе "Настройка перенаправления DNS для Файлы Azure", можно проверить правильность настройки частной конечной точки, выполнив следующие команды:
httpEndpoint=$(az storage account show \
--resource-group $storageAccountResourceGroupName \
--name $storageAccountName \
--query "primaryEndpoints.file" | \
tr -d '"')
hostName=$(echo $httpEndpoint | cut -c7-$(expr length $httpEndpoint) | tr -d "/")
nslookup $hostName
Если все успешно, вы увидите следующие выходные данные, где 192.168.0.5
находится частный IP-адрес частной конечной точки в виртуальной сети. Вы по-прежнему должны использовать storageaccount.file.core.windows.net
для подключения общей папки вместо privatelink
пути.
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
storageaccount.file.core.windows.net canonical name = storageaccount.privatelink.file.core.windows.net.
Name: storageaccount.privatelink.file.core.windows.net
Address: 192.168.0.5
Для ограничения доступа к общедоступной конечной точке сначала необходимо отключить общий доступ к ней. Отключение доступа к общедоступной конечной точке не влияет на частные конечные точки. После отключения общедоступной конечной точки можно выбрать определенные сети или IP-адреса, которые могут продолжить доступ к нему. Как правило, большинство политик брандмауэра учетной записи хранения ограничивают сетевой доступ к одной или нескольким виртуальным сетям.
Если доступ к общедоступной конечной точке отключен, к учетной записи хранения можно обращаться только через частные конечные точки. В противном случае допустимые запросы к общедоступной конечной точке учетной записи хранения будут отклонены, если они не относятся к специально разрешенному источнику.
Перейдите к учетной записи хранения, для которой вы хотите запретить доступ к общедоступной конечной точке. В оглавлении для учетной записи хранения выберите Сетевые настройки.
В верхней части страницы выберите переключатель "Включено" из выбранных виртуальных сетей и IP-адресов. Это действие отобразит ряд скрытых параметров для управления ограничениями общедоступной конечной точки. Выберите «Разрешить службам Azure из списка доверенных служб доступ к этой учетной записи хранения», чтобы разрешить доступ к учетной записи хранения доверенным службам Microsoft, таким как Azure File Sync.
Следующая команда PowerShell блокирует весь трафик к общедоступной конечной точке учетной записи хранения. Обратите внимание, что в этой команде параметр -Bypass
имеет значение AzureServices
. Это позволит доверенным сторонним службам, например, таким как Синхронизация файлов Azure, получить доступ к учетной записи хранения через общедоступную конечную точку.
# This assumes $storageAccount is still defined from the beginning of this of this guide.
$storageAccount | Update-AzStorageAccountNetworkRuleSet `
-DefaultAction Deny `
-Bypass AzureServices `
-WarningAction SilentlyContinue `
-ErrorAction Stop | `
Out-Null
Следующая команда CLI блокирует весь трафик к общедоступной конечной точке учетной записи хранения. Обратите внимание, что в этой команде параметр -bypass
имеет значение AzureServices
. Это позволит доверенным службам первой стороны, таким как Синхронизация файлов Azure, получить доступ к учетной записи хранения данных через общедоступную конечную точку.
# This assumes $storageAccountResourceGroupName and $storageAccountName
# are still defined from the beginning of this guide.
az storage account update \
--resource-group $storageAccountResourceGroupName \
--name $storageAccountName \
--bypass "AzureServices" \
--default-action "Deny" \
--output none
При ограничении учетной записи хранения определенным виртуальным сетям вы разрешаете запросы к общедоступной конечной точке из указанных виртуальных сетей. Это достигается за счет возможности виртуальной сети под названием конечная точка службы. Ее можно использовать с частными конечными точками или без них.
Перейдите к учетной записи хранения, для которой вы хотите разрешить доступ к общедоступной конечной точке только из нескольких виртуальных сетей. В оглавлении учетной записи хранения выберите Сетевые настройки.
В верхней части страницы выберите переключатель для опции Включено для выбранных виртуальных сетей и IP-адресов. Это действие отобразит ряд скрытых параметров для управления ограничениями общедоступной конечной точки. Нажмите +Добавить существующую виртуальную сеть, чтобы выбрать конкретную виртуальную сеть, которой будет разрешен доступ к хранилищу через общедоступную конечную точку. Выберите виртуальную сеть и подсеть для этой виртуальной сети, а затем нажмите кнопку "Включить".
Выберите «Разрешить службам Azure в списке доверенных служб доступ к этой учетной записи хранения», чтобы разрешить доступ к хранилищу доверенным службам первой стороны Microsoft, таким как Синхронизация файлов Azure.
Чтобы разрешить доступ к общедоступной конечной точке учетной записи хранения только из определенных виртуальных сетей через конечные точки службы, сначала необходимо собрать информацию об учетной записи хранения и виртуальной сети. Для сбора этой информации заполните параметры <storage-account-resource-group>
, <storage-account-name>
, <vnet-resource-group-name>
, <vnet-name>
и <subnet-name>
.
$storageAccountResourceGroupName = "<storage-account-resource-group>"
$storageAccountName = "<storage-account-name>"
$restrictToVirtualNetworkResourceGroupName = "<vnet-resource-group-name>"
$restrictToVirtualNetworkName = "<vnet-name>"
$subnetName = "<subnet-name>"
$storageAccount = Get-AzStorageAccount `
-ResourceGroupName $storageAccountResourceGroupName `
-Name $storageAccountName `
-ErrorAction Stop
$virtualNetwork = Get-AzVirtualNetwork `
-ResourceGroupName $restrictToVirtualNetworkResourceGroupName `
-Name $restrictToVirtualNetworkName `
-ErrorAction Stop
$subnet = $virtualNetwork | `
Select-Object -ExpandProperty Subnets | `
Where-Object { $_.Name -eq $subnetName }
if ($null -eq $subnet) {
Write-Error `
-Message "Subnet $subnetName not found in virtual network $restrictToVirtualNetworkName." `
-ErrorAction Stop
}
Чтобы трафик, исходящий из виртуальной сети, был разрешен сетевой инфраструктурой Azure для доступа к общедоступной конечной точке учетной записи хранения, подсеть этой виртуальной сети должна иметь открытую конечную точку службы Microsoft.Storage
. Следующие команды PowerShell добавят Microsoft.Storage
конечную точку службы в подсеть, если она еще не существует.
$serviceEndpoints = $subnet | `
Select-Object -ExpandProperty ServiceEndpoints | `
Select-Object -ExpandProperty Service
if ($serviceEndpoints -notcontains "Microsoft.Storage") {
if ($null -eq $serviceEndpoints) {
$serviceEndpoints = @("Microsoft.Storage")
} elseif ($serviceEndpoints -is [string]) {
$serviceEndpoints = @($serviceEndpoints, "Microsoft.Storage")
} else {
$serviceEndpoints += "Microsoft.Storage"
}
$virtualNetwork = $virtualNetwork | Set-AzVirtualNetworkSubnetConfig `
-Name $subnetName `
-AddressPrefix $subnet.AddressPrefix `
-ServiceEndpoint $serviceEndpoints `
-WarningAction SilentlyContinue `
-ErrorAction Stop | `
Set-AzVirtualNetwork `
-ErrorAction Stop
}
Последним шагом для ограничения трафика к учетной записи хранения будет создание правила сети и добавление его в набор правил сети для этой учетной записи хранения.
$networkRule = $storageAccount | Add-AzStorageAccountNetworkRule `
-VirtualNetworkResourceId $subnet.Id `
-ErrorAction Stop
$storageAccount | Update-AzStorageAccountNetworkRuleSet `
-DefaultAction Deny `
-Bypass AzureServices `
-VirtualNetworkRule $networkRule `
-WarningAction SilentlyContinue `
-ErrorAction Stop | `
Out-Null
Чтобы разрешить доступ к общедоступной конечной точке учетной записи хранения только из определенных виртуальных сетей через конечные точки службы, сначала необходимо собрать информацию об учетной записи хранения и виртуальной сети. Для сбора этой информации заполните параметры <storage-account-resource-group>
, <storage-account-name>
, <vnet-resource-group-name>
, <vnet-name>
и <subnet-name>
.
storageAccountResourceGroupName="<storage-account-resource-group>"
storageAccountName="<storage-account-name>"
restrictToVirtualNetworkResourceGroupName="<vnet-resource-group-name>"
restrictToVirtualNetworkName="<vnet-name>"
subnetName="<subnet-name>"
storageAccount=$(az storage account show \
--resource-group $storageAccountResourceGroupName \
--name $storageAccountName \
--query "id" | \
tr -d '"')
virtualNetwork=$(az network vnet show \
--resource-group $restrictToVirtualNetworkResourceGroupName \
--name $restrictToVirtualNetworkName \
--query "id" | \
tr -d '"')
subnet=$(az network vnet subnet show \
--resource-group $restrictToVirtualNetworkResourceGroupName \
--vnet-name $restrictToVirtualNetworkName \
--name $subnetName \
--query "id" | \
tr -d '"')
Чтобы трафик из виртуальной сети был разрешен сетевой структурой Azure для доступа к общедоступной конечной точке учетной записи хранения, подсеть виртуальной сети должна иметь открытую конечную точку службы Microsoft.Storage
. Следующие команды CLI добавляют Microsoft.Storage
конечную точку службы в подсеть, если она еще не существует.
serviceEndpoints=$(az network vnet subnet show \
--resource-group $restrictToVirtualNetworkResourceGroupName \
--vnet-name $restrictToVirtualNetworkName \
--name $subnetName \
--query "serviceEndpoints[].service" \
--output tsv)
foundStorageServiceEndpoint=false
for serviceEndpoint in $serviceEndpoints
do
if [ $serviceEndpoint = "Microsoft.Storage" ]
then
foundStorageServiceEndpoint=true
fi
done
if [ $foundStorageServiceEndpoint = false ]
then
serviceEndpointList=""
for serviceEndpoint in $serviceEndpoints
do
serviceEndpointList+=$serviceEndpoint
serviceEndpointList+=" "
done
serviceEndpointList+="Microsoft.Storage"
az network vnet subnet update \
--ids $subnet \
--service-endpoints $serviceEndpointList \
--output none
fi
Последним шагом для ограничения трафика к учетной записи хранения будет создание правила сети и добавление его в набор правил сети для этой учетной записи хранения.
az storage account network-rule add \
--resource-group $storageAccountResourceGroupName \
--account-name $storageAccountName \
--subnet $subnet \
--output none
az storage account update \
--resource-group $storageAccountResourceGroupName \
--name $storageAccountName \
--bypass "AzureServices" \
--default-action "Deny" \
--output none