Ten artykuł wyjaśnia, jak tworzyć prywatne punkty końcowe i ograniczać dostęp do publicznych punktów końcowych dla udziałów plików platformy Azure. Dla klasycznych udziałów plików (Microsoft.Storage) konfigurujesz konto magazynu. W przypadku udziałów plików utworzonych za pomocą Microsoft.FileShares konfigurujesz każdy udział plików. Klasyczne kroki dotyczące udostępniania plików dotyczą także kont pamięci masowej, których używa Azure File Sync. Aby uzyskać wymagania sieciowe usługi Azure File Sync, zobacz Konfigurowanie ustawień serwera proxy i zapory usługi Azure File Sync.
Aby wybrać między prywatnymi punktami końcowymi a regułami sieciowymi, zobacz Zagadnienia dotyczące sieci w usłudze Azure Files.
Wymagania wstępne
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.
-
Strefa prywatnego systemu nazw domen (DNS): Te kroki tworzą lub ponownie używają prywatnej strefy DNS Azure połączonej z siecią wirtualną i dodają rekord A dla prywatnego punktu końcowego. Możesz użyć własnej infrastruktury DNS, pod warunkiem, że klienci będą rozpoznawać nazwę hosta udziału plików na adres IP prywatnego punktu końcowego.
Uwaga
W chmurze publicznej Azure obaj dostawcy zasobów korzystają z prywatnej strefy privatelink.file.core.windows.netDNS. Nazwy hostów klientów różnią się; zobacz Sprawdź łączność, aby zobaczyć przykłady. Dla klasycznych udziałów plików w innych chmurach Azure użyj sufiksu punktu końcowego magazynu dla tej chmury.
Proces tworzenia prywatnych punktów dostępu różni się nieco w zależności od tego, czy używasz klasycznych udziałów plików, czy Microsoft.FileShares. 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 dostawców zasobów. 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) |
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 Podstawy wybierz subskrypcję, grupę zasobów, nazwę, nazwę interfejsu sieciowego oraz region dla swojego prywatnego punktu końcowego. Prywatny punkt końcowy musi znajdować się w tym samym regionie co jego sieć wirtualna. 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. Wpisz dowolne pary nazwa/wartość, a następnie wybierz Następne: Przeglądaj + 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>"
$storageAccountParams = @{
ResourceGroupName = $storageAccountResourceGroupName
Name = $storageAccountName
ErrorAction = "SilentlyContinue"
}
$storageAccount = Get-AzStorageAccount @storageAccountParams
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>"
$fileShareParams = @{
ResourceGroupName = $fileShareResourceGroupName
ResourceName = $fileShareName
ErrorAction = "SilentlyContinue"
}
$fileShare = Get-AzFileShare @fileShareParams
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
$virtualNetworkParams = @{
ResourceGroupName = $virtualNetworkResourceGroupName
Name = $virtualNetworkName
ErrorAction = "SilentlyContinue"
}
$virtualNetwork = Get-AzVirtualNetwork @virtualNetworkParams
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) {
$errorMessage = "Subnet $subnetName not found in virtual network $virtualNetworkName."
Write-Error -Message $errorMessage -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.
$connectionParams = @{
Name = "$dnsRecordName-Connection"
PrivateLinkServiceId = $privateLinkResourceId
GroupId = $groupId
ErrorAction = "Stop"
}
$privateEndpointConnection = New-AzPrivateLinkServiceConnection @connectionParams
# Create a new private endpoint.
$privateEndpointParams = @{
ResourceGroupName = $resourceGroupName
Name = "$dnsRecordName-PrivateEndpoint"
Location = $virtualNetwork.Location
Subnet = $subnet
PrivateLinkServiceConnection = $privateEndpointConnection
ErrorAction = "Stop"
}
$privateEndpoint = New-AzPrivateEndpoint @privateEndpointParams
Powiąż prywatną strefę DNS Azure z siecią wirtualną, aby klienci rozpoznawali oryginalną nazwę hosta udziału plików jako adres IP prywatnego punktu końcowego. Następujące polecenia wykorzystują strefę już połączoną z siecią wirtualną. Jeśli żadna nie jest powiązana, używają strefy w grupie zasobów sieci wirtualnej lub tworzą taką i łączą ją. Te kroki dotyczą obu dostawców zasobów.
# Get the host name suffix (core.windows.net for public cloud).
# Reading it from the context lets this script work in non-public Azure clouds.
$hostNameSuffix = Get-AzContext |
Select-Object -ExpandProperty Environment |
Select-Object -ExpandProperty StorageEndpointSuffix
# For public cloud, this generates 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 {
$dnsLinkParams = @{
ResourceGroupName = $_.ResourceGroupName
ZoneName = $_.Name
ErrorAction = "SilentlyContinue"
}
$privateDnsLink = Get-AzPrivateDnsVirtualNetworkLink @dnsLinkParams
$privateDnsLink.VirtualNetworkId -eq $virtualNetwork.Id
}
if ($null -eq $dnsZone) {
# No matching DNS zone attached to virtual network, so use the zone in the
# virtual network's resource group, or create one, and link it.
$dnsZoneParams = @{
ResourceGroupName = $virtualNetworkResourceGroupName
Name = $dnsZoneName
ErrorAction = "SilentlyContinue"
}
$dnsZone = Get-AzPrivateDnsZone @dnsZoneParams
if ($null -eq $dnsZone) {
$dnsZoneParams.ErrorAction = "Stop"
$dnsZone = New-AzPrivateDnsZone @dnsZoneParams
}
$dnsLinkParams = @{
ResourceGroupName = $virtualNetworkResourceGroupName
ZoneName = $dnsZoneName
Name = "$virtualNetworkName-DnsLink"
VirtualNetworkId = $virtualNetwork.Id
ErrorAction = "Stop"
}
$privateDnsLink = New-AzPrivateDnsVirtualNetworkLink @dnsLinkParams
}
Teraz, gdy masz odwołanie do prywatnej strefy DNS, utwórz rekord A.
$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
$dnsRecordParams = @{
ResourceGroupName = $dnsZone.ResourceGroupName
Name = $dnsRecordName
RecordType = "A"
ZoneName = $dnsZone.Name
Ttl = 600
PrivateDnsRecords = $privateDnsRecordConfig
ErrorAction = "Stop"
}
New-AzPrivateDnsRecordSet @dnsRecordParams | 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:
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 dostawców zasobów. 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 sieciowe prywatnego punktu końcowego podsieci są wyłączone, a następnie utwórz prywatny punkt końcowy za pomocą az network private-endpoint create.
# Disable private endpoint network policies
az network vnet subnet update \
--ids $subnet \
--private-endpoint-network-policies Disabled \
--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)
Powiąż prywatną strefę DNS Azure z siecią wirtualną, aby klienci rozpoznawali oryginalną nazwę hosta udziału plików na adres IP prywatnego punktu końcowego. Następujące polecenia wykorzystują strefę już połączoną z siecią wirtualną. Jeśli żadna nie jest powiązana, używa się strefy w grupie zasobów tej sieci wirtualnej lub tworzy taką i łączy ją. Te kroki dotyczą obu dostawców zasobów.
# 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 is linked to the virtual network. Use the zone in the
# virtual network's resource group if it exists, or create a new one.
dnsZone=$(az network private-dns zone list \
--resource-group $virtualNetworkResourceGroupName \
--query "[?name == '$dnsZoneName'].id" \
--output tsv)
if [ -z "$dnsZone" ]
then
dnsZone=$(az network private-dns zone create \
--resource-group $virtualNetworkResourceGroupName \
--name $dnsZoneName \
--query "id" --output tsv)
fi
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
Uruchom kontrole od klienta w sieci wirtualnej lub z połączonej sieci z DNS skonfigurowanym do rozwiązywania nazwy prywatnego punktu końcowego. Różnice między dostawcami zasobów znajdziesz w artykule o rozwiązywaniu nazw DNS. Użyj oryginalnej nazwy hosta do zamontowania udziału, a nie nazwy hosta privatelink.
Wykonaj następujące wyszukiwanie DNS z PowerShell, wiersza poleceń lub terminala na 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 stronie Przegląd udziału plików wybierz Widok JSON. Pod properties skopiuj wartość 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
Aby zweryfikować rozwiązywanie nazw DNS, pobierz nazwę hosta za pomocą Azure PowerShell, a następnie wyszukaj ją od klienta w sieci wirtualnej.
$storageAccountHostName = [System.Uri]::new($storageAccount.PrimaryEndpoints.File) |
Select-Object -ExpandProperty Host
$storageAccountHostName
Na kliencie w sieci wirtualnej wykonaj następujące polecenie. Zastąp <host-name> nazwą hosta z poprzedniego kroku.
Resolve-DnsName -Name "<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.
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
$fileShare.HostName
Na kliencie w sieci wirtualnej wykonaj następujące polecenie. Zastąp <host-name> nazwą hosta z poprzedniego kroku.
Resolve-DnsName -Name "<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.
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
Aby zweryfikować rozwiązywanie nazw DNS, pobierz nazwę hosta za pomocą interfejsu wiersza polecenia platformy Azure, a następnie sprawdź ją z poziomu klienta w sieci wirtualnej.
httpEndpoint=$(az storage account show \
--resource-group $storageAccountResourceGroupName \
--name $storageAccountName \
--query "primaryEndpoints.file" --output tsv)
hostName=${httpEndpoint#https://}
hostName=${hostName%/}
echo $hostName
Na kliencie w sieci wirtualnej wykonaj następujące polecenie. Zastąp <host-name> nazwą hosta z poprzedniego kroku.
nslookup <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.
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)
echo $hostName
Na kliencie w sieci wirtualnej wykonaj następujące polecenie. Zastąp <host-name> nazwą hosta z poprzedniego kroku.
nslookup <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.
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
Możesz wyłączyć dostęp do sieci publicznej lub zostawić go włączonego dla wybranych sieci. Te konfiguracje są oddzielne. Prywatne punkty końcowe nadal działają w obu konfiguracjach.
W przypadku klasycznych udostępnień plików konfiguruj dostęp publiczny na koncie magazynu. Dla Microsoft.FileShares skonfiguruj je na poziomie pojedynczego udziału plików.
Klasyczne udostępnienia plików mogą również korzystać z granicy zabezpieczeń sieci, z zastrzeżeniem ograniczeń protokołu. W trybie Wymuszonym perimetr odmawia ruchu przez punkty końcowe usługi, które nie mają przypisanego adresu IP. Klienci muszą korzystać z prywatnego punktu końcowego lub standardowego punktu końcowego usługi.
Wyłącz dostęp do sieci publicznej
Po wyłączeniu dostępu do sieci publicznej klienci nie mogą łączyć się przez publiczny punkt końcowy, w tym przez punkty końcowe usługi. Klienci nadal mogą łączyć się przez prywatne punkty końcowe. To ustawienie nie ogranicza ruchu wychodzącego ze strony klientów.
Uwaga
W przypadku klasycznych udostępnień plików istniejące wyjątki zaufanych usług i instancji zasobów pozostają w mocy po wyłączeniu dostępu do sieci publicznej. Przejrzyj te wyjątki, jeśli potrzebujesz dostępu tylko przez prywatne endpointy. Zobacz Wyjątki dla usług platformy Azure.
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. Z menu usługi w obszarze Ustawienia wybierz pozycję Sieć. W obszarze Publiczne punkty końcowe — dostęp wybierz Wyłączone, a następnie wybierz Zapisz.
Dla klasycznych udziałów plików ustaw -PublicNetworkAccess na koncie magazynu na Disabled.
# Use the storage account variables from the beginning of this article.
$publicNetworkAccessParams = @{
ResourceGroupName = $storageAccountResourceGroupName
Name = $storageAccountName
PublicNetworkAccess = "Disabled"
ErrorAction = "Stop"
}
Set-AzStorageAccount @publicNetworkAccessParams | Out-Null
Ustaw -PublicNetworkAccess na Disabled w udziale plików.
$fileShareResourceGroupName = "<resource-group-name>"
$fileShareName = "<file-share-name>"
$publicNetworkAccessParams = @{
ResourceGroupName = $fileShareResourceGroupName
ResourceName = $fileShareName
PublicNetworkAccess = "Disabled"
}
Update-AzFileShare @publicNetworkAccessParams
Dla klasycznych udziałów plików ustaw --public-network-access na koncie magazynu na Disabled.
# This assumes $storageAccountResourceGroupName and $storageAccountName
# are still defined from the beginning of this article.
az storage account update \
--resource-group $storageAccountResourceGroupName \
--name $storageAccountName \
--public-network-access Disabled \
--output none
Ustaw --public-network-access na Disabled w udziale plików.
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
Aby umożliwić klientom korzystanie z wybranych podsieci, zachowaj włączony dostęp do sieci publicznej, włącz punkty końcowe usług w tych podsieciach i dodaj te podsieci do reguł sieciowych zasobu. Możesz używać punktów końcowych usługi z prywatnymi punktami końcowymi lub bez nich. Podsieci mogą znajdować się w innych regionach, subskrypcjach oraz dzierżawcach Microsoft Entra. Aby dodać podsieć z innego tenanta, użyj PowerShell lub Azure CLI. Informacje na temat zagadnień zawiera sekcja Reguły sieci wirtualnej.
Dla dostępu SMB i FileREST można także dodać reguły adresów IP. Reguły dotyczące adresów IP nie dają dostępu do NFS. Do dostępu do NFS użyj reguły sieci wirtualnej. Jeśli konto magazynu znajduje się w obwodzie zabezpieczeń sieciowych, możesz zamiast tego użyć standardowego punktu końcowego usługi.
Przykłady PowerShell i CLI zakładają, że dostęp do sieci publicznej jest już włączony. Przykłady Microsoft. FileShares zakładają również, że podsieć klienta ma już punkt końcowy Microsoft.Storage usługi. Aby skonfigurować ten punkt końcowy, zobacz Włączenie punktów końcowych usług w podsieci.
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 Dostęp do sieci publicznej wybierz pozycję Zarządzaj.
- W zakresie dostępu do sieci publicznej wybierz Włączone dla wybranych sieci, a następnie wybierz Zapisz.
- W ustawieniach zasobów: Sieci wirtualne, adresy IP i wyjątki wybierz Zarządzaj.
- W sekcji Sieci wirtualne wybierz Dodaj sieć wirtualną>Dodaj istniejącą sieć wirtualną. Wybierz sieć wirtualną i podsieci. Jeśli podsieć nie ma punktu
Microsoft.Storage końcowego usługi, wybierz Włącz i poczekaj na zakończenie operacji. Następnie wybierz pozycję Dodaj.
- W przypadku dostępu SMB lub FileREST, w sekcji IPv4 Addresses wpisz publiczne adresy IP lub zakresy, które chcesz dopuścić. Reguły dotyczące adresów IP nie dają dostępu do NFS.
- Jeśli integracja usług wymaga dostępu do zaufanej usługi, w sekcji Wyjątki wybierz Pozwól zaufanym usługom Microsoft na dostęp do tego zasobu.
- Wybierz opcję Zapisz.
Dla Microsoft.FileShares postępuj zgodnie z tymi krokami, aby ograniczyć publiczny punkt końcowy do określonych sieci.
- Przejdź do udziału plików, w którym chcesz ograniczyć dostęp publiczny.
- Z menu usługi w obszarze Ustawienia wybierz pozycję Sieć.
- Upewnij się, że Dostęp do publicznych punktów końcowych jest ustawiony na Włączone.
- W sekcji Ograniczenia publicznych punktów końcowych wybierz Dodaj sieć wirtualną. Wybierz sieć wirtualną i podsieci. Jeśli podsieć nie ma punktu
Microsoft.Storage końcowego usługi, wybierz Włącz i poczekaj na zakończenie operacji. Następnie wybierz pozycję Dodaj.
- Wybierz opcję 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>"
$storageAccountParams = @{
ResourceGroupName = $storageAccountResourceGroupName
Name = $storageAccountName
ErrorAction = "Stop"
}
$storageAccount = Get-AzStorageAccount @storageAccountParams
$virtualNetworkParams = @{
ResourceGroupName = $restrictToVirtualNetworkResourceGroupName
Name = $restrictToVirtualNetworkName
ErrorAction = "Stop"
}
$virtualNetwork = Get-AzVirtualNetwork @virtualNetworkParams
$subnet = $virtualNetwork |
Select-Object -ExpandProperty Subnets |
Where-Object { $_.Name -eq $subnetName }
if ($null -eq $subnet) {
$errorMessage = "Subnet $subnetName not found in virtual network $restrictToVirtualNetworkName."
Write-Error -Message $errorMessage -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") {
# Change the subnet object directly so the subnet keeps its delegations
# and service endpoint policies.
$storageEndpointParams = @{
TypeName = "Microsoft.Azure.Commands.Network.Models.PSServiceEndpoint"
Property = @{ Service = "Microsoft.Storage" }
}
$storageEndpoint = New-Object @storageEndpointParams
$subnet.ServiceEndpoints = @($subnet.ServiceEndpoints | Where-Object { $_ }) + $storageEndpoint
$virtualNetwork = $virtualNetwork | Set-AzVirtualNetwork -ErrorAction Stop
}
Ostatnim krokiem ograniczającym ruch do konta magazynu jest utworzenie reguły sieci wirtualnej platformy Azure i dodanie jej do zestawu reguł sieciowych tego konta magazynu.
$networkRuleParams = @{
VirtualNetworkResourceId = $subnet.Id
ErrorAction = "Stop"
}
$networkRule = $storageAccount | Add-AzStorageAccountNetworkRule @networkRuleParams
$networkRuleSetParams = @{
DefaultAction = "Deny"
VirtualNetworkRule = $networkRule
WarningAction = "SilentlyContinue"
ErrorAction = "Stop"
}
$storageAccount | Update-AzStorageAccountNetworkRuleSet @networkRuleSetParams | Out-Null
Polecenia te zachowują istniejące ustawienia obejścia. Jeśli integracja wymaga dostępu do zaufanej usługi, dodaj -Bypass AzureServices do polecenia update. Parametr zastępuje ustawienie bypass, więc uwzględnij inne opcje bypass, których nadal wymaga Twoje obciążenie.
Dla dostępu SMB lub FileREST z internetu możesz również zezwolić na publiczne adresy IP lub zakresy. Reguły dotyczące adresów IP nie dotyczą klientów w tym samym regionie Azure co konto pamięci masowej. Inne ograniczenia można znaleźć w zasadach adresów IP.
$ipAddressOrRange = "<public-ip-address-or-cidr-range>"
$ipRuleParams = @{
ResourceGroupName = $storageAccountResourceGroupName
Name = $storageAccountName
IPAddressOrRange = $ipAddressOrRange
ErrorAction = "Stop"
}
Add-AzStorageAccountNetworkRule @ipRuleParams | Out-Null
Przekaż dozwolone identyfikatory zasobów podsieci do Update-AzFileShare, używając -AllowedSubnet. Reguły sieciowe dotyczą bezpośrednio udziału plików, więc nie ma konta magazynu do skonfigurowania. Podsieć klienta musi już mieć punkt końcowy usługi Microsoft.Storage.
$fileShareResourceGroupName = "<resource-group-name>"
$fileShareName = "<file-share-name>"
$virtualNetworkResourceGroupName = "<vnet-resource-group-name>"
$virtualNetworkName = "<vnet-name>"
$subnetName = "<subnet-name>"
$virtualNetworkParams = @{
ResourceGroupName = $virtualNetworkResourceGroupName
Name = $virtualNetworkName
}
$subnet = Get-AzVirtualNetwork @virtualNetworkParams |
Select-Object -ExpandProperty Subnets |
Where-Object { $_.Name -eq $subnetName }
$allowedSubnetParams = @{
ResourceGroupName = $fileShareResourceGroupName
ResourceName = $fileShareName
AllowedSubnet = @($subnet.Id)
}
Update-AzFileShare @allowedSubnetParams
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 ograniczającym ruch do konta pamięci jest utworzenie reguły sieci wirtualnej i dodanie jej do zestawu reguł sieciowych tego konta.
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 \
--default-action "Deny" \
--output none
Polecenia te zachowują istniejące ustawienia obejścia. Jeśli integracja wymaga dostępu do zaufanej usługi, dodaj --bypass AzureServices do polecenia update. Opcja zastępuje ustawienie obejścia, więc uwzględnij wszelkie inne opcje obejścia, których nadal wymaga Twoje obciążenie robocze.
Dla dostępu SMB lub FileREST z internetu możesz również zezwolić na publiczne adresy IP lub zakresy. Reguły dotyczące adresów IP nie dotyczą klientów w tym samym regionie Azure co konto pamięci masowej. Inne ograniczenia można znaleźć w zasadach adresów IP.
ipAddressOrRange="<public-ip-address-or-cidr-range>"
az storage account network-rule add \
--resource-group $storageAccountResourceGroupName \
--account-name $storageAccountName \
--ip-address $ipAddressOrRange \
--output none
Przekaż dozwolone identyfikatory zasobów podsieci do az fileshare update, używając --allowed-subnets. Reguły sieciowe dotyczą bezpośrednio udziału plików, więc nie ma konta magazynu do skonfigurowania. Podsieć klienta musi już mieć punkt końcowy usługi Microsoft.Storage.
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
Zezwalaj na dostęp ze standardowego punktu końcowego usługi
Dzięki użyciu standardowego punktu końcowego usługi klienci w podsieci mogą dotrzeć do konta magazynu w obrębie zabezpieczeń sieci poprzez punkt końcowy usługi. Jedna reguła dostępu przychodzącego w profilu perymetru pozwala każdej podsieci korzystającej z adresu IP punktu końcowego usługi. Zasada dotyczy SMB, NFS i FileREST.
Następne kroki tworzą publiczny adres IP, przypisują go do punktu końcowego Microsoft.Storage usługi podsieci i dodają do profilu granicy regułę dostępu przychodzącego dla tego adresu.
Należy pamiętać o następujących kwestiach:
- Konto magazynu musi być skojarzone z granicą zabezpieczeń sieciowych. Aby utworzyć perymetr i powiązać konto pamięci, zobacz Quickstart: Create a network security perimeter - Azure portal.
- Podsieć musi już mieć
Microsoft.Storage punkt końcowy usługi. Aby to dodać, zobacz Ogranicz dostęp do publicznego punktu końcowego do konkretnych sieci.
- Publiczny adres IP musi wykorzystywać standardowe SKU, statyczną alokację oraz IPv4. Musi znajdować się w tym samym regionie co sieć wirtualna.
- Możesz przypisać ten sam adres IP do innych podsieci i sieci wirtualnych w tym samym regionie, w tym do sieci wirtualnych w innych subskrypcjach w tym samym dzierżawcy Microsoft Entra.
- Wszystkie punkty końcowe usług w podsieci muszą korzystać z tego samego adresu IP.
- Przypisanie lub zmiana adresu IP resetuje aktywne połączenia z podsieci. Zaplanuj zmianę na czas okna konserwacyjnego.
- Aby przypisać publiczny adres IP do punktu końcowego usługi, potrzebujesz uprawnienia
Microsoft.Network/publicIPAddresses/joinServiceEndpointNetworkIdentifier/action. Rola współtwórcy sieci obejmuje takie uprawnienia.
- Reguły sieci wirtualnej zezwalające danej podsieci obowiązują do momentu, gdy skojarzenie z perymetrem jest w trybie wymuszonym.
- Możesz też dodać adres IP do reguł adresów IP konta magazynu zamiast reguły obszaru izolacji. Bez użycia perimeteru podstawowy punkt końcowy usługi z regułą sieci wirtualnej zapewnia ten sam dostęp bez dodatkowych opłat.
Aby umożliwić dostęp ze standardowego punktu końcowego usługi, należy postępować zgodnie z tymi krokami. Więcej informacji można znaleźć w artykule Konfiguruj standardowy punkt końcowy usługi za pomocą portalu Azure.
- W polu wyszukiwania na górze portalu Azure wpisz publiczne adresy IP. Wybierz Adresy IP publiczne w wynikach wyszukiwania.
- Wybierz + Utwórz.
- Na zakładce Podstawy wybierz subskrypcję, grupę zasobów oraz region swojej wirtualnej sieci. Wprowadź nazwę.
Dla wersji IP wybierz IPv4. Dla SKU wybierz Standard.
- Wybierz Przejrzyj + utwórz, a następnie wybierz Utwórz.
- Po zakończeniu wdrożenia przejdź na nowy publiczny adres IP. Skopiuj wartość adresu IP.
- Przejdź do wirtualnej sieci, która zawiera podsieć klienta. W menu usług, w Ustawieniach, wybierz Podsieci. Wybierz podsieć.
- W sekcji Punkty końcowe usługi, dla subskrypcji identyfikatora sieci, wybierz subskrypcję publicznego adresu IP.
Dla identyfikatora sieci wybierz utworzony przez Ciebie publiczny adres IP.
- W liście Usługi, dla Microsoft.Storage, wybierz Włącz identyfikator sieci. Wybierz opcję Zapisz.
- Przejdź do obwodu zabezpieczeń sieci, z którym jest skojarzone konto magazynu. W menu serwisowym, w Ustawieniach, wybierz Profile. Wybierz profil, z którym konto pamięci jest powiązane.
- W menu usług, w obszarze Ustawienia, wybierz Reguły dostępu przychodzącego. Wybierz opcję Dodaj.
- W polu nazwa reguły wpisz nazwę.
Dla typu źródłowego wybierz zakresy adresów IP. W polu Dozwolone źródła wpisz skopiowany adres IP, a następnie
/32. Wybierz opcję Dodaj.
Poniższe polecenia programu PowerShell tworzą publiczny adres IP, przypisują go do punktu końcowego usługi Microsoft.Storage podsieci oraz dodają regułę dostępu przychodzącego dla tego adresu do profilu perimeter. Zastąp zastępcze wartości własnymi wartościami.
$virtualNetworkResourceGroupName = "<vnet-resource-group-name>"
$virtualNetworkName = "<vnet-name>"
$subnetName = "<subnet-name>"
$publicIpName = "<public-ip-name>"
$perimeterResourceGroupName = "<perimeter-resource-group-name>"
$perimeterName = "<perimeter-name>"
$profileName = "<profile-name>"
$accessRuleName = "<access-rule-name>"
$virtualNetworkParams = @{
ResourceGroupName = $virtualNetworkResourceGroupName
Name = $virtualNetworkName
ErrorAction = "Stop"
}
$virtualNetwork = Get-AzVirtualNetwork @virtualNetworkParams
$subnet = $virtualNetwork.Subnets | Where-Object { $_.Name -eq $subnetName }
if ($null -eq $subnet) {
throw "Subnet '$subnetName' wasn't found in virtual network '$virtualNetworkName'."
}
$storageEndpoint = $subnet.ServiceEndpoints | Where-Object { $_.Service -eq "Microsoft.Storage" }
if ($null -eq $storageEndpoint) {
throw "The subnet doesn't have the Microsoft.Storage service endpoint. Add it before you continue."
}
$publicIpParams = @{
ResourceGroupName = $virtualNetworkResourceGroupName
Name = $publicIpName
Location = $virtualNetwork.Location
Sku = "Standard"
AllocationMethod = "Static"
IpAddressVersion = "IPv4"
ErrorAction = "Stop"
}
$publicIp = New-AzPublicIpAddress @publicIpParams
$networkIdentifierParams = @{
TypeName = "Microsoft.Azure.Commands.Network.Models.PSResourceId"
Property = @{ Id = $publicIp.Id }
}
$storageEndpoint.NetworkIdentifier = New-Object @networkIdentifierParams
$virtualNetwork | Set-AzVirtualNetwork -ErrorAction Stop | Out-Null
$accessRuleParams = @{
ResourceGroupName = $perimeterResourceGroupName
SecurityPerimeterName = $perimeterName
ProfileName = $profileName
Name = $accessRuleName
Direction = "Inbound"
AddressPrefix = @("$($publicIp.IpAddress)/32")
ErrorAction = "Stop"
}
New-AzNetworkSecurityPerimeterAccessRule @accessRuleParams | Out-Null
Następujące polecenia CLI tworzą publiczny adres IP, przypisują go do punktu końcowego usługi tej podsieci Microsoft.Storage oraz dodają do profilu granicy regułę dostępu przychodzącego dla tego adresu. Zastąp zastępcze wartości własnymi wartościami. Polecenia az network perimeter wymagają rozszerzenia nsp dla Azure CLI. Aby go zainstalować, uruchom polecenie az extension add --name nsp.
virtualNetworkResourceGroupName="<vnet-resource-group-name>"
virtualNetworkName="<vnet-name>"
subnetName="<subnet-name>"
publicIpName="<public-ip-name>"
perimeterResourceGroupName="<perimeter-resource-group-name>"
perimeterName="<perimeter-name>"
profileName="<profile-name>"
accessRuleName="<access-rule-name>"
storageEndpointIndex=$(az network vnet subnet show \
--resource-group $virtualNetworkResourceGroupName \
--vnet-name $virtualNetworkName \
--name $subnetName \
--query "serviceEndpoints[].service" \
--output tsv | \
grep --line-number --line-regexp --fixed-strings "Microsoft.Storage" | \
cut -d ":" -f 1)
if [ -z "$storageEndpointIndex" ]; then
echo "The subnet doesn't have the Microsoft.Storage service endpoint. Add it before you continue." >&2
else
location=$(az network vnet show \
--resource-group $virtualNetworkResourceGroupName \
--name $virtualNetworkName \
--query "location" \
--output tsv) &&
az network public-ip create \
--resource-group $virtualNetworkResourceGroupName \
--name $publicIpName \
--location $location \
--sku Standard \
--allocation-method Static \
--version IPv4 \
--output none &&
publicIpId=$(az network public-ip show \
--resource-group $virtualNetworkResourceGroupName \
--name $publicIpName \
--query "id" \
--output tsv) &&
publicIpAddress=$(az network public-ip show \
--resource-group $virtualNetworkResourceGroupName \
--name $publicIpName \
--query "ipAddress" \
--output tsv) &&
az network vnet subnet update \
--resource-group $virtualNetworkResourceGroupName \
--vnet-name $virtualNetworkName \
--name $subnetName \
--set "serviceEndpoints[$((storageEndpointIndex - 1))].networkIdentifier={\"id\":\"$publicIpId\"}" \
--output none &&
az network perimeter profile access-rule create \
--resource-group $perimeterResourceGroupName \
--perimeter-name $perimeterName \
--profile-name $profileName \
--access-rule-name $accessRuleName \
--direction Inbound \
--address-prefixes "$publicIpAddress/32" \
--output none
fi
Microsoft.FileShares nie obsługuje obwodów zabezpieczeń sieci. Klienci w podsieci, która ma standardowy punkt końcowy usługi, nadal mogą uzyskać dostęp do udziału plików Microsoft.FileShares, jeśli podsieć znajduje się w dozwolonych podsieciach udziału plików. Instrukcje znajdują się w artykule Ogranicz dostęp do publicznego punktu końcowego do konkretnych sieci.
Ogranicz dostęp wychodzący do konkretnych kont magazynu
Reguły sieciowe dla udostępniania plików kontrolują dostęp przychodzący. Nie ograniczają one, do jakich innych zasobów pamięci masowej mają dostęp klienci. Dla klasycznych udostępnień plików możesz użyć polityki endpointów usług, aby ograniczyć, do których kont pamięci masowej klienci w podsieci mogą mieć dostęp przez punkty końcowe usługi. Zasada filtruje elementy docelowe ruchu, który omija Azure Firewall i wirtualne urządzenia sieciowe. Nie ogranicza innych ścieżek wychodzących ani nie zastępuje reguł sieciowych i wymagań autoryzacyjnych miejsca docelowego. Więcej informacji można znaleźć w artykule Ogranicz ruch wychodzący za pomocą zasad punktów końcowych usługi.
Important
Zasady punktów końcowych usługi nie obsługują udziałów plików Microsoft.FileShares. Polityka na podsieci klienta blokuje dostęp do tych udziałów plików przez punkty końcowe usługi, nawet jeśli zezwala na tę subskrypcję lub grupę zasobów. To ograniczenie dotyczy również podsieci uzyskujących dostęp zarówno do klasycznych udziałów plików, jak i Microsoft.FileShares. Klienci w tej podsieci muszą korzystać z prywatnego punktu końcowego, aby uzyskać dostęp do udziałów plików Microsoft.FileShares.
Zasada punktu końcowego usługi definiuje dozwolone miejsca docelowe magazynu dla klientów w powiązanej podsieci. Blokuje dostęp tych klientów do innych kont pamięci masowej przez punkty końcowe usług. Należy pamiętać o następujących kwestiach:
- Dodaj każde konto pamięci masowej, z którego korzystają klienci w podsieci, zanim połączysz politykę z podsiecią. Lista ta obejmuje konta pamięci masowej, z których korzystają inne obciążenia w podsieci.
- Zasady punktu końcowego usługi muszą znajdować się w tym samym regionie i subskrypcji co sieć wirtualna.
- Polityka może zawierać tylko jedną definicję polityki dla usługi
Microsoft.Storage. Aby umożliwić więcej kont magazynu, dodaj ich identyfikatory zasobów do tej samej definicji polityki. Możesz także zezwolić na wszystkie konta pamięci masowej w grupie zasobów lub subskrypcji.
- Po powiązaniu polityki z podsiecią, polityka dotyczy ruchu do kont pamięci masowej we wszystkich regionach.
- Te kroki zakładają, że podsieć nie posiada zasad punktów końcowych usługi. Jeśli polityki są już powiązane, przejrzyj i zaktualizuj te polityki zamiast zastępować ich powiązania. Przykłady PowerShell i CLI kończą się, jeśli znajdą istniejące powiązania.
Aby utworzyć zasady punktu końcowego usługi i skojarzyć je z podsiecią, wykonaj następujące kroki. Szczegółowe kroki można znaleźć w artykule Tworzenie i kojarzenie zasad punktów końcowych usługi.
- W polu wyszukiwania na górze portalu Azure wpisz Service endpoint policy. Wybierz pozycję Zasady punktów końcowych usługi w wynikach wyszukiwania.
- Wybierz + Utwórz.
- Na zakładce Podstawy wybierz subskrypcję i region swojej sieci wirtualnej. Wybierz grupę zasobów i wprowadź nazwę polityki.
- Wybierz pozycję Dalej: Definicje zasad.
- Wybierz + Dodaj zasób. Dla usługi wybierz Microsoft.Storage. W obszarze Scope wybierz Pojedyncze konto, a następnie wybierz konto pamięci masowej, które zawiera twoje udostępnione pliki. Wybierz opcję Dodaj. Powtarzaj ten krok dla każdego konta pamięci masowej, z którego korzystają klienci w podsieci.
- Wybierz Przejrzyj + Utwórz, a następnie wybierz Utwórz.
- Przejdź do nowych zasad punktu końcowego usługi. W menu serwisowym, w sekcji Ustawienia, wybierz Powiązane podsieci.
- Wybierz Edytuj powiązanie podsieci, wybierz sieć wirtualną i podsieć, a następnie wybierz Zastosowaj.
Poniższe polecenia PowerShell tworzą politykę punktu końcowego usługi i przypisują ją do podsieci. Polityka ogranicza dostęp klienta z tej podsieci do jednego konta pamięci masowej przez punkt końcowy usługi. Podsieć musi już mieć Microsoft.Storage punkt końcowy usługi. Zastąp zastępcze wartości własnymi wartościami.
$storageAccountResourceGroupName = "<storage-account-resource-group>"
$storageAccountName = "<storage-account-name>"
$virtualNetworkResourceGroupName = "<vnet-resource-group-name>"
$virtualNetworkName = "<vnet-name>"
$subnetName = "<subnet-name>"
$policyName = "<service-endpoint-policy-name>"
$storageAccountParams = @{
ResourceGroupName = $storageAccountResourceGroupName
Name = $storageAccountName
ErrorAction = "Stop"
}
$storageAccount = Get-AzStorageAccount @storageAccountParams
$virtualNetworkParams = @{
ResourceGroupName = $virtualNetworkResourceGroupName
Name = $virtualNetworkName
ErrorAction = "Stop"
}
$virtualNetwork = Get-AzVirtualNetwork @virtualNetworkParams
$subnet = $virtualNetwork.Subnets | Where-Object { $_.Name -eq $subnetName }
if ($null -eq $subnet) {
throw "Subnet '$subnetName' wasn't found in virtual network '$virtualNetworkName'."
}
if ($subnet.ServiceEndpointPolicies.Count -gt 0) {
throw "The subnet already has service endpoint policies. Review and update them before changing the configuration."
}
# To allow clients to access more storage accounts, add their resource IDs to ServiceResource.
$policyDefinitionParams = @{
Name = "allowed-storage-accounts"
Service = "Microsoft.Storage"
ServiceResource = @($storageAccount.Id)
ErrorAction = "Stop"
}
$policyDefinition = New-AzServiceEndpointPolicyDefinition @policyDefinitionParams
$policyParams = @{
ResourceGroupName = $virtualNetworkResourceGroupName
Name = $policyName
Location = $virtualNetwork.Location
ServiceEndpointPolicyDefinition = $policyDefinition
ErrorAction = "Stop"
}
$policy = New-AzServiceEndpointPolicy @policyParams
$subnet.ServiceEndpointPolicies = @($policy)
$virtualNetwork | Set-AzVirtualNetwork -ErrorAction Stop | Out-Null
Poniższe polecenia CLI tworzą politykę punktu końcowego usługi i przypisują ją do podsieci. Polityka ogranicza dostęp klienta z tej podsieci do jednego konta pamięci masowej przez punkt końcowy usługi. Podsieć musi już mieć Microsoft.Storage punkt końcowy usługi. Zastąp zastępcze wartości własnymi wartościami.
storageAccountResourceGroupName="<storage-account-resource-group>"
storageAccountName="<storage-account-name>"
virtualNetworkResourceGroupName="<vnet-resource-group-name>"
virtualNetworkName="<vnet-name>"
subnetName="<subnet-name>"
policyName="<service-endpoint-policy-name>"
existingPolicyIds=$(az network vnet subnet show \
--resource-group $virtualNetworkResourceGroupName \
--vnet-name $virtualNetworkName \
--name $subnetName \
--query "serviceEndpointPolicies[].id" --output tsv)
if [ -n "$existingPolicyIds" ]; then
echo "The subnet already has service endpoint policies. Review and update them before changing the configuration." >&2
else
storageAccountId=$(az storage account show \
--resource-group $storageAccountResourceGroupName \
--name $storageAccountName \
--query "id" --output tsv) &&
location=$(az network vnet show \
--resource-group $virtualNetworkResourceGroupName \
--name $virtualNetworkName \
--query "location" --output tsv) &&
az network service-endpoint policy create \
--resource-group $virtualNetworkResourceGroupName \
--name $policyName \
--location $location \
--output none &&
# To allow clients to access more storage accounts, add their resource IDs to --service-resources.
az network service-endpoint policy-definition create \
--resource-group $virtualNetworkResourceGroupName \
--policy-name $policyName \
--name "allowed-storage-accounts" \
--service "Microsoft.Storage" \
--service-resources $storageAccountId \
--output none &&
az network vnet subnet update \
--resource-group $virtualNetworkResourceGroupName \
--vnet-name $virtualNetworkName \
--name $subnetName \
--service-endpoint-policy $policyName \
--output none
fi
Aby uzyskać dostęp do udziału plików Microsoft.FileShares z podsieci, która ma zasady punktu końcowego usługi, utwórz prywatny punkt końcowy dla udziału plików. Polityki punktów końcowych usług nie mają zastosowania do ruchu przechodzącego przez prywatny punkt końcowy.
Preferencja routowania kontroluje, jak ruch od klientów spoza Azure dociera do publicznego punktu końcowego. Jest dostępny tylko dla klasycznych udziałów plików HDD, które korzystają z modelu płatności zgodnie z rzeczywistym użyciem w StorageV2 kontach magazynowych. Informacje o pojęciach zawiera temat Routing sieci dla publicznego punktu końcowego.
Important
Nie używaj routingu internetowego dla Azure Files. Routing internetowy nie obsługuje scenariuszy łączenia domen Active Directory (AD) ani Azure File Sync. Zachowaj domyślne routowanie Microsoft.
Aby sprawdzić preferencje routingu i ustawić go na routing Microsoft, postępuj zgodnie z tymi krokami.
- Przejdź do konta przechowywania.
- W menu usług, w sekcji Bezpieczeństwo + sieciowanie, wybierz Sieciowanie.
- Wybierz zakładkę Network routing.
- W preferencjach routingu upewnij się, że wybrano routing sieci Microsoft.
- Jeśli zmieniłeś ustawienie, wybierz Zapisz.
Aby ustawić preferencję routingu na routing Microsoft, wykonaj następujące polecenie. Zastąp zastępcze wartości własnymi wartościami.
$params = @{
ResourceGroupName = "<resource-group>"
Name = "<storage-account-name>"
RoutingChoice = "MicrosoftRouting"
}
Set-AzStorageAccount @params
Aby ustawić preferencję routingu na routing Microsoft, wykonaj następujące polecenie. Zastąp zastępcze wartości własnymi wartościami.
az storage account update \
--resource-group <resource-group> \
--name <storage-account-name> \
--routing-choice MicrosoftRouting
Microsoft.FileShares nie obsługuje preferencji routingu.
Treści powiązane