Usługa Azure Files udostępnia dwa główne typy punktów końcowych na potrzeby uzyskiwania dostępu do udziałów plików platformy Azure:
- Publiczne punkty końcowe, które mają publiczny adres IP i można uzyskiwać do nich dostęp z dowolnego miejsca na świecie.
- Prywatne punkty końcowe, które istnieją w sieci wirtualnej i mają prywatny adres IP z przestrzeni adresowej tej sieci wirtualnej.
W przypadku klasycznych udziałów plików (utworzonych przy użyciu dostawcy zasobów Microsoft.Storage) konto usługi Azure Storage ma publiczne i prywatne punkty końcowe. W przypadku udziałów plików utworzonych przy użyciu dostawcy zasobów Microsoft.FileShares publiczne i prywatne punkty końcowe należy tworzyć na poziomie udziału plików, a nie na poziomie konta magazynowego.
W tym artykule opisano sposób konfigurowania prywatnego punktu końcowego na potrzeby bezpośredniego uzyskiwania dostępu do udziału plików Azure. Także znaczna część tego artykułu odnosi się do sposobu, w jaki usługa Azure File Sync współpracuje z publicznymi i prywatnymi punktami końcowymi konta magazynu. Aby uzyskać więcej informacji na temat kwestii sieciowych w Azure File Sync, zobacz konfiguruj proxy i ustawienia zapory Azure File Sync.
Przed przeczytaniem tego przewodnika zapoznaj się z Azure Files zagadnieniami dotyczącymi sieci.
Wymagania wstępne
Możesz skonfigurować swoje urządzenia końcowe tak, aby ograniczały dostęp do sieci do konta pamięci i udostępnień plików. Aby ograniczyć dostęp do sieci wirtualnej, należy stosować jedno z następujących sposobów:
-
Utworzenie jednego lub więcej prywatnych punktów końcowych i ograniczenie wszelkiego dostępu do publicznego punktu końcowego (zalecane). Takie podejście zapewnia, że tylko ruch pochodzący z określonych sieci wirtualnych może mieć dostęp do udziałów plików platformy Azure. Zobacz Koszt usługi Private Link.
-
Ogranicz publiczny punkt końcowy do co najmniej jednej sieci wirtualnej. To podejście korzysta z możliwości sieci wirtualnej nazywanej punktami końcowymi usługi. Gdy ograniczasz ruch do konta pamięci przez punkt końcowy usługi, uzyskujesz dostęp do konta pamięci lub udostępniania plików przez publiczny adres IP, ale dostęp jest możliwy tylko z lokalizacji określonych w konfiguracji.
Tworzenie prywatnego punktu końcowego
Podczas tworzenia prywatnego punktu końcowego dla udziałów plików wdrażasz następujące zasoby platformy Azure:
-
Prywatny punkt końcowy: zasób Azure reprezentujący prywatny punkt końcowy. Ten zasób można traktować jako łącznik między zasobem docelowym a interfejsem sieciowym.
-
Interfejs sieciowy (NIC): interfejs sieciowy, który utrzymuje prywatny adres IP w określonej sieci wirtualnej i podsieci. Ten zasób jest taki sam jak zasób wdrażany podczas wdrażania maszyny wirtualnej. Jednak zamiast przypisywać go do maszyny wirtualnej, prywatny punkt końcowy jest jego właścicielem.
-
Prywatna strefa systemu nazw domen (DNS): jeśli wcześniej nie wdrożono prywatnego punktu końcowego dla tej sieci wirtualnej, zostanie wdrożona nowa prywatna strefa DNS dla sieci wirtualnej. Rekord DNS jest również tworzony w tej strefie DNS. Jeśli w tej sieci wirtualnej wdrożono już prywatny punkt końcowy, nowy rekord zostanie dodany do istniejącej strefy DNS. Wdrażanie strefy DNS jest opcjonalne. Jest to jednak zdecydowanie zalecane i wymagane w przypadku montowania udostępnień plików Azure z kontekstu usługi AD lub korzystania z interfejsu API FileREST.
Uwaga
W tym artykule użyto sufiksu DNS używanego dla publicznych regionów platformy Azure, core.windows.net. Ten komentarz dotyczy również chmur suwerennych Azure, takich jak chmura Azure US Government i Azure obsługiwane przez chmurę 21Vianet. Wystarczy zastąpić odpowiednie sufiksy dla danego środowiska.
Klasyczna i nowa obsługa udziałów plików
Proces tworzenia prywatnych punktów końcowych różni się nieco w zależności od tego, czy używasz klasycznych udostępnień plików, czy nowego modelu udostępniania plików. W przypadku klasycznych udostępnień plików tworzysz prywatny endpoint dla konta pamięci masowej, które zawiera te udostępnione pliki. W przypadku udziałów plików utworzonych za pomocą Microsoft.FileShares tworzy się prywatny punkt końcowy dla samego udziału plików.
Wiele kroków jest identycznych dla obu doświadczeń. Różnią się jedynie referencje do zasobu, identyfikator grupy oraz nazwa rekordu DNS, jak pokazano w poniższej tabeli.
|
Klasyczne udziały plików (Microsoft.Storage) |
Nowe udziały plików (Microsoft.FileShares) |
|
Element docelowy prywatnego punktu końcowego |
Konto magazynu |
Udział plików |
|
Cmdlet zasobu |
Get-AzStorageAccount |
Get-AzFileShare |
|
Identyfikator grupy (zasób podrzędny) |
file |
FileShare |
|
DNS nazwa rekordu |
Nazwa konta magazynu |
Prefiks nazwy hosta (na przykład fs-xxxxxxxxxxxxxxxxx) |
Przejdź do grupy zasobów, w której chcesz utworzyć prywatny punkt końcowy. Wybierz pozycję + Utwórz i wyszukaj Prywatny punkt końcowy. Wybierz zasób prywatnego punktu końcowego, a następnie wybierz pozycję Utwórz.
Kreator ma kilka stron do wypełnienia.
Na stronie Podstawowe wybierz subskrypcję, grupę zasobów, nazwę, nazwę interfejsu sieciowego i region dla prywatnego punktu końcowego. Prywatny punkt końcowy należy utworzyć w tym samym regionie co sieć wirtualna, w której chcesz utworzyć prywatny punkt końcowy. Następnie wybierz pozycję Dalej: Zasób.
Na stronie Zasób wybierz z menu rozwijanego dla Typ zasobu pozycję Microsoft.Storage/storageAccounts. W przypadku Resource'u wybierz konkretne konto pamięci, do którego chcesz się połączyć. W obszarze Docelowy zasób podrzędny wybierz file. Następnie wybierz pozycję Dalej: Sieć wirtualna.
Na stronie Zasoby wybierz Microsoft. FileShares/fileShares z rozwijanego menu dla typu zasobu. W przypadku Reresource wybierz konkretny plik, do którego chcesz się połączyć. Docelowy zasób podrzędny jest automatycznie wypełniany przy użyciu polecenia FileShare. Następnie wybierz pozycję Dalej: Sieć wirtualna.
Strona Virtual Network umożliwia wybranie konkretnej virtual network i podsieci, do której chcesz dodać prywatny punkt końcowy. Wybierz alokację dynamicznego lub statycznego adresu IP dla nowego prywatnego punktu końcowego. Jeśli wybierzesz statyczny, musisz również podać nazwę i prywatny adres IP. Opcjonalnie możesz również określić grupę zabezpieczeń aplikacji. Po zakończeniu wybierz pozycję Dalej: DNS.
Strona DNS zawiera informacje dotyczące integracji prywatnego punktu końcowego z prywatną strefą DNS. Upewnij się, że subskrypcja i grupa zasobów są poprawne, a następnie wybierz pozycję Dalej: Tagi.
Opcjonalnie można zastosować tagi do kategoryzowania zasobów, takich jak zastosowanie nazwy Środowisko i wartość Test do wszystkich zasobów testowych. W razie potrzeby wpisz pary nazwa/wartość, a następnie wybierz Dalej: Przejrzyj i utwórz.
Wybierz pozycję Utwórz , aby utworzyć prywatny punkt końcowy.
Aby utworzyć prywatny punkt końcowy, najpierw pobierz odwołanie do konta magazynu lub udziału plików oraz do podsieci sieci wirtualnej, do której chcesz dodać prywatny punkt końcowy. Zastąp wartości symboli zastępczych w poniższym kodzie własnymi wartościami.
Uzyskaj odniesienie do konta magazynowego:
$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
Uzyskaj odniesienie do udostępnionego pliku:
$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
Uzyskaj odwołania do sieci wirtualnej i podsieci:
$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
}
Aby utworzyć prywatny punkt końcowy, należy utworzyć połączenie usługi łącza prywatnego. Połączenie usługi łącza prywatnego jest kluczowym elementem w tworzeniu prywatnego punktu końcowego.
# 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
Jeśli utworzysz prywatną strefę DNS platformy Azure, oryginalna nazwa hosta będzie wskazywać na prywatny adres IP w obrębie sieci wirtualnej. Chociaż z punktu widzenia tworzenia prywatnego punktu końcowego jest to opcjonalne, jest to wyraźnie wymagane do bezpośredniego montowania udziału plików platformy Azure przy użyciu tożsamości użytkownika usługi Active Directory (AD) lub uzyskiwania dostępu za pośrednictwem interfejsu API REST.
# 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
}
Teraz, gdy masz odwołanie do prywatnej strefy DNS, musisz utworzyć rekord.
$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
Aby utworzyć prywatny punkt końcowy, najpierw uzyskaj odwołanie do konta magazynu danych lub udziału plikowego oraz do podsieci sieci wirtualnej, do której chcesz dodać prywatny punkt końcowy. Zastąp wartości symboli zastępczych w poniższych krokach własnymi wartościami.
Uzyskaj odniesienie do konta magazynowego:
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
Uzyskaj odniesienie do udostępnionego pliku:
# Install the fileshare extension
az extension add --name fileshare
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
Po ustawieniu wspólnych zmiennych pozostałe kroki są takie same dla obu środowisk. Uzyskaj odwołania do sieci wirtualnej i podsieci:
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)
Aby utworzyć prywatny punkt końcowy, upewnij się, że zasady sieci prywatnego punktu końcowego podsieci są wyłączone, a następnie utwórz prywatny punkt końcowy za pomocą polecenia 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)
Jeśli utworzysz prywatną strefę DNS platformy Azure, oryginalna nazwa hosta będzie wskazywać na prywatny adres IP w sieci wirtualnej. Choć z perspektywy tworzenia prywatnego punktu końcowego jest to opcjonalne, jest wymagane do zamontowania udziału plików platformy Azure przy użyciu tożsamości użytkownika usługi AD lub uzyskiwania dostępu za pośrednictwem interfejsu API FileREST.
# 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
Teraz, gdy masz odwołanie do prywatnej strefy DNS, utwórz rekord A.
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
Weryfikowanie łączności
Jeśli masz maszynę wirtualną w sieci wirtualnej lub skonfigurowano przekazywanie DNS zgodnie z opisem w temacie Konfigurowanie przekazywania DNS dla Azure Files, możesz sprawdzić, czy prywatny punkt końcowy jest poprawnie skonfigurowany. Uruchom następujące polecenia z poziomu programu PowerShell, wiersza polecenia lub terminalu (działa w systemach Windows, Linux lub macOS).
Zastąp <storage-account-name> odpowiednią nazwą konta magazynu:
nslookup <storage-account-name>.file.core.windows.net
W przypadku powodzenia zobaczysz dane wyjściowe podobne do poniższych, gdzie 192.168.0.5 jest prywatnym adresem IP prywatnego punktu końcowego w sieci wirtualnej (dane wyjściowe wyświetlane dla 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
Użyj nazwy hosta udostępnionej plików. Na karcie Przegląd udziału plików wybierz w prawym górnym rogu opcję Widok JSON. W widoku JSON w obszarze właściwości skopiuj wartość parametru hostName. Format wygląda następująco: fs-xxxxxxxxxxxxxxxxx.xx.file.storage.azure.net.
nslookup <file-share-host-name>
W przypadku powodzenia zobaczysz dane wyjściowe podobne do poniższych, gdzie 192.168.0.5 jest prywatnym adresem IP prywatnego punktu końcowego w sieci wirtualnej (dane wyjściowe wyświetlane dla Windows).
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
Jeśli masz maszynę wirtualną w sieci wirtualnej lub skonfigurowano przekazywanie DNS zgodnie z opisem w temacie Konfigurowanie przekazywania DNS dla Azure Files, możesz sprawdzić, czy prywatny punkt końcowy jest poprawnie skonfigurowany, uruchamiając następujące polecenia:
$storageAccountHostName = [System.Uri]::new($storageAccount.PrimaryEndpoints.file) | `
Select-Object -ExpandProperty Host
Resolve-DnsName -Name $storageAccountHostName
W przypadku powodzenia zobaczysz dane wyjściowe podobne do poniższych, gdzie 192.168.0.5 jest prywatnym adresem IP prywatnego punktu końcowego w sieci wirtualnej.
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
Resolve-DnsName -Name $fileShare.HostName
W przypadku powodzenia zobaczysz dane wyjściowe podobne do poniższych, gdzie 192.168.0.5 jest prywatnym adresem IP prywatnego punktu końcowego w sieci wirtualnej.
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
Jeśli masz maszynę wirtualną w sieci wirtualnej lub skonfigurowano przekazywanie DNS zgodnie z opisem w temacie Konfigurowanie przekazywania DNS dla Azure Files, możesz sprawdzić, czy prywatny punkt końcowy jest poprawnie skonfigurowany, uruchamiając następujące polecenia:
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
W przypadku powodzenia zobaczysz dane wyjściowe podobne do poniższych, gdzie 192.168.0.5 jest prywatnym adresem IP prywatnego punktu końcowego w sieci wirtualnej. Powinieneś nadal używać oryginalnej nazwy hosta (storageaccount.file.core.windows.net) do zamontowania swojego pliku zamiast ścieżki privatelink .
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
storageaccount.file.core.windows.net canonical name = storageaccount.privatelink.file.core.windows.net.
Name: storageaccount.privatelink.file.core.windows.net
Address: 192.168.0.5
hostName=$(az fileshare show \
--resource-group $fileShareResourceGroupName \
--name $fileShareName \
--query "properties.hostName" --output tsv)
nslookup $hostName
W przypadku powodzenia zobaczysz dane wyjściowe podobne do poniższych, gdzie 192.168.0.5 jest prywatnym adresem IP prywatnego punktu końcowego w sieci wirtualnej. Nadal należy używać oryginalnej wartości hostName udziału plików do zainstalowania udziału plików zamiast ścieżki privatelink.
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
Ograniczanie dostępu do publicznego punktu końcowego
Aby ograniczyć dostęp do publicznego punktu końcowego, najpierw wyłącz ogólny dostęp do publicznego punktu końcowego. Wyłączenie dostępu do publicznego punktu końcowego nie ma wpływu na prywatne punkty końcowe. Po wyłączeniu publicznego punktu końcowego wybierz określone sieci lub adresy IP, które mogą nadal uzyskiwać do niego dostęp. Ogólnie rzecz biorąc, większość zasad zapory dla konta magazynowego ogranicza dostęp sieciowy do jednej lub więcej sieci wirtualnych.
Możesz także użyć obwodu bezpieczeństwa sieciowego do centralnego zarządzania regułami dostępu przychodzącego i wychodzącego.
Wyłączanie dostępu do publicznego punktu końcowego
Gdy wyłączasz dostęp do sieci publicznej, ograniczasz dostęp przychodzący, jednocześnie pozwalając na dostęp wychodzący. Nadal możesz uzyskać dostęp do konta magazynowego przez jego prywatne punkty końcowe. W przeciwnym razie żądania do publicznego punktu końcowego konta pamięci są odrzucane, chyba że pochodzą ze specjalnie dozwolonego źródła.
Aby wyłączyć dostęp do sieci publicznej dla klasycznych udostępnień plików, postępuj zgodnie z następującymi krokami:
- Przejdź do konta pamięci, gdzie chcesz ograniczyć wszelki dostęp do publicznego punktu końcowego.
- W menu usług, w sekcji Bezpieczeństwo + sieciowanie, wybierz Sieciowanie.
- W obszarze Dostęp do sieci publicznej wybierz pozycję Zarządzaj.
- Wybierz Wyłącz, a następnie Wybierz Dalej.
- Wybierz opcję Zapisz.
Przejdź do udziału sieciowego, w którym chcesz wyłączyć dostęp publiczny. W menu usługi w obszarze Ustawienia wybierz pozycję Konfiguracja. Ustaw pozycję Dostęp do sieci publicznej na Wyłączone, a następnie wybierz pozycję Zapisz.
W przypadku klasycznych udziałów plików następujące polecenie programu PowerShell blokuje cały ruch do publicznego punktu końcowego konta magazynu. Ustaw parametr -Bypass na AzureServices, aby zezwolić zaufanym usługom własnym, takim jak Azure File Sync, na dostęp do konta magazynu za pośrednictwem publicznego punktu końcowego.
# 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
Ustaw -PublicNetworkAccess na Disabled w udziale plików.
# To learn more about the Az.FileShare module, see https://www.powershellgallery.com/packages/Az.FileShare/1.0.0
Install-Module -Name Az.FileShare -Repository PSGallery -RequiredVersion 1.0.0
$fileShareResourceGroupName = "<resource-group-name>"
$fileShareName = "<file-share-name>"
Update-AzFileShare `
-ResourceGroupName $fileShareResourceGroupName `
-ResourceName $fileShareName `
-PublicNetworkAccess Disabled
W przypadku klasycznych udziałów plików następujące polecenie CLI blokuje cały ruch do publicznego punktu końcowego konta magazynowego. Ustaw parametr --bypass na AzureServices, aby zezwolić zaufanym usługom własnym, takim jak Azure File Sync, na dostęp do konta magazynu za pośrednictwem publicznego punktu końcowego.
# 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
Ustaw --public-network-access na Disabled w udziale plików.
# Install the fileshare extension
az extension add --name fileshare
fileShareResourceGroupName="<resource-group-name>"
fileShareName="<file-share-name>"
az fileshare update \
--name $fileShareName \
--resource-group $fileShareResourceGroupName \
--public-network-access Disabled
Ogranicz dostęp do publicznego punktu końcowego do konkretnych sieci
Gdy ograniczasz dostęp do publicznego punktu końcowego do konkretnych sieci, pozwalasz na żądania do publicznego punktu końcowego z określonych sieci wirtualnych lub adresów IP. To ograniczenie działa poprzez wykorzystanie mechanizmu zwanego punktami końcowymi usług. Możesz używać punktów końcowych usługi z prywatnymi punktami końcowymi lub bez nich.
W przypadku klasycznych udostępnień plików postępuj zgodnie z tymi krokami, aby ograniczyć publiczny punkt końcowy do konkretnych sieci.
- Przejdź do konta pamięci, gdzie chcesz ograniczyć publiczny punkt końcowy do konkretnych sieci.
- W menu usług, w sekcji Bezpieczeństwo + sieciowanie, wybierz Sieciowanie.
- W obszarze Zakres dostępu do sieci publicznej wybierz pozycję Włącz z wybranych sieci. Ten wybór umożliwia wyświetlenie szeregu ustawień kontroli ograniczeń publicznego punktu końcowego.
- W sekcji Sieci wirtualne wybierz Dodaj sieć> wirtualnąDodaj istniejącą sieć wirtualną, aby wybrać sieć wirtualną, która powinna mieć dostęp do konta pamięci przez publiczny punkt końcowy. Wybierz sieć wirtualną i podsieć dla tej sieci wirtualnej, a następnie wybierz pozycję Włącz. Jeśli chcesz utworzyć nową sieć wirtualną w tym celu, wybierz Dodaj sieć> wirtualną,Dodaj nową sieć wirtualną, podaj szczegóły, a następnie wybierz Utwórz.
- W sekcji Adresy IPv4 określ dowolne publiczne adresy IP internetu, do których chcesz mieć dostęp do konta pamięci.
- Zaznacz pole wyboru Zezwalaj zaufanym usługom firmy Microsoft na dostęp do tego zasobu, aby umożliwić zaufanym usługom własnym firmy Microsoft, takim jak Azure File Sync, dostęp do konta magazynu.
- Wybierz opcję Zapisz.
Przejdź do udziału plików, w którym chcesz ograniczyć dostęp publiczny. Z menu usługi w obszarze Ustawienia wybierz pozycję Konfiguracja. W obszarze Dostęp do sieci publicznej wybierz pozycję Włączone dla wybranych sieci wirtualnych, dodaj sieci wirtualne i podsieci, którym zezwolono na dostęp do udziału, a następnie wybierz pozycję Zapisz.
W przypadku klasycznych udziałów plików ogranicz dostęp do publicznego punktu końcowego konta magazynu danych do określonych sieci wirtualnych przy użyciu punktów końcowych usługi. Najpierw zbierz informacje o koncie magazynu danych i sieci wirtualnej. Zastąp wartości symboli zastępczych w poniższych krokach własnymi wartościami.
$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
}
Aby zezwolić na ruch z sieci wirtualnej, infrastruktura sieciowa platformy Azure musi udostępnić punkt końcowy usługi Microsoft.Storage w podsieci tej sieci wirtualnej. Następujące polecenia programu PowerShell dodają punkt końcowy usługi Microsoft.Storage do podsieci, jeśli jeszcze nie istnieje.
$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
}
Ostatnim krokiem ograniczania ruchu do konta magazynu jest utworzenie reguły sieciowej i dodanie jej do zestawu reguł sieciowych konta magazynu.
$networkRule = $storageAccount | Add-AzStorageAccountNetworkRule `
-VirtualNetworkResourceId $subnet.Id `
-ErrorAction Stop
$storageAccount | Update-AzStorageAccountNetworkRuleSet `
-DefaultAction Deny `
-Bypass AzureServices `
-VirtualNetworkRule $networkRule `
-WarningAction SilentlyContinue `
-ErrorAction Stop | `
Out-Null
Przekaż identyfikatory zasobów dozwolonych podsieci bezpośrednio do Update-AzFileShare, przy użyciu -AllowedSubnet. Nie ma potrzeby konfigurowania oddzielnego punktu końcowego usługi ani reguł sieciowych na koncie magazynu danych.
# To learn more about the Az.FileShare module, see https://www.powershellgallery.com/packages/Az.FileShare/1.0.0
Install-Module -Name Az.FileShare -Repository PSGallery -RequiredVersion 1.0.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 `
-AllowedSubnet @($subnet.Id)
W przypadku klasycznych udziałów plików ogranicz dostęp do publicznego punktu końcowego konta magazynu danych do określonych sieci wirtualnych przy użyciu punktów końcowych usługi. Najpierw zbierz informacje o koncie magazynu danych i sieci wirtualnej. Zastąp wartości symboli zastępczych w poniższych krokach własnymi wartościami.
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)
Aby zezwolić na ruch z sieci wirtualnej, infrastruktura sieciowa platformy Azure musi udostępnić punkt końcowy usługi Microsoft.Storage w podsieci tej sieci wirtualnej. Poniższe polecenia CLI dodają punkt końcowy usługi Microsoft.Storage do podsieci, jeśli jeszcze go tam nie ma.
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
Ostatnim krokiem ograniczania ruchu do konta magazynu jest utworzenie reguły sieciowej i dodanie jej do zestawu reguł sieciowych konta magazynu.
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
Przekaż identyfikatory zasobów dozwolonych podsieci bezpośrednio do az fileshare update, używając --allowed-subnets. Nie ma potrzeby konfigurowania oddzielnego punktu końcowego usługi ani reguł sieciowych na koncie magazynu danych.
# Install the fileshare extension
az extension add --name fileshare
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
Zobacz też