✔️ Область применения: классические файловые ресурсы, созданные с помощью поставщика ресурсов Microsoft.Storage
Не применяется к: общим папкам, созданным с помощью поставщика ресурсов Microsoft.FileShares (предварительная версия)
Файлы Azure предоставляют два основных типа конечных точек для доступа к общим папкам Azure:
- общедоступные конечные точки, у которых есть общедоступный IP-адрес и к которым можно обращаться из любой точки мира;
- частные конечные точки, которые существуют только в виртуальной сети и имеют частный IP-адрес в пределах адресного пространства этой виртуальной сети.
Общедоступные и частные конечные точки размещаются в учетной записи хранения Azure. Учетная запись хранения — это конструкция управления, представляющая собой общий пул хранения, в котором можно размещать несколько файловых общих ресурсов, а также другие ресурсы хранения, такие как контейнеры больших двоичных объектов или очереди.
В этой статье показано, как настроить конечные точки учетной записи хранения для получения доступа к общей папке Azure напрямую. Большая часть этой статьи также относится к тому, как Синхронизация файлов Azure взаимодействует с общедоступными и частными конечными точками для учетной записи хранения. Дополнительные сведения о сетевых рекомендациях по использованию Azure File Sync см. в разделе Настройка параметров прокси-сервера и брандмауэра для Azure File Sync.
Перед чтением этого руководства мы рекомендуем ознакомиться с рекомендациями по настройке сетей для Azure Files.
Предварительные условия
- В этой статье предполагается, что вы уже создали подписку Azure. Если у вас еще нет подписки, вы можете создать бесплатную учетную запись Azure, прежде чем начинать работу.
- В этой статье предполагается, что вы уже создали общую папку Azure в учетной записи хранения, к которой вы хотите подключиться из локальной среды. Чтобы узнать, как создать общую папку Azure, ознакомьтесь с этой статьей.
- Если вы хотите использовать Azure PowerShell, установите последнюю версию.
- Если вы хотите использовать Azure CLI, установите последнюю версию.
Конфигурации конечных точек
Вы можете настроить конечные точки, чтобы ограничить сетевой доступ к учетной записи хранения. Существуют два подхода к ограничению доступа к учетной записи хранения для виртуальной сети.
Создание частной конечной точки
При создании частной конечной точки для учетной записи хранения развертываются следующие ресурсы Azure:
-
Частная конечная точка — ресурс Azure, представляющий частную конечную точку учетной записи хранения. Его можно рассматривать как ресурс для подключения учетной записи хранения к сетевому интерфейсу.
-
Сетевой интерфейс — ресурс для поддержки частного IP-адреса в указанной виртуальной сети или подсети. Это тот же ресурс, который развертывается при развертывании виртуальной машины, однако вместо назначения виртуальной машине он принадлежит частной конечной точке.
-
Частная зона доменных имен (DNS): если вы еще не развернули частную конечную точку для этой виртуальной сети, для этой виртуальной сети будет развернута новая частная зона DNS. В этой зоне DNS будет создана запись DNS типа A для учетной записи хранения. Если вы уже развертывали частную конечную точку в этой виртуальной сети, новая запись типа A для учетной записи хранения будет добавлена в существующую зону DNS. Развертывание зоны DNS является необязательным. Однако это настоятельно рекомендуется и обязательно, если вы монтируете общие папки Azure с помощью служебного принципала AD, или используете API FileREST.
Примечание.
В этой статье используется DNS-суффикс учетной записи хранения для общедоступных регионов Azure core.windows.net. Этот комментарий также относится к облакам Azure Sovereign, таким как облако Azure для государственных организаций США и Microsoft Azure, управляемые облаком 21Vianet. Просто замените соответствующие суффиксы в вашей среде.
Перейдите к учетной записи хранения, для которой вы хотите создать частную конечную точку. В меню службы в разделе "Безопасность и сеть" выберите "Сеть", "Подключения частной конечной точки", а затем + "Частная конечная точка", чтобы создать новую частную конечную точку.
В мастере нужно будет заполнить несколько страниц.
В колонке Основные сведения выберите нужную подписку, группу ресурсов, имя, имя сетевого интерфейса и регион для частной конечной точки. Они могут быть любыми, но не должны совпадать с учетной записью хранения. Тем не менее необходимо создать частную конечную точку в том же регионе, что и виртуальная сеть, в которой вы хотите создать частную конечную точку. Затем щелкните Далее: Ресурс.
В колонке Ресурс выберите для целевого подресурса файл. Затем выберите Далее: Виртуальная сеть.
В колонке Виртуальная сеть можно выбрать определенную виртуальную сеть и подсеть, в которую нужно добавить частную конечную точку. Выберите динамическое или статическое выделение 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 File Sync.
Чтобы разрешить доступ к общедоступной конечной точке учетной записи хранения только из определенных виртуальных сетей через конечные точки службы, сначала необходимо собрать информацию об учетной записи хранения и виртуальной сети. Для сбора этой информации заполните параметры <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
См. также