Azure Files menyediakan dua jenis titik akhir utama untuk mengakses berbagi file Azure:
Titik akhir publik dan privat ada di akun penyimpanan Azure. Akun penyimpanan adalah konstruksi manajemen yang mewakili kumpulan penyimpanan bersama tempat Anda dapat menyebarkan beberapa berbagi, serta sumber daya penyimpanan lainnya, seperti kontainer blob atau antrean.
Artikel ini berfokus pada cara mengonfigurasi titik akhir akun penyimpanan untuk mengakses berbagi file Azure secara langsung. Sebagian besar artikel ini juga berlaku untuk cara Azure File Sync melakukan interoperaksi dengan titik akhir publik dan privat untuk akun penyimpanan. Untuk informasi selengkapnya tentang pertimbangan jaringan untuk Azure File Sync, lihat mengonfigurasi proksi Azure File Sync dan pengaturan firewall.
Anda dapat mengonfigurasi titik akhir untuk membatasi akses jaringan ke akun penyimpanan Anda. Ada dua pendekatan untuk membatasi akses ke akun penyimpanan ke jaringan virtual:
Saat Anda membuat titik akhir privat untuk akun penyimpanan Anda, sumber daya Azure berikut ini disebarkan:
Navigasi ke akun penyimpanan yang ingin Anda buat titik akhir privatnya. Dari menu layanan, di bawah Keamanan + jaringan, pilih Jaringan, Koneksi titik akhir privat, lalu + Titik akhir privat untuk membuat titik akhir privat baru.
Wizard yang dihasilkan memiliki beberapa halaman untuk diselesaikan.
Di bilah Dasar, pilih langganan, grup sumber daya, nama, nama antarmuka jaringan dan wilayah yang diinginkan untuk titik akhir privat Anda. Ini bisa menjadi apa pun yang Anda inginkan dan tidak harus mencocokkan akun penyimpanan dengan cara apa pun, meskipun Anda harus membuat titik akhir privat di wilayah yang sama dengan jaringan virtual yang ingin Anda buat titik akhir privat. Lalu pilih Berikutnya: Sumber Daya.
Di bilah Sumber Daya, pilih file untuk sub-sumber daya target. Kemudian pilih Berikutnya: Virtual Network.
Bilah Virtual Network memungkinkan Anda memilih jaringan virtual dan subnet tertentu yang ingin ditambahkan ke titik akhir privat Anda. Pilih alokasi alamat IP dinamis atau statis untuk titik akhir privat baru. Jika Anda memilih statis, Anda juga harus memberikan nama dan alamat IP privat. Anda juga dapat secara opsional menentukan grup keamanan aplikasi. Setelah selesai, pilih Berikutnya: DNS.
Bilah DNS berisi informasi untuk mengintegrasikan titik akhir privat Anda dengan zona DNS privat. Pastikan langganan dan grup sumber daya benar, lalu pilih Berikutnya: Tag.
Anda dapat secara opsional menerapkan tag untuk mengategorikan sumber daya Anda, seperti menerapkan nama Lingkungan dan nilai Uji ke semua sumber daya pengujian. Masukkan pasangan nama/nilai jika diinginkan, lalu pilih Berikutnya: Tinjau + buat.
Pilih Buat untuk membuat titik akhir privat.
Untuk membuat titik akhir pribadi untuk akun penyimpanan Anda, Anda harus terlebih dahulu mendapatkan referensi ke akun penyimpanan Anda dan subnet jaringan virtual tempat Anda ingin menambahkan titik akhir pribadi. Ganti <storage-account-resource-group-name>
, <storage-account-name>
, <vnet-resource-group-name>
, <vnet-name>
, dan <vnet-subnet-name>
di bawah:
$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
}
Untuk membuat titik akhir pribadi, Anda harus membuat koneksi layanan tautan pribadi ke akun penyimpanan. Koneksi layanan tautan pribadi adalah input untuk pembuatan titik akhir pribadi.
# 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
Membuat zona DNS pribadi Azure memungkinkan nama asli akun penyimpanan, seperti: storageaccount.file.core.windows.net
untuk menyelesaikan ke IP pribadi di dalam jaringan virtual. Meskipun opsional dari perspektif membuat titik akhir pribadi, secara eksplisit diperlukan untuk memasang berbagi file Azure secara langsung menggunakan prinsip pengguna AD atau mengakses melalui 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
}
Sekarang setelah Anda memiliki referensi ke zona DNS pribadi, Anda harus membuat catatan A untuk akun penyimpanan Anda.
$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
Untuk membuat titik akhir pribadi untuk akun penyimpanan Anda, Anda harus terlebih dahulu mendapatkan referensi ke akun penyimpanan Anda dan subnet jaringan virtual tempat Anda ingin menambahkan titik akhir pribadi. Ganti <storage-account-resource-group-name>
, <storage-account-name>
, <vnet-resource-group-name>
, <vnet-name>
, dan <vnet-subnet-name>
di bawah:
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 '"')
Untuk membuat titik akhir privat, Anda harus memastikan terlebih dahulu bahwa kebijakan jaringan titik akhir privat subnet diatur ke nonaktif. Kemudian, Anda dapat membuat titik akhir privat dengan perintah 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 '"')
Membuat zona DNS pribadi Azure memungkinkan nama asli akun penyimpanan, seperti: storageaccount.file.core.windows.net
untuk menyelesaikan ke IP pribadi di dalam jaringan virtual. Meskipun opsional dari perspektif pembuatan titik akhir pribadi, secara eksplisit diperlukan untuk memasang berbagi file Azure menggunakan prinsipal pengguna AD atau mengakses melalui 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
Sekarang setelah Anda memiliki referensi ke zona DNS pribadi, Anda harus membuat catatan A untuk akun penyimpanan Anda.
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
Jika Anda memiliki VM di dalam jaringan virtual Anda, atau Anda telah mengonfigurasi penerusan DNS seperti yang dijelaskan dalam Mengonfigurasi penerusan DNS untuk Azure Files, Anda dapat menguji bahwa titik akhir privat Anda disiapkan dengan benar. Jalankan perintah berikut dari PowerShell, baris perintah, atau terminal (berfungsi untuk Windows, Linux, atau macOS). Anda harus mengganti <storage-account-name>
dengan nama akun penyimpanan yang sesuai:
nslookup <storage-account-name>.file.core.windows.net
Jika berhasil, Anda akan melihat output berikut, di mana 192.168.0.5
adalah alamat IP privat titik akhir privat di jaringan virtual Anda (output ditampilkan untuk 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
Jika Anda memiliki VM di dalam jaringan virtual Anda, atau Anda telah mengonfigurasi penerusan DNS seperti yang dijelaskan dalam Mengonfigurasi penerusan DNS untuk Azure Files, Anda dapat menguji bahwa titik akhir privat Anda disiapkan dengan benar dengan menjalankan perintah berikut:
$storageAccountHostName = [System.Uri]::new($storageAccount.PrimaryEndpoints.file) | `
Select-Object -ExpandProperty Host
Resolve-DnsName -Name $storageAccountHostName
Jika berhasil, Anda akan melihat output berikut, di mana 192.168.0.5
adalah alamat IP privat titik akhir privat di jaringan virtual Anda:
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
Jika Anda memiliki VM di dalam jaringan virtual Anda, atau Anda telah mengonfigurasi penerusan DNS seperti yang dijelaskan dalam Mengonfigurasi penerusan DNS untuk Azure Files, Anda dapat menguji bahwa titik akhir privat Anda disiapkan dengan benar dengan menjalankan perintah berikut:
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
Jika semuanya berhasil, Anda akan melihat output berikut, di mana 192.168.0.5
adalah alamat IP privat titik akhir privat di jaringan virtual Anda. Anda masih harus menggunakan storageaccount.file.core.windows.net
untuk memasang berbagi file Anda alih-alih privatelink
jalur.
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
Membatasi akses titik akhir publik terlebih dahulu mengharuskan Anda menonaktifkan akses umum ke titik akhir publik. Menonaktifkan akses ke titik akhir publik tidak memengaruhi titik akhir privat. Setelah titik akhir publik dinonaktifkan, Anda dapat memilih jaringan atau alamat IP tertentu yang mungkin terus mengaksesnya. Secara umum, sebagian besar kebijakan firewall untuk akun penyimpanan akan membatasi akses jaringan ke satu atau beberapa jaringan virtual.
Jika akses ke titik akhir publik dinonaktifkan, akun penyimpanan masih dapat diakses melalui titik akhir privatnya. Jika tidak, permintaan yang valid ke titik akhir publik akun penyimpanan akan ditolak, kecuali mereka berasal dari sumber yang diizinkan secara khusus.
Buka akun penyimpanan yang ingin Anda batasi semua akses ke titik akhir publik. Dalam daftar isi untuk akun penyimpanan, pilih Jaringan.
Di bagian atas halaman, pilih tombol radio Diaktifkan dari jaringan virtual dan alamat IP yang dipilih. Tombol ini akan memunculkan sejumlah pengaturan untuk mengontrol pembatasan titik akhir publik. Pilih Izinkan layanan Azure pada daftar layanan tepercaya untuk mengakses akun penyimpanan ini untuk memungkinkan pihak pertama tepercaya layanan Microsoft seperti Azure File Sync untuk mengakses akun penyimpanan.
Perintah PowerShell berikut akan menolak semua lalu lintas ke titik akhir publik akun penyimpanan. Perhatikan bahwa perintah ini memiliki parameter -Bypass
yang diatur ke AzureServices
. Perintah ini akan memungkinkan layanan pihak pertama tepercaya seperti Sinkronisasi File Azure untuk mengakses akun penyimpanan melalui titik akhir publik.
# 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
Perintah CLI berikut akan menolak semua lalu lintas ke titik akhir publik akun penyimpanan. Perhatikan bahwa perintah ini memiliki parameter -bypass
yang diatur ke AzureServices
. Perintah ini akan memungkinkan layanan pihak pertama tepercaya seperti Sinkronisasi File Azure untuk mengakses akun penyimpanan melalui titik akhir publik.
# 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
Saat Anda membatasi akun penyimpanan ke jaringan virtual tertentu, Anda mengizinkan permintaan ke titik akhir publik dari dalam jaringan virtual yang ditentukan. Tindakan ini berfungsi dengan menggunakan kapabilitas jaringan virtual yang disebut titik akhir layanan. Ini dapat digunakan dengan atau tanpa titik akhhir privat.
Buka akun penyimpanan yang ingin Anda batasi titik akhir publik untuk jaringan virtual tertentu. Dalam daftar isi untuk akun penyimpanan, pilih Jaringan.
Di bagian atas halaman, pilih tombol radio Diaktifkan dari jaringan virtual dan alamat IP yang dipilih. Tombol ini akan memunculkan sejumlah pengaturan untuk mengontrol pembatasan titik akhir publik. Pilih +Tambahkan jaringan virtual yang ada untuk memilih jaringan virtual tertentu yang harus diizinkan untuk mengakses akun penyimpanan melalui titik akhir publik. Pilih jaringan virtual dan subnet untuk jaringan virtual tersebut, lalu pilih Aktifkan.
Pilih Izinkan layanan Azure pada daftar layanan tepercaya untuk mengakses akun penyimpanan ini untuk memungkinkan pihak pertama tepercaya layanan Microsoft seperti Azure File Sync untuk mengakses akun penyimpanan.
Untuk membatasi akses ke titik akhir publik akun penyimpanan ke jaringan virtual tertentu menggunakan titik akhir layanan, kita perlu terlebih dahulu mengumpulkan informasi tentang akun penyimpanan serta jaringan virtual. Masukkan <storage-account-resource-group>
, <storage-account-name>
, <vnet-resource-group-name>
, <vnet-name>
, serta <subnet-name>
untuk mengumpulkan informasi ini.
$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
}
Agar lalu lintas dari jaringan virtual diizinkan oleh fabrik jaringan Azure untuk sampai ke titik akhir publik akun penyimpanan, subnet jaringan virtual harus mengekspos titik akhir layanan Microsoft.Storage
. Perintah PowerShell berikut akan menambahkan Microsoft.Storage
titik akhir layanan ke subnet jika belum ada.
$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
}
Langkah terakhir dalam membatasi lalu lintas ke akun penyimpanan adalah dengan membuat aturan jaringan dan menambahkannya ke seperangkat aturan jaringan akun penyimpanan.
$networkRule = $storageAccount | Add-AzStorageAccountNetworkRule `
-VirtualNetworkResourceId $subnet.Id `
-ErrorAction Stop
$storageAccount | Update-AzStorageAccountNetworkRuleSet `
-DefaultAction Deny `
-Bypass AzureServices `
-VirtualNetworkRule $networkRule `
-WarningAction SilentlyContinue `
-ErrorAction Stop | `
Out-Null
Untuk membatasi akses ke titik akhir publik akun penyimpanan ke jaringan virtual tertentu menggunakan titik akhir layanan, kita perlu terlebih dahulu mengumpulkan informasi tentang akun penyimpanan serta jaringan virtual. Masukkan <storage-account-resource-group>
, <storage-account-name>
, <vnet-resource-group-name>
, <vnet-name>
, serta <subnet-name>
untuk mengumpulkan informasi ini.
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 '"')
Agar lalu lintas dari jaringan virtual diizinkan oleh fabrik jaringan Azure untuk sampai ke titik akhir publik akun penyimpanan, subnet jaringan virtual harus mengekspos titik akhir layanan Microsoft.Storage
. Perintah CLI berikut akan menambahkan Microsoft.Storage
titik akhir layanan ke subnet jika belum ada.
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
Langkah terakhir dalam membatasi lalu lintas ke akun penyimpanan adalah dengan membuat aturan jaringan dan menambahkannya ke seperangkat aturan jaringan akun penyimpanan.
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