Azure File Sync använder två Azure-resurser, var och en med sina egna nätverksändpunkter: lagringskontot (som håller Azure-fildelningen) och Storage Sync Service (som koordinerar synkronisering, serverregistrering och synkroniseringsgrupper). Båda resurserna använder publika endpoints som standard.
Azure File Sync-agenten kommunicerar med båda resurserna via HTTPS (port 443). För servrar som ansluter till Azure över internet utan VPN eller ExpressRoute kan du använda den publika endpointen utan att någon konfiguration behövs. De flesta Azure File Sync-kunder vill dock konfigurera privata endpoints.
Använd följande tabell för att avgöra om du behöver privata endpoints. Om du behöver dem, skapa privata endpoints för båda resurserna.
| Jag måste... |
Användning |
| Synkronisera servrar som ansluter till Azure över internet utan VPN eller ExpressRoute |
Publika endpoints (ingen konfiguration behövs) |
| Dirigera all synkroniserad trafik via ExpressRoute eller site-to-site VPN-anslutning |
Privata slutpunkter för båda resurserna |
| Uppfylla efterlevnadskrav som förbjuder data över det offentliga internet |
Privata slutpunkter för båda resurserna |
| Inaktivera den publika endpointen som en säkerhetsförstärkande åtgärd |
Privata slutpunkter för båda resurserna först och begränsa sedan åtkomsten |
| Implementera zero-trust-nätverksåtkomst |
Privata slutpunkter för båda resurserna |
För bredare nätverkskoncept, se Azure File Sync nätverksöverväganden. För att konfigurera endpoints för att komma åt Azure-fildelningar direkt (utan Azure File Sync), se Configure Azure Files network endpoints.
Förutsättningar
Den här artikeln förutsätter att:
Dessutom:
Skapa de privata slutpunkterna
När du skapar en privat slutpunkt för en Azure-resurs distribueras följande resurser:
| Utplacerad resurs |
Description |
Vad du gör |
|
Privat slutpunkt |
En Azure-resurs som kopplar ditt lagringskonto eller Storage Sync Service till ett nätverksgränssnitt i ditt virtuella nätverk |
Skapa en för varje resurs i Skapa lagringskontots privata slutpunkt och Skapa en privat slutpunkt för Storage Sync Service |
|
Nätverksgränssnitt (NIC) |
Håller den privata IP-adressen för den privata ändpunkten inom ditt subnät |
Skapad automatiskt med den privata slutpunkten; Ingen extra åtgärd krävs |
|
Privat DNS-zon |
Mappar resursens offentliga värdnamn till IP-adressen för den privata slutpunkten, så att klienter matchas mot den privata slutpunkten utan att anslutningssträngar behöver ändras |
Skapas automatiskt om ingen sådan finns; rekommenderas för att undvika manuell DNS-konfiguration |
Kommentar
Den här artikeln använder DNS-suffixen för Azure Public-regionerna: core.windows.net för lagringskonton och afs.azure.net för Storage Sync Services. Denna nomenklatur gäller även för Azure Sovereign-moln såsom Azure US Government-molnet. Ersätt bara lämpliga suffix för din miljö.
Skapa den privata slutpunkten för lagringskontot
Gå till lagringskontot som du vill skapa en privat slutpunkt för. På tjänstmenyn under Säkerhet + nätverk 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 gå igenom.
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.
Välj Skapa för att skapa den privata slutpunkten.
Om du har en VM i ditt virtuella nätverk, eller om du har konfigurerat DNS-vidarebefordran enligt beskrivningen i Konfigurera DNS-vidarebefordran för Azure Files, kan du testa att din privata slutpunkt är korrekt inställd genom att köra följande kommandon från PowerShell, kommandoraden eller terminalen (fungerar för Windows, Linux eller macOS). Byt ut <storage-account-name> med ditt lagringskontonamn:
nslookup <storage-account-name>.file.core.windows.net
Om allt fungerar 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):
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
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. Privatlänkstjänsten är en del av 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-fildelningen direkt med en AD-användarhuvudidentifierare eller få å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-record för ditt lagringskonto.
$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
Om du har en VM i ditt virtuella nätverk, eller om du har konfigurerat DNS-vidarebefordran enligt beskrivningen i Configure DNS forwarding for Azure Files, kan du testa att din privata endpoint är korrekt inställd genom att använda följande kommandon:
$storageAccountHostName = [System.Uri]::new($storageAccount.PrimaryEndpoints.file) | `
Select-Object -ExpandProperty Host
Resolve-DnsName -Name $storageAccountHostName
Om allt fungerar 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 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 .
# 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 '"')
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-record 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 VM i ditt virtuella nätverk, eller om du har konfigurerat DNS-vidarebefordran enligt beskrivningen i Configure DNS forwarding for Azure Files, kan du testa att din privata endpoint är korrekt inställd genom att använda följande kommandon:
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
Om allt fungerar 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:
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
Skapa den privata slutpunkten för Storage Sync Service
Gå till Private Link Center genom att skriva Private Link i sökfältet högst upp i Azure-portalen. I innehållsförteckningen för Private Link Center, välj Private endpoints och välj sedan + Add för att skapa en ny privat endpoint.
Den resulterande guiden har flera sidor att gå igenom.
I fliken Grunder , välj resursgruppen, namnet och regionen för din privata endpoint. Dessa värden kan vara vilka giltiga värden som helst. De behöver inte matcha Storage Sync Service på något sätt, men du måste skapa den privata slutpunkten i samma region som det virtuella nätverk du väljer.
På fliken Resurs väljer du Anslut till en Azure-resurs i min katalog. Under Resurstypen, välj Microsoft. StorageSync/storageSyncServices.
Konfigurationsfliken låter dig välja det specifika virtuella nätverket och subnätet du vill lägga till din privata endpoint i. Välj samma virtuella nätverk som det du använde för lagringskontot.
Konfigurationsfliken innehåller också information för att skapa och uppdatera den privata DNS-zonen.
Välj Granska + skapa för att skapa den privata slutpunkten.
Du kan testa att din privata slutpunkt har konfigurerats korrekt genom att köra följande PowerShell-kommandon.
$privateEndpointResourceGroupName = "<your-private-endpoint-resource-group>"
$privateEndpointName = "<your-private-endpoint-name>"
Get-AzPrivateEndpoint `
-ResourceGroupName $privateEndpointResourceGroupName `
-Name $privateEndpointName `
-ErrorAction Stop | `
Select-Object -ExpandProperty NetworkInterfaces | `
Select-Object -ExpandProperty Id | `
ForEach-Object { Get-AzNetworkInterface -ResourceId $_ } | `
Select-Object -ExpandProperty IpConfigurations | `
Select-Object -ExpandProperty PrivateLinkConnectionProperties | `
Select-Object -ExpandProperty Fqdns | `
ForEach-Object { Resolve-DnsName -Name $_ } | `
Format-List
Om allt fungerar korrekt bör du se följande utdata där 192.168.1.4, 192.168.1.5, 192.168.1.6och 192.168.1.7 är de privata IP-adresserna som tilldelats till den privata slutpunkten:
Name : mysssmanagement.westus2.afs.azure.net
Type : CNAME
TTL : 60
Section : Answer
NameHost : mysssmanagement.westus2.privatelink.afs.azure.net
Name : mysssmanagement.westus2.privatelink.afs.azure.net
QueryType : A
TTL : 60
Section : Answer
IP4Address : 192.168.1.4
Name : myssssyncp.westus2.afs.azure.net
Type : CNAME
TTL : 60
Section : Answer
NameHost : myssssyncp.westus2.privatelink.afs.azure.net
Name : myssssyncp.westus2.privatelink.afs.azure.net
QueryType : A
TTL : 60
Section : Answer
IP4Address : 192.168.1.5
Name : myssssyncs.westus2.afs.azure.net
Type : CNAME
TTL : 60
Section : Answer
NameHost : myssssyncs.westus2.privatelink.afs.azure.net
Name : myssssyncs.westus2.privatelink.afs.azure.net
QueryType : A
TTL : 60
Section : Answer
IP4Address : 192.168.1.6
Name : mysssmonitoring.westus2.afs.azure.net
Type : CNAME
TTL : 60
Section : Answer
NameHost : mysssmonitoring.westus2.privatelink.afs.azure.net
Name : mysssmonitoring.westus2.privatelink.afs.azure.net
QueryType : A
TTL : 60
Section : Answer
IP4Address : 192.168.1.7
För att skapa en privat endpoint för din Storage Sync Service, skaffa först en referens till din Storage Sync Service. Ersätt <storage-sync-service-resource-group> och <storage-sync-service> med korrekta värden för din miljö. Följande PowerShell-kommandon förutsätter att du redan fyllt i informationen om det virtuella nätverket.
$storageSyncServiceResourceGroupName = "<storage-sync-service-resource-group>"
$storageSyncServiceName = "<storage-sync-service>"
$storageSyncService = Get-AzStorageSyncService `
-ResourceGroupName $storageSyncServiceResourceGroupName `
-Name $storageSyncServiceName `
-ErrorAction SilentlyContinue
if ($null -eq $storageSyncService) {
$errorMessage = "Storage Sync Service $storageSyncServiceName not found "
$errorMessage += "in resource group $storageSyncServiceResourceGroupName."
Write-Error -Message $errorMessage -ErrorAction Stop
}
Om du vill skapa en privat slutpunkt måste du skapa en privat länktjänstanslutning till Tjänsten för synkronisering av lagring. Den privata länkanslutningen utgör en del av 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 "$storageSyncServiceName-Connection" `
-PrivateLinkServiceId $storageSyncService.ResourceId `
-GroupId "Afs" `
-ErrorAction Stop
# Create a new private endpoint
$privateEndpoint = New-AzPrivateEndpoint `
-ResourceGroupName $storageSyncServiceResourceGroupName `
-Name "$storageSyncServiceName-PrivateEndpoint" `
-Location $virtualNetwork.Location `
-Subnet $subnet `
-PrivateLinkServiceConnection $privateEndpointConnection `
-ErrorAction Stop
Genom att skapa en privat DNS-zon i Azure kan värdnamnen för Tjänsten för synkronisering av lagring, till exempel mysssmanagement.westus2.afs.azure.net, matcha rätt privata IP-adresser för Tjänsten för synkronisering av lagring i det virtuella nätverket. Även om det är valfritt när du skapar en privat slutpunkt krävs det uttryckligen att Azure File Sync-agenten får åtkomst till Tjänsten för synkronisering av lagring.
# Get the desired Storage Sync Service suffix (afs.azure.net for public cloud)
# This is done like this so this script will seamlessly work for non-public Azure
$azureEnvironment = Get-AzContext | `
Select-Object -ExpandProperty Environment | `
Select-Object -ExpandProperty Name
switch($azureEnvironment) {
"AzureCloud" {
$storageSyncSuffix = "afs.azure.net"
}
"AzureUSGovernment" {
$storageSyncSuffix = "afs.azure.us"
}
"AzureChinaCloud" {
$storageSyncSuffix = "afs.azure.cn"
}
default {
Write-Error
-Message "The Azure environment $_ is not currently supported by Azure File Sync." `
-ErrorAction Stop
}
}
# For public cloud, this will generate the following DNS suffix:
# privatelink.afs.azure.net
$dnsZoneName = "privatelink.$storageSyncSuffix"
# 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 a 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 ett A-record för Storage Sync-tjänsten.
$privateEndpointIpFqdnMappings = $privateEndpoint | `
Select-Object -ExpandProperty NetworkInterfaces | `
Select-Object -ExpandProperty Id | `
ForEach-Object { Get-AzNetworkInterface -ResourceId $_ } | `
Select-Object -ExpandProperty IpConfigurations | `
ForEach-Object {
$privateIpAddress = $_.PrivateIpAddress;
$_ | `
Select-Object -ExpandProperty PrivateLinkConnectionProperties | `
Select-Object -ExpandProperty Fqdns | `
Select-Object `
@{
Name = "PrivateIpAddress";
Expression = { $privateIpAddress }
}, `
@{
Name = "FQDN";
Expression = { $_ }
}
}
foreach($ipFqdn in $privateEndpointIpFqdnMappings) {
$privateDnsRecordConfig = New-AzPrivateDnsRecordConfig `
-IPv4Address $ipFqdn.PrivateIpAddress
$dnsEntry = $ipFqdn.FQDN.Substring(0,
$ipFqdn.FQDN.IndexOf(".", $ipFqdn.FQDN.IndexOf(".") + 1))
New-AzPrivateDnsRecordSet `
-ResourceGroupName $virtualNetworkResourceGroupName `
-Name $dnsEntry `
-RecordType A `
-ZoneName $dnsZoneName `
-Ttl 600 `
-PrivateDnsRecords $privateDnsRecordConfig `
-ErrorAction Stop | `
Out-Null
}
För att skapa en privat endpoint för din Storage Sync Service, skaffa först en referens till din Storage Sync Service. Ersätt <storage-sync-service-resource-group> och <storage-sync-service> med korrekta värden för din miljö. Följande CLI-kommandon förutsätter att du redan fyllt i den virtuella nätverksinformationen.
storageSyncServiceResourceGroupName="<storage-sync-service-resource-group>"
storageSyncServiceName="<storage-sync-service>"
storageSyncService=$(az resource show \
--resource-group $storageSyncServiceResourceGroupName \
--name $storageSyncServiceName \
--resource-type "Microsoft.StorageSync/storageSyncServices" \
--query "id" | \
tr -d '"')
storageSyncServiceRegion=$(az resource show \
--resource-group $storageSyncServiceResourceGroupName \
--name $storageSyncServiceName \
--resource-type "Microsoft.StorageSync/storageSyncServices" \
--query "location" | \
tr -d '"')
För att skapa en privat endpoint, se först till att subnetets privata endpoint-nätverkspolicy är inställd på inaktiverad. Skapa sedan en privat endpoint genom att använda kommandot 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 $storageSyncServiceResourceGroupName \
--name "$storageSyncServiceName-PrivateEndpoint" \
--location $region \
--subnet $subnet \
--private-connection-resource-id $storageSyncService \
--group-id "Afs" \
--connection-name "$storageSyncServiceName-Connection" \
--query "id" | \
tr -d '"')
Genom att skapa en privat DNS-zon i Azure kan värdnamnen för Tjänsten för synkronisering av lagring, till exempel mysssmanagement.westus2.afs.azure.net, matcha rätt privata IP-adresser för Tjänsten för synkronisering av lagring i det virtuella nätverket. Även om det är valfritt när du skapar en privat slutpunkt krävs det uttryckligen att Azure File Sync-agenten får åtkomst till Tjänsten för synkronisering av lagring.
# Get the desired storage account suffix (afs.azure.net for public cloud)
# This is done like this so this script will seamlessly work for non-public Azure
azureEnvironment=$(az cloud show \
--query "name" |
tr -d '"')
storageSyncSuffix=""
if [ $azureEnvironment == "AzureCloud" ]
then
storageSyncSuffix="afs.azure.net"
elif [ $azureEnvironment == "AzureUSGovernment" ]
then
storageSyncSuffix="afs.azure.us"
else
echo "Unsupported Azure environment $azureEnvironment."
fi
# For public cloud, this will generate the following DNS suffix:
# privatelink.afs.azure.net
dnsZoneName="privatelink.$storageSyncSuffix"
# 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 ett A-record för Storage Sync-tjänsten.
privateEndpointNIC=$(az network private-endpoint show \
--ids $privateEndpoint \
--query "networkInterfaces[0].id" | \
tr -d '"')
privateIpAddresses=$(az network nic show \
--ids $privateEndpointNIC \
--query "ipConfigurations[].privateIpAddress" \
--output tsv)
hostNames=$(az network nic show \
--ids $privateEndpointNIC \
--query "ipConfigurations[].privateLinkConnectionProperties.fqdns[]" \
--output tsv)
i=0
for privateIpAddress in $privateIpAddresses
do
j=0
targetHostName=""
for hostName in $hostNames
do
if [ $i == $j ]
then
targetHostName=$hostName
break
fi
j=$(expr $j + 1)
done
endpointName=$(echo $targetHostName | \
cut -c1-$(expr $(expr index $targetHostName ".") - 1))
az network private-dns record-set a create \
--resource-group $dnsZoneResourceGroup \
--zone-name $dnsZoneName \
--name "$endpointName.$storageSyncServiceRegion" \
--output none
az network private-dns record-set a add-record \
--resource-group $dnsZoneResourceGroup \
--zone-name $dnsZoneName \
--record-set-name "$endpointName.$storageSyncServiceRegion" \
--ipv4-address $privateIpAddress \
--output none
i=$(expr $i + 1)
done
Begränsa åtkomsten till de offentliga slutpunkterna
Du kan begränsa åtkomsten till de offentliga slutpunkterna för både lagringskontot och Storage Sync Services. Att begränsa åtkomsten till den offentliga slutpunkten ger ytterligare säkerhet genom att se till att nätverkspaket endast accepteras från godkända platser.
Begränsa åtkomsten till lagringskontots offentliga slutpunkt
Du kan begränsa åtkomsten till den publika slutpunkten genom att använda lagringskontots brandväggsinställningar. I allmänhet begränsar de flesta brandväggsprinciper för ett lagringskonto nätverksåtkomst till ett eller flera virtuella nätverk. Om du vill begränsa åtkomsten till ett lagringskonto till ett virtuellt nätverk använder du någon av följande metoder:
-
Skapa en eller flera privata slutpunkter för lagringskontot och inaktivera åtkomst till den offentliga slutpunkten. Detta säkerställer att endast trafik som kommer från de önskade virtuella nätverken kan komma åt Azure-filresurserna i lagringskontot.
- Begränsa den offentliga slutpunkten till ett eller flera virtuella nätverk. Denna metod fungerar genom att använda en funktion i det virtuella nätverket kallad service endpoints. När du begränsar trafiken till ett lagringskonto via en service-endpoint, får du fortfarande tillgång till lagringskontot via den publika IP-adressen.
Viktigt!
Azure File Sync har en känd begränsning med nätverkssäkerhetsperimeter (NSP).
Lagringssynkroniseringstjänster kan inte placeras inom en perimeter och fullständig perimeterintegrering stöds inte.
Så här ansluter du en synkroniseringstjänst för lagring till ett lagringskonto som skyddas av en NSP:
- Konfigurera synkroniseringstjänsten för lagring så att den använder hanterade identiteter.
- Skapa en NSP-regel för inkommande trafikprofil som godkänner prenumeration som hostar Storage Sync Service.
Storage Sync Services måste vara utanför perimetern för att synkroniseringen ska fungera korrekt.
Bevilja åtkomst till betrodda Azure-tjänster och inaktivera åtkomst till lagringskontots offentliga slutpunkt
När du inaktiverar åtkomst till den publika slutpunkten kan du fortfarande komma åt lagringskontot via dess privata slutpunkt, men förfrågningar till lagringskontots publika slutpunkt avvisas.
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.
I toppen av 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
Bevilja åtkomst till betrodda Azure-tjänster och begränsa åtkomsten till lagringskontots offentliga slutpunkt 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.
I toppen av 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.
$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 Microsoft.Storage tjänstslutpunkten 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 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 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.
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 '"')
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.
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
Inaktivera åtkomst till den offentliga slutpunkten för Storage Sync Service
Med Azure File Sync kan du begränsa åtkomsten till specifika virtuella nätverk endast via privata slutpunkter. Azure File Sync stöder inte tjänstslutpunkter för att begränsa åtkomsten till den offentliga slutpunkten till specifika virtuella nätverk. Det innebär att de två tillstånden för lagringssynkroniseringstjänstens offentliga slutpunkt är aktiverade och inaktiverade.
Viktigt!
Du måste skapa en privat slutpunkt innan du inaktiverar åtkomst till den offentliga slutpunkten. Om den offentliga slutpunkten är inaktiverad och ingen privat slutpunkt har konfigurerats kan synkroniseringen inte fungera.
Om du vill inaktivera åtkomsten till den offentliga slutpunkten för Storage Sync-tjänsten följer du dessa steg:
- Logga in på Azure-portalen.
- Gå till Storage Sync Service och välj Settings>Network från vänster navigering.
- Under Tillåt åtkomst från väljer du Endast privata slutpunkter.
- Välj en privat slutpunkt i listan Privata slutpunktsanslutningar .
För att inaktivera åtkomst till den offentliga slutpunkten för Storage Sync Service anger du egenskapen incomingTrafficPolicy på Storage Sync Service till AllowVirtualNetworksOnly. För att aktivera åtkomst till Storage Sync Services offentliga slutpunkt anger du incomingTrafficPolicy till AllowAllTraffic. Ersätt <storage-sync-service-resource-group> och <storage-sync-service> med dina egna värden.
$storageSyncServiceResourceGroupName = "<storage-sync-service-resource-group>"
$storageSyncServiceName = "<storage-sync-service>"
Set-AzStorageSyncService `
-ResourceGroupName $storageSyncServiceResourceGroupName `
-Name $storageSyncServiceName `
-IncomingTrafficPolicy AllowVirtualNetworksOnly
Azure CLI stöder inte inställningen av incomingTrafficPolicy egenskapen på Lagerringssynkroniseringstjänsten. Välj fliken Azure PowerShell för instruktioner om hur man inaktiverar Storage Sync Service publika endpoint.
Azure Policy for Azure Files och Azure File Sync
Azure Policy hjälper till att framtvinga organisationsstandarder och utvärdera efterlevnaden mot dessa standarder i stor skala. Azure Files och Azure File Sync exponerar flera användbara principer för granskning och reparationsnätverk som hjälper dig att övervaka och automatisera distributionen.
Policyer granskar din miljö och varnar dig om dina lagringskonton eller Storage Sync Services avviker från det definierade beteendet. Till exempel varnar policyn dig om en publik endpoint är aktiverad när din policy var inställd på att inaktivera de publika endpoints. Modifiera och distribuera policyer kan proaktivt modifiera en resurs (såsom Storage Sync Service) eller distribuera resurser (såsom privata endpoints) för att anpassa dem till policyerna.
Följande fördefinierade principer är tillgängliga för Azure Files och Azure File Sync:
Konfigurera en implementeringspolicy för privat slutpunkt
För att sätta upp en policy för privat endpoint-distribution, följ dessa steg:
- Logga in på Azure-portalen och sök efter Policy. Välj policy från resultaten.
- Gå till Authoring>Definitions i Policy Centers innehållsförteckning.
- I panelen Definitioner, välj kategorin Lagring i kategorifiltret, eller sök efter Configure Azure File Sync with private endpoints.
- Välj ... bredvid policyn och välj sedan Tilldela.
- På sidan Grunder kan du valfritt ange en omfattning, undantagslista och ett vänligt namn för policyn. Klicka på Nästa.
- På sidan Parametrar , välj ... bredvid fältet privateEndpointSubnetId . Välj det virtuella nätverket och subnätet där de privata endpoints för dina Storage Sync Service-resurser ska distribueras. Guiden kan ta flera sekunder på sig att läsa in de tillgängliga virtuella nätverken. Klicka på Nästa.
- På sidan Remediation väljer du Create a remediation task så att den privata endpointen distribueras när en Storage Sync Service utan privat endpoint identifieras.
- Välj Granska + skapa för att granska policytilldelningen, och välj sedan Skapa.
Den resulterande principtilldelningen kommer att genomföras regelbundet och kanske inte startar omedelbart efter att den har skapats.
Se även