Konfigurera nätverksslutpunkter för åtkomst till Azure-filresurser
Artikel
Azure Files innehåller två huvudtyper av slutpunkter för åtkomst till Azure-filresurser:
Offentliga slutpunkter, som har en offentlig IP-adress och kan nås var som helst i världen.
Privata slutpunkter, som finns i ett virtuellt nätverk och har en privat IP-adress inifrån adressutrymmet för det virtuella nätverket.
Offentliga och privata slutpunkter finns på Azure Storage-kontot. Ett lagringskonto är en hanteringskonstruktion som representerar en delad lagringspool där du kan distribuera flera filresurser samt andra lagringsresurser, till exempel blobcontainrar eller köer.
Den här artikeln fokuserar på hur du konfigurerar ett lagringskontos slutpunkter för direkt åtkomst till Azure-filresursen. Mycket av den här artikeln gäller även för hur Azure File Sync interoperates 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.
Vi rekommenderar att du läser nätverksöverväganden för Azure Files innan du läser den här guiden.
Gäller för
Typ av filresurs
SMB
NFS
Standardfilresurser (GPv2), LRS/ZRS
Standardfilresurser (GPv2), GRS/GZRS
Premiumfilresurser (FileStorage), LRS/ZRS
Förutsättningar
Den här artikeln förutsätter att du redan har skapat en Azure-prenumeration. Om du inte redan har en prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.
Den här artikeln förutsätter att du redan har skapat en Azure-filresurs i ett lagringskonto som du vill ansluta till lokalt. Information om hur du skapar en Azure-filresurs finns i Skapa en Azure-filresurs.
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:
Begränsa den offentliga slutpunkten till ett eller flera virtuella nätverk. Detta fungerar med hjälp av funktionen för det virtuella nätverket som kallas tjänstslutpunkter. När du begränsar trafiken till ett lagringskonto via en tjänstslutpunkt kommer du fortfarande åt lagringskontot via den offentliga IP-adressen, men åtkomst är endast möjlig från de platser som du anger i konfigurationen.
Skapa en privat slutpunkt
När du skapar en privat slutpunkt för ditt lagringskonto distribueras följande Azure-resurser:
En privat slutpunkt: En Azure-resurs som representerar lagringskontots privata slutpunkt. Du kan se detta som en resurs som ansluter ett lagringskonto och ett nätverksgränssnitt.
Ett nätverksgränssnitt (NIC): Nätverksgränssnittet som underhåller en privat IP-adress i det angivna virtuella nätverket/undernätet. Det här är exakt samma resurs som distribueras när du distribuerar en virtuell dator (VM), men i stället för att tilldelas till en virtuell dator ägs den av den privata slutpunkten.
En privat DNS-zon (Domain Name System): Om du inte har distribuerat en privat slutpunkt för det här virtuella nätverket tidigare distribueras en ny privat DNS-zon för ditt virtuella nätverk. En DNS A-post skapas också för lagringskontot i den här DNS-zonen. Om du redan har distribuerat en privat slutpunkt i det här virtuella nätverket läggs en ny A-post för lagringskontot till i den befintliga DNS-zonen. Det är valfritt att distribuera en DNS-zon. Det rekommenderas dock starkt och krävs om du monterar dina Azure-filresurser med ad-tjänstens huvudnamn eller använder FileREST-API:et.
Kommentar
Den här artikeln använder DNS-suffixet för lagringskontot för de offentliga Azure-regionerna, core.windows.net. Den här kommentaren gäller även för Azure Sovereign-moln som Azure US Government-molnet och Microsoft Azure som drivs av 21Vianet-molnet. Ersätt bara lämpliga suffix för din miljö.
Gå till lagringskontot som du vill skapa en privat slutpunkt för. I innehållsförteckningen för lagringskontot väljer du Nätverk, Privata slutpunktsanslutningar och sedan + Privat slutpunkt för att skapa en ny privat slutpunkt.
Den resulterande guiden har flera sidor att slutföra.
På bladet Grundläggande väljer du önskad prenumeration, resursgrupp, namn, nätverksgränssnittsnamn och region för din privata slutpunkt. Dessa kan vara vad du vill, de behöver inte matcha lagringskontot på något sätt, även om 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.
På bladet Resurs väljer du fil för målunderresursen. 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.
Klicka på Granska + skapa för att skapa den privata slutpunkten.
Om du vill skapa en privat slutpunkt för ditt lagringskonto måste du först hämta en referens till ditt lagringskonto och det virtuella nätverksundernätet som du vill lägga till den privata slutpunkten till. Ersätt <storage-account-resource-group-name>, <storage-account-name>, <vnet-resource-group-name>, <vnet-name>och <vnet-subnet-name> nedan:
$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
}
Om du vill skapa en privat slutpunkt måste du skapa en privat länktjänstanslutning till lagringskontot. Tjänsten private link är en indata för 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 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
När du skapar en privat DNS-zon i Azure kan du använda det ursprungliga namnet på lagringskontot, till exempel storageaccount.file.core.windows.net för att matcha till den privata IP-adressen i det virtuella nätverket. Även om det är valfritt när du skapar en privat slutpunkt, krävs det uttryckligen för att montera Azure-filresursen direkt med hjälp av ett AD-användarhuvudnamn eller åtkomst via REST-API:et.
# 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
}
Nu när du har en referens till den privata DNS-zonen måste du skapa en A-post för ditt lagringskonto.
Om du vill skapa en privat slutpunkt för ditt lagringskonto måste du först hämta en referens till ditt lagringskonto och det virtuella nätverksundernätet som du vill lägga till den privata slutpunkten till. Ersätt <storage-account-resource-group-name>, <storage-account-name>, <vnet-resource-group-name>, <vnet-name>och <vnet-subnet-name> nedan:
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 '"')
Om du vill skapa en privat slutpunkt måste du först se till att undernätets privata slutpunktsnätverksprincip är inställd på inaktiverad. Sedan kan du skapa en privat slutpunkt med az network private-endpoint create kommandot .
När du skapar en privat DNS-zon i Azure kan du använda det ursprungliga namnet på lagringskontot, till exempel storageaccount.file.core.windows.net för att matcha till den privata IP-adressen i det virtuella nätverket. Även om det är valfritt när du skapar en privat slutpunkt krävs det uttryckligen för att montera Azure-filresursen med hjälp av ett AD-användarhuvudnamn eller åtkomst via REST-API:et.
# 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
Nu när du har en referens till den privata DNS-zonen måste du skapa en A-post för ditt lagringskonto.
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
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). Du måste ersätta <storage-account-name> med lämpligt lagringskontonamn:
Om det lyckas bör du se följande utdata, 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):
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:
Om det lyckas bör du se följande utdata, där 192.168.0.5 är den privata IP-adressen för den privata slutpunkten i det virtuella nätverket:
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
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:
Om allt lyckas bör du se följande utdata, 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 storageaccount.file.core.windows.net för att montera filresursen privatelink i stället för sökvägen.
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.
Inaktivera åtkomst till den offentliga slutpunkten
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.
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 alternativknappen 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öljande PowerShell-kommando nekar all trafik till lagringskontots offentliga slutpunkt. Observera att det här kommandot har parametern inställd på -BypassAzureServices. På så sätt kan betrodda tjänster från första part, till exempel Azure File Sync, komma åt lagringskontot via den offentliga slutpunkten.
# 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
Följande CLI-kommando nekar all trafik till lagringskontots offentliga slutpunkt. Observera att det här kommandot har parametern inställd på -bypassAzureServices. På så sätt kan betrodda tjänster från första part, till exempel Azure File Sync, 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
Begränsa åtkomsten till den offentliga slutpunkten till specifika virtuella nätverk
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.
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 alternativknappen 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 att begränsa åtkomsten till lagringskontots offentliga slutpunkt till specifika virtuella nätverk med hjälp av tjänstslutpunkter måste vi först samla in information om lagringskontot och det virtuella nätverket. Fyll i <storage-account-resource-group>, <storage-account-name>, <vnet-resource-group-name>, <vnet-name>och <subnet-name> för att samla in den här informationen.
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 Microsoft.Storage tjänstslutpunkten i undernätet om den inte redan finns där.
För att begränsa åtkomsten till lagringskontots offentliga slutpunkt till specifika virtuella nätverk med hjälp av tjänstslutpunkter måste vi först samla in information om lagringskontot och det virtuella nätverket. Fyll i <storage-account-resource-group>, <storage-account-name>, <vnet-resource-group-name>, <vnet-name>och <subnet-name> för att samla in den här informationen.
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 Microsoft.Storage tjänstslutpunkten 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 i lagringskontots nätverksregeluppsättning.