Ograniczanie dostępu sieciowego do zasobów PaaS przy użyciu punktów końcowych usługi sieci wirtualnej przy użyciu programu PowerShell

Punkty końcowe usługi dla sieci wirtualnej umożliwiają ograniczenie dostępu sieciowego do niektórych zasobów usługi platformy Azure do podsieci sieci wirtualnej. Możesz również uniemożliwić dostęp internetowy do zasobów. Punkty końcowe usługi zapewniają bezpośrednie połączenie z sieci wirtualnej z obsługiwanymi usługami platformy Azure, umożliwiając korzystanie z prywatnej przestrzeni adresowej sieci wirtualnej w celu uzyskiwania dostępu do usług platformy Azure. Ruch kierowany do zasobów platformy Azure za pośrednictwem punktów końcowych usługi zawsze pozostaje w sieci szkieletowej platformy Microsoft Azure. W tym artykule omówiono sposób wykonywania następujących zadań:

  • Tworzenie sieci wirtualnej z jedną podsiecią
  • Dodawanie podsieci i włączanie punktu końcowego usługi
  • Tworzenie zasobów platformy Azure i zezwalanie na dostęp sieciowy do nich tylko z podsieci
  • Wdrażanie maszyny wirtualnej w każdej podsieci
  • Potwierdzanie dostępu do zasobu z podsieci
  • Potwierdzanie zablokowania dostępu do zasobu z podsieci i z Internetu

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.

Azure Cloud Shell

Na platforma Azure hostowane jest Azure Cloud Shell, interaktywne środowisko powłoki, z którego można korzystać w przeglądarce. Do pracy z usługami platformy Azure można używać programu Bash lub PowerShell w środowisku Cloud Shell. Aby uruchomić kod w tym artykule, możesz użyć wstępnie zainstalowanych poleceń usługi Cloud Shell bez konieczności instalowania niczego w środowisku lokalnym.

Aby uruchomić środowisko Azure Cloud Shell:

Opcja Przykład/link
Wybierz pozycję Wypróbuj w prawym górnym rogu bloku kodu lub polecenia. Wybranie pozycji Wypróbuj nie powoduje automatycznego skopiowania kodu lub polecenia do usługi Cloud Shell. Screenshot that shows an example of Try It for Azure Cloud Shell.
Przejdź do witryny https://shell.azure.com lub wybierz przycisk Uruchom Cloud Shell, aby otworzyć środowisko Cloud Shell w przeglądarce. Button to launch Azure Cloud Shell.
Wybierz przycisk Cloud Shell na pasku menu w prawym górnym rogu witryny Azure Portal. Screenshot that shows the Cloud Shell button in the Azure portal

Aby użyć usługi Azure Cloud Shell:

  1. Uruchom usługę Cloud Shell.

  2. Wybierz przycisk Kopiuj w bloku kodu (lub bloku poleceń), aby skopiować kod lub polecenie.

  3. Wklej kod lub polecenie do sesji usługi Cloud Shell, wybierając klawisze Ctrl+Shift V w systemach Windows i Linux lub wybierając pozycję Cmd+Shift++V w systemie macOS.

  4. Wybierz klawisz Enter, aby uruchomić kod lub polecenie.

Jeśli zdecydujesz się zainstalować program PowerShell i korzystać z niego lokalnie, ten artykuł wymaga modułu Azure PowerShell w wersji 1.0.0 lub nowszej. Uruchom polecenie Get-Module -ListAvailable Az, aby dowiedzieć się, jaka wersja jest zainstalowana. Jeśli konieczne będzie uaktualnienie, zobacz Instalowanie modułu Azure PowerShell. Jeśli używasz programu PowerShell lokalnie, musisz też uruchomić polecenie Connect-AzAccount, aby utworzyć połączenie z platformą Azure.

Tworzenie sieci wirtualnej

Przed utworzeniem sieci wirtualnej należy utworzyć grupę zasobów dla sieci wirtualnej i wszystkie inne zasoby utworzone w tym artykule. Utwórz grupę zasobów za pomocą polecenia New-AzResourceGroup. Poniższy przykład tworzy grupę zasobów o nazwie myResourceGroup:

New-AzResourceGroup -ResourceGroupName myResourceGroup -Location EastUS

Utwórz sieć wirtualną przy użyciu polecenia New-AzVirtualNetwork. Poniższy przykład tworzy sieć wirtualną o nazwie myVirtualNetwork z prefiksem adresu 10.0.0.0/16.

$virtualNetwork = New-AzVirtualNetwork `
  -ResourceGroupName myResourceGroup `
  -Location EastUS `
  -Name myVirtualNetwork `
  -AddressPrefix 10.0.0.0/16

Utwórz konfigurację podsieci za pomocą polecenia New-AzVirtualNetworkSubnetConfig. Poniższy przykład tworzy konfigurację podsieci dla podsieci o nazwie Public:

$subnetConfigPublic = Add-AzVirtualNetworkSubnetConfig `
  -Name Public `
  -AddressPrefix 10.0.0.0/24 `
  -VirtualNetwork $virtualNetwork

Utwórz podsieć w sieci wirtualnej, zapisując konfigurację podsieci w sieci wirtualnej za pomocą polecenia Set-AzVirtualNetwork:

$virtualNetwork | Set-AzVirtualNetwork

Włączanie punktu końcowego usługi

Punkty końcowe usługi można włączyć tylko dla usług obsługujących punkty końcowe usługi. Wyświetlanie usług z obsługą punktów końcowych usługi dostępnych w lokalizacji platformy Azure za pomocą polecenia Get-AzVirtualNetworkAvailableEndpointService. Poniższy przykład zwraca listę usług z obsługą punktu końcowego usługi dostępnych w regionie eastus . Lista zwracanych usług będzie rosła wraz z upływem czasu, ponieważ więcej usług platformy Azure stanie się włączonym punktem końcowym usługi.

Get-AzVirtualNetworkAvailableEndpointService -Location eastus | Select Name

Utwórz dodatkową podsieć w sieci wirtualnej. W tym przykładzie podsieć o nazwie Private jest tworzona z punktem końcowym usługi dla microsoft.Storage:

$subnetConfigPrivate = Add-AzVirtualNetworkSubnetConfig `
  -Name Private `
  -AddressPrefix 10.0.1.0/24 `
  -VirtualNetwork $virtualNetwork `
  -ServiceEndpoint Microsoft.Storage

$virtualNetwork | Set-AzVirtualNetwork

Ograniczanie dostępu sieciowego dla podsieci

Utwórz reguły zabezpieczeń sieciowej grupy zabezpieczeń za pomocą polecenia New-AzNetworkSecurityRuleConfig. Poniższa reguła zezwala na dostęp wychodzący do publicznych adresów IP przypisanych do usługi Azure Storage:

$rule1 = New-AzNetworkSecurityRuleConfig `
  -Name Allow-Storage-All `
  -Access Allow `
  -DestinationAddressPrefix Storage `
  -DestinationPortRange * `
  -Direction Outbound `
  -Priority 100 `
  -Protocol * `
  -SourceAddressPrefix VirtualNetwork `
  -SourcePortRange *

Poniższa reguła odmawia dostępu do wszystkich publicznych adresów IP. Poprzednia reguła zastępuje tę regułę ze względu na wyższy priorytet, co umożliwia dostęp do publicznych adresów IP usługi Azure Storage.

$rule2 = New-AzNetworkSecurityRuleConfig `
  -Name Deny-Internet-All `
  -Access Deny `
  -DestinationAddressPrefix Internet `
  -DestinationPortRange * `
  -Direction Outbound `
  -Priority 110 `
  -Protocol * `
  -SourceAddressPrefix VirtualNetwork `
  -SourcePortRange *

Poniższa reguła zezwala na ruch protokołu RDP (Remote Desktop Protocol) przychodzący do podsieci z dowolnego miejsca. Połączenia pulpitu zdalnego są dozwolone w podsieci, dzięki czemu można potwierdzić dostęp sieciowy do zasobu w późniejszym kroku.

$rule3 = New-AzNetworkSecurityRuleConfig `
  -Name Allow-RDP-All `
  -Access Allow `
  -DestinationAddressPrefix VirtualNetwork `
  -DestinationPortRange 3389 `
  -Direction Inbound `
  -Priority 120 `
  -Protocol * `
  -SourceAddressPrefix * `
  -SourcePortRange *

Utwórz sieciową grupę zabezpieczeń przy użyciu polecenia New-AzNetworkSecurityGroup. Poniższy przykład tworzy sieciową grupę zabezpieczeń o nazwie myNsgPrivate.

$nsg = New-AzNetworkSecurityGroup `
  -ResourceGroupName myResourceGroup `
  -Location EastUS `
  -Name myNsgPrivate `
  -SecurityRules $rule1,$rule2,$rule3

Skojarz sieciową grupę zabezpieczeń z podsiecią Private z poleceniem Set-AzVirtualNetworkSubnetConfig , a następnie zapisz konfigurację podsieci w sieci wirtualnej. Poniższy przykład kojarzy sieciowa grupa zabezpieczeń myNsgPrivate z podsiecią Private :

Set-AzVirtualNetworkSubnetConfig `
  -VirtualNetwork $VirtualNetwork `
  -Name Private `
  -AddressPrefix 10.0.1.0/24 `
  -ServiceEndpoint Microsoft.Storage `
  -NetworkSecurityGroup $nsg

$virtualNetwork | Set-AzVirtualNetwork

Ograniczanie dostępu sieciowego do zasobu

Kroki niezbędne do ograniczenia dostępu sieciowego do zasobów utworzonych za pomocą usług platformy Azure obsługujących punkty końcowe usługi różnią się w zależności od usługi. Zobacz dokumentację poszczególnych usług, aby poznać konkretne kroki dla każdej usługi. W pozostałej części tego artykułu przedstawiono kroki ograniczania dostępu do sieci dla konta usługi Azure Storage, na przykład.

Tworzenie konta magazynu

Utwórz konto usługi Azure Storage przy użyciu polecenia New-AzStorageAccount. Zastąp <replace-with-your-unique-storage-account-name> ciąg nazwą unikatową we wszystkich lokalizacjach platformy Azure o długości od 3 do 24 znaków, używając tylko cyfr i małych liter.

$storageAcctName = '<replace-with-your-unique-storage-account-name>'

New-AzStorageAccount `
  -Location EastUS `
  -Name $storageAcctName `
  -ResourceGroupName myResourceGroup `
  -SkuName Standard_LRS `
  -Kind StorageV2

Po utworzeniu konta magazynu pobierz klucz konta magazynu do zmiennej za pomocą polecenia Get-AzStorageAccountKey:

$storageAcctKey = (Get-AzStorageAccountKey `
  -ResourceGroupName myResourceGroup `
  -AccountName $storageAcctName).Value[0]

Klucz jest używany do tworzenia udziału plików w późniejszym kroku. Wprowadź $storageAcctKey i zanotuj wartość, ponieważ musisz również ręcznie wprowadzić ją w późniejszym kroku podczas mapowania udziału plików na dysk na maszynie wirtualnej.

Tworzenie udziału plików w ramach konta magazynu

Utwórz kontekst dla konta magazynu i klucza za pomocą polecenia New-AzStorageContext. Kontekst hermetyzuje nazwę konta magazynu i klucz konta:

$storageContext = New-AzStorageContext $storageAcctName $storageAcctKey

Utwórz udział plików za pomocą polecenia New-AzStorageShare:

$share = New-AzStorageShare my-file-share -Context $storageContext

Odmowa dostępu sieciowego do konta magazynu

Domyślnie konta magazynu akceptują połączenia sieciowe od klientów w dowolnej sieci. Aby ograniczyć dostęp do wybranych sieci, zmień domyślną akcję na Odmów za pomocą polecenia Update-AzStorageAccountNetworkRuleSet. Kiedy dostęp sieciowy jest blokowany, konto magazynu nie jest dostępne z żadnej sieci.

Update-AzStorageAccountNetworkRuleSet  `
  -ResourceGroupName "myresourcegroup" `
  -Name $storageAcctName `
  -DefaultAction Deny

Włączanie dostępu sieciowego z podsieci

Pobierz utworzoną sieć wirtualną za pomocą polecenia Get-AzVirtualNetwork , a następnie pobierz obiekt prywatnej podsieci do zmiennej za pomocą polecenia Get-AzVirtualNetworkSubnetConfig:

$privateSubnet = Get-AzVirtualNetwork `
  -ResourceGroupName "myResourceGroup" `
  -Name "myVirtualNetwork" `
  | Get-AzVirtualNetworkSubnetConfig `
  -Name "Private"

Zezwalaj na dostęp sieciowy do konta magazynu z podsieci Prywatnej za pomocą polecenia Add-AzStorageAccountNetworkRule.

Add-AzStorageAccountNetworkRule `
  -ResourceGroupName "myresourcegroup" `
  -Name $storageAcctName `
  -VirtualNetworkResourceId $privateSubnet.Id

Tworzenie maszyn wirtualnych

Aby przetestować dostęp sieciowy do konta magazynu, należy wdrożyć maszynę wirtualną w każdej podsieci.

Tworzenie pierwszej maszyny wirtualnej

Utwórz maszynę wirtualną w podsieci Publicznej za pomocą polecenia New-AzVM. Podczas wykonywania poniższego polecenia jest wyświetlany monit o poświadczenia. Wprowadzane wartości są konfigurowane jako nazwa użytkownika i hasło dla maszyny wirtualnej. Opcja -AsJob tworzy maszynę wirtualną w tle, dzięki czemu można przejść do następnego kroku.

New-AzVm `
    -ResourceGroupName "myResourceGroup" `
    -Location "East US" `
    -VirtualNetworkName "myVirtualNetwork" `
    -SubnetName "Public" `
    -Name "myVmPublic" `
    -AsJob

Zwracane są dane wyjściowe podobne do następujących przykładowych danych wyjściowych:

Id     Name            PSJobTypeName   State         HasMoreData     Location             Command                  
--     ----            -------------   -----         -----------     --------             -------                  
1      Long Running... AzureLongRun... Running       True            localhost            New-AzVM     

Tworzenie drugiej maszyny wirtualnej

Utwórz maszynę wirtualną w podsieci Private :

New-AzVm `
    -ResourceGroupName "myResourceGroup" `
    -Location "East US" `
    -VirtualNetworkName "myVirtualNetwork" `
    -SubnetName "Private" `
    -Name "myVmPrivate"

Utworzenie maszyny wirtualnej na platformie Azure zajmuje kilka minut. Nie przechodzij do następnego kroku, dopóki platforma Azure nie zakończy tworzenia maszyny wirtualnej i zwraca dane wyjściowe do programu PowerShell.

Potwierdzanie dostępu do konta magazynu

Użyj polecenia Get-AzPublicIpAddress, aby uzyskać publiczny adres IP maszyny wirtualnej. Poniższy przykład zwraca publiczny adres IP maszyny wirtualnej myVmPrivate :

Get-AzPublicIpAddress `
  -Name myVmPrivate `
  -ResourceGroupName myResourceGroup `
  | Select IpAddress

W poniższym poleceniu zastąp ciąg <publicIpAddress> publicznym adresem IP zwróconym w poprzednim poleceniu, a następnie wprowadź następujące polecenie:

mstsc /v:<publicIpAddress>

Zostanie utworzony i pobrany na komputer plik Remote Desktop Protocol (rdp). Otwórz pobrany plik rdp. Po wyświetleniu monitu wybierz pozycję Połącz. Wprowadź nazwę użytkownika i hasło określone podczas tworzenia maszyny wirtualnej. Może okazać się konieczne wybranie pozycji Więcej opcji, a następnie pozycji Użyj innego konta, aby określić poświadczenia wprowadzone podczas tworzenia maszyny wirtualnej. Wybierz przycisk OK. Podczas procesu logowania może pojawić się ostrzeżenie o certyfikacie. Jeśli zostanie wyświetlone ostrzeżenie, wybierz pozycję Tak lub Kontynuuj, aby nawiązać połączenie.

Na maszynie wirtualnej myVmPrivate mapuj udział plików platformy Azure na dysk Z przy użyciu programu PowerShell. Przed uruchomieniem następujących poleceń zastąp <storage-account-key> wartości i <storage-account-name> wartościami podanymi lub pobranymi w sekcji Tworzenie konta magazynu.

$acctKey = ConvertTo-SecureString -String "<storage-account-key>" -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential -ArgumentList "Azure\<storage-account-name>", $acctKey
New-PSDrive -Name Z -PSProvider FileSystem -Root "\\<storage-account-name>.file.core.windows.net\my-file-share" -Credential $credential

Program PowerShell zwraca dane wyjściowe podobne do następujących przykładowych danych wyjściowych:

Name           Used (GB)     Free (GB) Provider      Root
----           ---------     --------- --------      ----
Z                                      FileSystem    \\vnt.file.core.windows.net\my-f...

Udział plików platformy Azure został pomyślnie mapowany na dysk Z.

Upewnij się, że maszyna wirtualna nie ma łączności wychodzącej z żadnymi innymi publicznymi adresami IP:

ping bing.com

Nie otrzymasz żadnych odpowiedzi, ponieważ sieciowa grupa zabezpieczeń skojarzona z podsiecią Private nie zezwala na dostęp ruchu wychodzącego do publicznych adresów IP innych niż adresy przypisane do usługi Azure Storage.

Zamknij sesję pulpitu zdalnego dla maszyny wirtualnej myVmPrivate.

Potwierdzanie odmowy dostępu do konta magazynu

Uzyskaj publiczny adres IP maszyny wirtualnej myVmPublic :

Get-AzPublicIpAddress `
  -Name myVmPublic `
  -ResourceGroupName myResourceGroup `
  | Select IpAddress

W poniższym poleceniu zastąp ciąg <publicIpAddress> publicznym adresem IP zwróconym w poprzednim poleceniu, a następnie wprowadź następujące polecenie:

mstsc /v:<publicIpAddress>

Na maszynie wirtualnej myVmPublic spróbuj zamapować udział plików platformy Azure na dysk Z. Przed uruchomieniem następujących poleceń zastąp <storage-account-key> wartości i <storage-account-name> wartościami podanymi lub pobranymi w sekcji Tworzenie konta magazynu.

$acctKey = ConvertTo-SecureString -String "<storage-account-key>" -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential -ArgumentList "Azure\<storage-account-name>", $acctKey
New-PSDrive -Name Z -PSProvider FileSystem -Root "\\<storage-account-name>.file.core.windows.net\my-file-share" -Credential $credential

Odmowa dostępu do udziału i występuje New-PSDrive : Access is denied błąd. Odmowa dostępu nastąpi, ponieważ maszyna wirtualna myVmPublic jest wdrożona w podsieci Public. Podsieć Public nie ma punktu końcowego usługi obsługującego usługę Azure Storage, a konto magazynu zezwala tylko na dostęp sieciowy z podsieci Private, a nie z podsieci Public.

Zamknij sesję pulpitu zdalnego dla maszyny wirtualnej myVmPublic.

Na komputerze spróbuj wyświetlić udziały plików na koncie magazynu za pomocą następującego polecenia:

Get-AzStorageFile `
  -ShareName my-file-share `
  -Context $storageContext

Odmowa dostępu i zostanie wyświetlony plik Get-AzStorageFile: serwer zdalny zwrócił błąd: (403) Zabronione. Kod stanu HTTP: 403 — komunikat o błędzie HTTP: to żądanie nie ma autoryzacji do wykonania tego błędu operacji, ponieważ komputer nie znajduje się w podsieci Prywatnej sieci wirtualnej MyVirtualNetwork.

Czyszczenie zasobów

Gdy grupa zasobów nie jest już potrzebna, możesz użyć polecenia Remove-AzResourceGroup , aby usunąć grupę zasobów i wszystkie zawarte w niej zasoby:

Remove-AzResourceGroup -Name myResourceGroup -Force

Następne kroki

W tym artykule włączono punkt końcowy usługi dla podsieci sieci wirtualnej. Wiesz teraz, że punkty końcowe usługi można włączyć dla zasobów wdrożonych w wielu usługach platformy Azure. Zostało utworzone konto usługi Azure Storage i dostęp sieciowy do konta magazynu został ograniczony tylko do zasobów w podsieci sieci wirtualnej. Aby dowiedzieć się więcej na temat punktów końcowych usług, zobacz Service endpoints overview (Omówienie punktów końcowych usługi) i Manage subnets (Zarządzanie podsieciami).

Jeśli masz wiele sieci wirtualnych w ramach Twojego konta, możesz chcieć połączyć ze sobą dwie sieci wirtualne, aby zasoby w każdej sieci wirtualnej mogły komunikować się ze sobą. Aby dowiedzieć się, jak to zrobić, zobacz Połączenie sieci wirtualne.