Azure Files innehåller två huvudtyper av slutpunkter för åtkomst till Azure-filresurser:
Den här artikeln fokuserar på hur du konfigurerar en privat slutpunkt för direkt åtkomst till Azure filresurs. Mycket av den här artikeln handlar också om hur Azure File Sync interopererar med offentliga och privata slutpunkter för lagringskontot. Mer information om nätverksöverväganden för Azure File Sync finns i konfigurera proxy- och brandväggsinställningar för Azure File Sync.
Du kan konfigurera dina slutpunkter för att begränsa nätverksåtkomsten till ditt lagringskonto. Det finns två sätt att begränsa åtkomsten till ett lagringskonto till ett virtuellt nätverk:
När du skapar en privat slutpunkt för dina filresurser distribueras följande Azure resurser:
Processen för att skapa privata slutpunkter skiljer sig något beroende på om du använder klassiska filresurser eller den nya filresursen:
Konfigurationsstegen för det virtuella nätverket, skapande av privata slutpunkter och DNS-zonkonfiguration är identiska för båda funktionerna. Endast resursreferensen, grupp-ID och DNS-postnamnet skiljer sig åt.
Gå till den resursgrupp där du vill skapa en privat slutpunkt. Klicka på + Skapa och sök efter privat slutpunkt. Välj den privata slutpunktsresursen och välj sedan Skapa.
Den resulterande guiden har flera sidor som måste fyllas i.
På bladet Grundläggande väljer du önskad prenumeration, resursgrupp, namn, nätverksgränssnittsnamn och region för din privata slutpunkt. Du måste skapa den privata slutpunkten i samma region som det virtuella nätverk som du vill skapa den privata slutpunkten i. Välj sedan Nästa: Resurs.
Om du använder klassiska fildelningar:
På bladet Resource väljer du Microsoft. Storage/storageAccounts från den nedrullningsbara menyn för resurstypen. Välj sedan det specifika lagringskonto som du vill ansluta till som Resurs. Målunderresursen fylls i automatiskt med file. Välj sedan Nästa: Virtuellt nätverk.
Om du använder den nya fildelningen:
På bladet Resource väljer du Microsoft. FileShares/fileShares från den nedrullningsbara menyn för resurstypen. Välj sedan den specifika filresurs som du vill ansluta till som resurs. Målunderresursen fylls i automatiskt med FileShare. Välj sedan Nästa: Virtuellt nätverk.
Med bladet Virtuellt nätverk kan du välja det specifika virtuella nätverk och undernät som du vill lägga till din privata slutpunkt i. Välj dynamisk eller statisk IP-adressallokering för den nya privata slutpunkten. Om du väljer statisk måste du också ange ett namn och en privat IP-adress. Du kan också ange en programsäkerhetsgrupp. När du är klar väljer du Nästa: DNS.
DNS-bladet innehåller information för att integrera din privata slutpunkt med en privat DNS-zon. Kontrollera att prenumerationen och resursgruppen är korrekta och välj sedan Nästa: Taggar.
Du kan också använda taggar för att kategorisera dina resurser, till exempel att använda namnet Miljö och värdet Test på alla testresurser. Ange namn/värdepar om du vill och välj sedan Nästa: Granska + skapa.
Välj Skapa för att skapa den privata slutpunkten.
Om du vill skapa en privat slutpunkt måste du först hämta en referens till ditt lagringskonto eller din filresurs och det virtuella nätverksundernätet som du vill lägga till den privata slutpunkten till. Ersätt platshållarvärdena nedan med dina egna.
För klassiska fildelningar hämtar du en referens till lagringskontot:
$storageAccountResourceGroupName = "<storage-account-resource-group-name>"
$storageAccountName = "<storage-account-name>"
$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
}
# Set common variables for private endpoint creation
$resourceGroupName = $storageAccountResourceGroupName
$privateLinkResourceId = $storageAccount.Id
$groupId = "file"
$dnsRecordName = $storageAccountName
För fildelningar som har skapats med resursprovidern Microsoft.FileShares hämtar du en referens till fildelningen:
$fileShareResourceGroupName = "<resource-group-name>"
$fileShareName = "<file-share-name>"
$fileShare = Get-AzFileShare `
-ResourceGroupName $fileShareResourceGroupName `
-ResourceName $fileShareName `
-ErrorAction SilentlyContinue
if ($null -eq $fileShare) {
$errorMessage = "File share $fileShareName not found "
$errorMessage += "in resource group $fileShareResourceGroupName."
Write-Error -Message $errorMessage -ErrorAction Stop
}
# Extract hostName and hostNamePrefix for DNS record
$hostName = $fileShare.HostName
$hostNamePrefix = $hostName.Split('.')[0]
# Set common variables for private endpoint creation
$resourceGroupName = $fileShareResourceGroupName
$privateLinkResourceId = $fileShare.Id
$groupId = "FileShare"
$dnsRecordName = $hostNamePrefix
När du har angett de vanliga variablerna ovan är de återstående stegen desamma för båda funktionerna. Hämta referenser till det virtuella nätverket och undernätet:
$virtualNetworkResourceGroupName = "<vnet-resource-group-name>"
$virtualNetworkName = "<vnet-name>"
$subnetName = "<vnet-subnet-name>"
# 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
}
Om du vill skapa en privat slutpunkt måste du skapa en privat länktjänstanslutning. Anslutningen till private link-tjänsten är ett indata vid skapandet av den privata slutpunkten.
# Disable private endpoint network policies
$subnet.PrivateEndpointNetworkPolicies = "Disabled"
$virtualNetwork = $virtualNetwork | `
Set-AzVirtualNetwork -ErrorAction Stop
# Create a private link service connection.
$privateEndpointConnection = New-AzPrivateLinkServiceConnection `
-Name "$dnsRecordName-Connection" `
-PrivateLinkServiceId $privateLinkResourceId `
-GroupId $groupId `
-ErrorAction Stop
# Create a new private endpoint.
$privateEndpoint = New-AzPrivateEndpoint `
-ResourceGroupName $resourceGroupName `
-Name "$dnsRecordName-PrivateEndpoint" `
-Location $virtualNetwork.Location `
-Subnet $subnet `
-PrivateLinkServiceConnection $privateEndpointConnection `
-ErrorAction Stop
Om du skapar en Azure privat DNS-zon kan det ursprungliga värdnamnet matchas mot den privata IP-adressen i det virtuella nätverket. Även om det är valfritt ur perspektivet att skapa en privat slutpunkt, krävs det uttryckligen för att montera Azure-fildelningen direkt med hjälp av ett AD-användarhuvudprincip eller för åtkomst via REST-API:et.
# Get the host name suffix (core.windows.net for public cloud).
# This is done like this so this script will seamlessly work for non-public Azure.
$hostNameSuffix = 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.$hostNameSuffix"
# 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
}
Nu när du har en referens till den privata DNS-zonen måste du skapa en post.
$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 $dnsRecordName `
-RecordType A `
-ZoneName $dnsZoneName `
-Ttl 600 `
-PrivateDnsRecords $privateDnsRecordConfig `
-ErrorAction Stop | `
Out-Null
Om du vill skapa en privat slutpunkt måste du först hämta en referens till ditt lagringskonto eller filresurs, plus det virtuella nätverksundernätet som du vill lägga till den privata slutpunkten till. Ersätt platshållarvärdena nedan med dina egna.
För klassiska fildelningar hämtar du en referens till lagringskontot:
storageAccountResourceGroupName="<storage-account-resource-group-name>"
storageAccountName="<storage-account-name>"
# Get storage account ID
privateLinkResourceId=$(az storage account show \
--resource-group $storageAccountResourceGroupName \
--name $storageAccountName \
--query "id" --output tsv)
# Set common variables for private endpoint creation
resourceGroupName=$storageAccountResourceGroupName
groupId="file"
dnsRecordName=$storageAccountName
För fildelningar som skapats med resursprovidern Microsoft.FileShares, hämta en referens till fildelningen:
# Install the fileshares extension
az extension add --name fileshares
fileShareResourceGroupName="<resource-group-name>"
fileShareName="<file-share-name>"
# Get the file share resource ID and host name
privateLinkResourceId=$(az fileshare show \
--resource-group $fileShareResourceGroupName \
--name $fileShareName \
--query "id" --output tsv)
hostName=$(az fileshare show \
--resource-group $fileShareResourceGroupName \
--name $fileShareName \
--query "properties.hostName" --output tsv)
hostNamePrefix=$(echo $hostName | cut -d'.' -f1)
# Set common variables for private endpoint creation
resourceGroupName=$fileShareResourceGroupName
groupId="FileShare"
dnsRecordName=$hostNamePrefix
När du har angett de vanliga variablerna ovan är de återstående stegen desamma för båda funktionerna. Hämta referenser till det virtuella nätverket och undernätet:
virtualNetworkResourceGroupName="<vnet-resource-group-name>"
virtualNetworkName="<vnet-name>"
subnetName="<vnet-subnet-name>"
virtualNetwork=$(az network vnet show \
--resource-group $virtualNetworkResourceGroupName \
--name $virtualNetworkName \
--query "id" --output tsv)
subnet=$(az network vnet subnet show \
--resource-group $virtualNetworkResourceGroupName \
--vnet-name $virtualNetworkName \
--name $subnetName \
--query "id" --output tsv)
Om du vill skapa en privat slutpunkt kontrollerar du att undernätets privata slutpunktsnätverksprincip är inaktiverad och skapar sedan den privata slutpunkten med 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" --output tsv)
# Create a private endpoint
privateEndpoint=$(az network private-endpoint create \
--resource-group $resourceGroupName \
--name "$dnsRecordName-PrivateEndpoint" \
--location $region \
--subnet $subnet \
--private-connection-resource-id $privateLinkResourceId \
--group-id $groupId \
--connection-name "$dnsRecordName-Connection" \
--query "id" --output tsv)
Genom att skapa en Azure privat DNS-zon kan det ursprungliga värdnamnet matchas mot den privata IP-adressen i det virtuella nätverket. Även om det är valfritt när du skapar en privat slutpunkt krävs det för att montera Azure-filresursen med hjälp av en AD-användaridentitet eller för åtkomst via FileREST-API:et.
# Get the desired storage account suffix (core.windows.net for public cloud).
# This is done so the script will work for non-public Azure clouds.
storageAccountSuffix=$(az cloud show \
--query "suffixes.storageEndpoint" --output tsv)
# For public cloud, this generates the DNS suffix:
# privatelink.file.core.windows.net.
dnsZoneName="privatelink.file.$storageAccountSuffix"
# Find a DNS zone matching the desired name attached to this virtual network.
possibleDnsZones=$(az network private-dns zone list \
--query "[?name == '$dnsZoneName'].id" \
--output tsv)
dnsZone=""
for possibleDnsZone in $possibleDnsZones
do
possibleResourceGroupName=$(az resource show \
--ids $possibleDnsZone \
--query "resourceGroup" --output tsv)
link=$(az network private-dns link vnet list \
--resource-group $possibleResourceGroupName \
--zone-name $dnsZoneName \
--query "[?virtualNetwork.id == '$virtualNetwork'].id" \
--output tsv)
if [ -n "$link" ]
then
dnsZoneResourceGroup=$possibleResourceGroupName
dnsZone=$possibleDnsZone
break
fi
done
if [ -z "$dnsZone" ]
then
# No matching DNS zone attached to the virtual network, so create a new one.
dnsZone=$(az network private-dns zone create \
--resource-group $virtualNetworkResourceGroupName \
--name $dnsZoneName \
--query "id" --output tsv)
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
Nu när du har en referens till den privata DNS-zonen skapar du en A-post.
privateEndpointNIC=$(az network private-endpoint show \
--ids $privateEndpoint \
--query "networkInterfaces[0].id" --output tsv)
privateEndpointIP=$(az network nic show \
--ids $privateEndpointNIC \
--query "ipConfigurations[0].privateIPAddress" --output tsv)
az network private-dns record-set a create \
--resource-group $dnsZoneResourceGroup \
--zone-name $dnsZoneName \
--name $dnsRecordName \
--output none
az network private-dns record-set a add-record \
--resource-group $dnsZoneResourceGroup \
--zone-name $dnsZoneName \
--record-set-name $dnsRecordName \
--ipv4-address $privateEndpointIP \
--output none
Om du har en virtuell dator i det virtuella nätverket, eller om du har konfigurerat DNS-vidarebefordran enligt beskrivningen i Konfigurera DNS-vidarebefordran för Azure Files, kan du testa att den privata slutpunkten är korrekt konfigurerad. Kör följande kommandon från PowerShell, kommandoraden eller terminalen (fungerar för Windows, Linux eller macOS).
För klassiska fildelningar, ersätt <storage-account-name> med namnet på rätt lagringskonto:
nslookup <storage-account-name>.file.core.windows.net
För filresurser som skapats med Microsoft. FileShares-resursprovidern använder filresursens värdnamn. På fliken Översikt för filresursen väljer du JSON-vy uppe till höger. I JSON-vyn under egenskaper kopierar du värdet för hostName. Formatet ser ut som fs-xxxxxxxxxxxxxxxxx.xx.file.storage.azure.net.
nslookup <file-share-host-name>
Om det lyckas bör du se utdata som liknar följande, där 192.168.0.5 är den privata IP-adressen för den privata slutpunkten i det virtuella nätverket (utdata som visas för Windows).
För klassiska filresurser:
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
För fildelningar som skapats med resursprovidern Microsoft.FileShares:
Server: UnKnown
Address: 10.2.4.4
Non-authoritative answer:
Name: <hostNamePrefix>.privatelink.file.core.windows.net
Address: 192.168.0.5
Aliases: <hostNamePrefix>.<zone>.file.storage.azure.net
Om du har en virtuell dator i det virtuella nätverket, eller om du har konfigurerat DNS-vidarebefordran enligt beskrivningen i Konfigurera DNS-vidarebefordran för Azure Files, kan du testa att den privata slutpunkten har konfigurerats korrekt genom att köra följande kommandon:
För klassiska filresurser:
$storageAccountHostName = [System.Uri]::new($storageAccount.PrimaryEndpoints.file) | `
Select-Object -ExpandProperty Host
Resolve-DnsName -Name $storageAccountHostName
För fildelningar som skapats med resursleverantören Microsoft.FileShares:
Resolve-DnsName -Name $fileShare.HostName
Om det lyckas bör du se utdata som liknar följande, där 192.168.0.5 är den privata IP-adressen för den privata slutpunkten i det virtuella nätverket.
För klassiska filresurser:
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
För fildelningar som skapats med resursprovidern Microsoft.FileShares:
Name Type TTL Section NameHost
---- ---- --- ------- --------
<hostNamePrefix>.<zone>.file.storage.azur CNAME 60 Answer <hostNamePrefix>.privatelink.file.core.windows.net
e.net
Name : <hostNamePrefix>.privatelink.file.core.windows.net
QueryType : A
TTL : 600
Section : Answer
IP4Address : 192.168.0.5
Om du har en virtuell dator i det virtuella nätverket, eller om du har konfigurerat DNS-vidarebefordran enligt beskrivningen i Konfigurera DNS-vidarebefordran för Azure Files, kan du testa att den privata slutpunkten har konfigurerats korrekt genom att köra följande kommandon:
För klassiska fildelningar:
httpEndpoint=$(az storage account show \
--resource-group $storageAccountResourceGroupName \
--name $storageAccountName \
--query "primaryEndpoints.file" --output tsv)
hostName=$(echo $httpEndpoint | cut -c7-$(expr length $httpEndpoint) | tr -d "/")
nslookup $hostName
För fildelningar som har skapats med resursprovidern Microsoft.FileShares:
hostName=$(az fileshare show \
--resource-group $fileShareResourceGroupName \
--name $fileShareName \
--query "properties.hostName" --output tsv)
nslookup $hostName
Om det lyckas bör du se utdata som liknar följande, där 192.168.0.5 är den privata IP-adressen för den privata slutpunkten i det virtuella nätverket. Du bör fortfarande använda det ursprungliga värdnamnet (storageaccount.file.core.windows.net för den klassiska upplevelsen eller filresursens hostName för den nya upplevelsen) för att montera filresursen i stället för sökvägen privatelink.
För klassiska filresurser:
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
För fildelningar som skapats med resursprovidern Microsoft.FileShares:
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
<hostNamePrefix>.<zone>.file.storage.azure.net canonical name = <hostNamePrefix>.privatelink.file.core.windows.net.
Name: <hostNamePrefix>.privatelink.file.core.windows.net
Address: 192.168.0.5
För att begränsa åtkomsten till den offentliga slutpunkten måste du först inaktivera allmän åtkomst till den offentliga slutpunkten. Inaktivering av åtkomst till den offentliga slutpunkten påverkar inte privata slutpunkter. När den offentliga slutpunkten har inaktiverats kan du välja specifika nätverk eller IP-adresser som kan fortsätta att komma åt den. I allmänhet begränsar de flesta brandväggsprinciper för ett lagringskonto nätverksåtkomst till ett eller flera virtuella nätverk.
När åtkomsten till den offentliga slutpunkten är inaktiverad kan lagringskontot fortfarande nås via sina privata slutpunkter. Annars avvisas giltiga begäranden till lagringskontots offentliga slutpunkt, såvida de inte kommer från en specifikt tillåten källa.
För klassiska fildelningar:
Gå till lagringskontot som du vill begränsa all åtkomst till den offentliga slutpunkten för. I innehållsförteckningen för lagringskontot väljer du Nätverk.
Längst upp på sidan väljer du radioknappen Aktiverad från valda virtuella nätverk och IP-adresser. Detta döljer ett antal inställningar för att kontrollera begränsningen av den offentliga slutpunkten. Välj Tillåt att Azure-tjänster i listan över betrodda tjänster får åtkomst till det här lagringskontot så att betrodda förstaparts-Microsoft-tjänster till exempel Azure File Sync får åtkomst till lagringskontot.
För fildelningar som skapats med resursprovidern Microsoft.FileShares:
Gå till den filresurs som du vill inaktivera offentlig åtkomst för. I tjänstmenyn går du till Inställningar och väljer Konfiguration. Ange Åtkomst till Offentligt nätverktill Inaktiverad och välj sedan Spara.
För klassiska fildelningar blockerar följande PowerShell-kommando all trafik till lagringskontots publika slutpunkt. Parametern -Bypass är inställd på AzureServices för att tillåta betrodda tjänster från första part, till exempel Azure File Sync att komma åt lagringskontot via den offentliga slutpunkten.
# This assumes $storageAccount is still defined from the beginning of this guide.
$storageAccount | Update-AzStorageAccountNetworkRuleSet `
-DefaultAction Deny `
-Bypass AzureServices `
-WarningAction SilentlyContinue `
-ErrorAction Stop | `
Out-Null
För filresurser som skapats med Microsoft. FileShares-resursprovider, ange -PublicNetworkAccess till Disabled på filresursen.
# To learn more about the Az.FileShare module, see https://www.powershellgallery.com/packages/Az.FileShare/0.1.0
Install-Module -Name Az.FileShare -Repository psgallery -RequiredVersion 0.1.0
$fileShareResourceGroupName = "<resource-group-name>"
$fileShareName = "<file-share-name>"
Update-AzFileShare `
-ResourceGroupName $fileShareResourceGroupName `
-ResourceName $fileShareName `
-PublicNetworkAccess Disabled
För klassiska fildelningar blockerar följande CLI-kommando all trafik till lagringskontots offentliga slutpunkt. Parametern --bypass är inställd på AzureServices för att tillåta betrodda tjänster från första part, till exempel Azure File Sync att komma åt lagringskontot via den offentliga slutpunkten.
# 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
För filresurser som skapats med Microsoft. FileShares-resursprovider, ange --public-network-access till Disabled på filresursen.
# Install the fileshares extension
az extension add --name fileshares
fileShareResourceGroupName="<resource-group-name>"
fileShareName="<file-share-name>"
az fileshare update \
--name $fileShareName \
--resource-group $fileShareResourceGroupName \
--public-network-access Disabled
När du begränsar lagringskontot till specifika virtuella nätverk tillåter du begäranden till den offentliga slutpunkten inifrån de angivna virtuella nätverken. Detta fungerar med hjälp av funktionen för det virtuella nätverket som kallas tjänstslutpunkter. Detta kan användas med eller utan privata slutpunkter.
För klassiska fildelningar:
Gå till lagringskontot som du vill begränsa den offentliga slutpunkten till specifika virtuella nätverk för. I innehållsförteckningen för lagringskontot väljer du Nätverk.
Längst upp på sidan väljer du radioknappen Aktiverad från valda virtuella nätverk och IP-adresser. Detta döljer ett antal inställningar för att kontrollera begränsningen av den offentliga slutpunkten. Välj +Lägg till befintligt virtuellt nätverk för att välja det specifika virtuella nätverk som ska tillåtas att komma åt lagringskontot via den offentliga slutpunkten. Välj ett virtuellt nätverk och ett undernät för det virtuella nätverket och välj sedan Aktivera.
Välj Tillåt att Azure-tjänster i listan över betrodda tjänster får åtkomst till det här lagringskontot så att betrodda förstaparts-Microsoft-tjänster till exempel Azure File Sync får åtkomst till lagringskontot.
För fildelningar som skapats med resursprovidern Microsoft.FileShares:
Gå till den filresurs som du vill begränsa offentlig åtkomst för. I tjänstmenyn går du till Inställningar och väljer Konfiguration. Under Åtkomst till offentligt nätverk väljer du Aktiverad från valda virtuella nätverk, lägger sedan till de virtuella nätverk och undernät som tillåts komma åt resursen och väljer Spara.
För klassiska fildelningar används tjänstslutpunkter för att begränsa åtkomsten till lagringskontots offentliga slutpunkt till specifika virtuella nätverk. Samla först in information om lagringskontot och det virtuella nätverket. Ersätt platshållarvärdena nedan med dina egna.
$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
}
För att trafik från det virtuella nätverket ska tillåtas av Azure-nätverksinfrastrukturen för att komma till lagringskontots offentliga slutpunkt måste det virtuella nätverkets undernät ha Microsoft.Storage tjänstslutpunkten exponerad. Följande PowerShell-kommandon lägger till tjänstslutpunkten Microsoft.Storage i undernätet om den inte redan finns där.
$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
}
Det sista steget för att begränsa trafik till lagringskontot är att skapa en nätverksregel och lägga till den i lagringskontots nätverksregeluppsättning.
$networkRule = $storageAccount | Add-AzStorageAccountNetworkRule `
-VirtualNetworkResourceId $subnet.Id `
-ErrorAction Stop
$storageAccount | Update-AzStorageAccountNetworkRuleSet `
-DefaultAction Deny `
-Bypass AzureServices `
-VirtualNetworkRule $networkRule `
-WarningAction SilentlyContinue `
-ErrorAction Stop | `
Out-Null
För filresurser som skapats med Microsoft. FileShares-resursprovidern kan du skicka de tillåtna resurs-ID:na för undernätet direkt till Update-AzFileShare med hjälp av -PublicAccessPropertyAllowedSubnet. Det finns ingen separat tjänstslutpunkt eller nätverksregelkonfiguration som krävs för lagringskontot.
# To learn more about the Az.FileShare module, see https://www.powershellgallery.com/packages/Az.FileShare/0.1.0
Install-Module -Name Az.FileShare -Repository psgallery -RequiredVersion 0.1.0
$fileShareResourceGroupName = "<resource-group-name>"
$fileShareName = "<file-share-name>"
$virtualNetworkResourceGroupName = "<vnet-resource-group-name>"
$virtualNetworkName = "<vnet-name>"
$subnetName = "<subnet-name>"
$subnet = Get-AzVirtualNetwork `
-ResourceGroupName $virtualNetworkResourceGroupName `
-Name $virtualNetworkName | `
Select-Object -ExpandProperty Subnets | `
Where-Object { $_.Name -eq $subnetName }
Update-AzFileShare `
-ResourceGroupName $fileShareResourceGroupName `
-ResourceName $fileShareName `
-PublicAccessPropertyAllowedSubnet @($subnet.Id)
För klassiska fildelningar används tjänstslutpunkter för att begränsa åtkomsten till lagringskontots offentliga slutpunkt från specifika virtuella nätverk. Samla först in information om lagringskontot och det virtuella nätverket. Ersätt platshållarvärdena nedan med dina egna.
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" --output tsv)
virtualNetwork=$(az network vnet show \
--resource-group $restrictToVirtualNetworkResourceGroupName \
--name $restrictToVirtualNetworkName \
--query "id" --output tsv)
subnet=$(az network vnet subnet show \
--resource-group $restrictToVirtualNetworkResourceGroupName \
--vnet-name $restrictToVirtualNetworkName \
--name $subnetName \
--query "id" --output tsv)
För att trafik från det virtuella nätverket ska tillåtas av Azure-nätverksinfrastrukturen för att komma till lagringskontots offentliga slutpunkt måste det virtuella nätverkets undernät ha Microsoft.Storage tjänstslutpunkten exponerad. Följande CLI-kommandon lägger till tjänstslutpunkten Microsoft.Storage i undernätet om den inte redan finns där.
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
Det sista steget för att begränsa trafik till lagringskontot är att skapa en nätverksregel och lägga till den i lagringskontots nätverksregeluppsättning.
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
För fildelningar som skapats med resursprovidern Microsoft.FileShares skickar du resurs-ID:n för de tillåtna undernäten direkt till az fileshare update med --allowed-subnets. Ingen separat tjänstslutpunkt eller nätverksregelkonfiguration krävs för lagringskontot.
# Install the fileshares extension
az extension add --name fileshares
fileShareResourceGroupName="<resource-group-name>"
fileShareName="<file-share-name>"
virtualNetworkResourceGroupName="<vnet-resource-group-name>"
virtualNetworkName="<vnet-name>"
subnetName="<subnet-name>"
subnetId=$(az network vnet subnet show \
--resource-group $virtualNetworkResourceGroupName \
--vnet-name $virtualNetworkName \
--name $subnetName \
--query "id" --output tsv)
az fileshare update \
--name $fileShareName \
--resource-group $fileShareResourceGroupName \
--allowed-subnets $subnetId