Ograniczanie dostępu sieciowego do zasobów PaaS przy użyciu punktów końcowych usługi sieci wirtualnej przy użyciu interfejsu wiersza polecenia platformy Azure

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 platformy Azure.

Wymagania wstępne

  • Ten artykuł wymaga wersji 2.0.28 lub nowszej interfejsu wiersza polecenia platformy Azure. W przypadku korzystania z usługi Azure Cloud Shell najnowsza wersja jest już zainstalowana.

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 az group create. W poniższym przykładzie tworzona jest grupa zasobów o nazwie myResourceGroup w lokalizacji eastus.

az group create \
  --name myResourceGroup \
  --location eastus

Utwórz sieć wirtualną z jedną podsiecią za pomocą polecenia az network vnet create.

az network vnet create \
  --name myVirtualNetwork \
  --resource-group myResourceGroup \
  --address-prefix 10.0.0.0/16 \
  --subnet-name Public \
  --subnet-prefix 10.0.0.0/24

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 az network vnet list-endpoint-services. 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ę punktem końcowym usługi.

az network vnet list-endpoint-services \
  --location eastus \
  --out table

Utwórz dodatkową podsieć w sieci wirtualnej za pomocą polecenia az network vnet subnet create. W tym przykładzie dla podsieci jest tworzony punkt końcowy usługi Microsoft.Storage:

az network vnet subnet create \
  --vnet-name myVirtualNetwork \
  --resource-group myResourceGroup \
  --name Private \
  --address-prefix 10.0.1.0/24 \
  --service-endpoints Microsoft.Storage

Ograniczanie dostępu sieciowego dla podsieci

Utwórz sieciową grupę zabezpieczeń za pomocą polecenia az network nsg create. Poniższy przykład tworzy sieciową grupę zabezpieczeń o nazwie myNsgPrivate.

az network nsg create \
  --resource-group myResourceGroup \
  --name myNsgPrivate

Skojarz sieciowa grupa zabezpieczeń z podsiecią Prywatną za pomocą polecenia az network vnet subnet update. Poniższy przykład kojarzy sieciowa grupa zabezpieczeń myNsgPrivate z podsiecią Private :

az network vnet subnet update \
  --vnet-name myVirtualNetwork \
  --name Private \
  --resource-group myResourceGroup \
  --network-security-group myNsgPrivate

Utwórz reguły zabezpieczeń za pomocą polecenia az network nsg rule create. Następująca reguła zezwala na dostęp wychodzący do publicznych adresów IP przypisanych do usługi Azure Storage:

az network nsg rule create \
  --resource-group myResourceGroup \
  --nsg-name myNsgPrivate \
  --name Allow-Storage-All \
  --access Allow \
  --protocol "*" \
  --direction Outbound \
  --priority 100 \
  --source-address-prefix "VirtualNetwork" \
  --source-port-range "*" \
  --destination-address-prefix "Storage" \
  --destination-port-range "*"

Każda sieciowa grupa zabezpieczeń zawiera kilka domyślnych reguł zabezpieczeń. Reguła, która następuje po zastąpieniu domyślnej reguły zabezpieczeń, która zezwala na dostęp wychodzący do wszystkich publicznych adresów IP. Opcja destination-address-prefix "Internet" uniemożliwia dostęp wychodzący 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.

az network nsg rule create \
  --resource-group myResourceGroup \
  --nsg-name myNsgPrivate \
  --name Deny-Internet-All \
  --access Deny \
  --protocol "*" \
  --direction Outbound \
  --priority 110 \
  --source-address-prefix "VirtualNetwork" \
  --source-port-range "*" \
  --destination-address-prefix "Internet" \
  --destination-port-range "*"

Poniższa reguła zezwala na ruch SSH przychodzący do podsieci z dowolnego miejsca. Reguła zastępuje domyślną regułę zabezpieczeń, która zakazuje całego ruchu przychodzącego z Internetu. Protokół SSH jest dozwolony w podsieci, aby można było przetestować łączność w późniejszym kroku.

az network nsg rule create \
  --resource-group myResourceGroup \
  --nsg-name myNsgPrivate \
  --name Allow-SSH-All \
  --access Allow \
  --protocol Tcp \
  --direction Inbound \
  --priority 120 \
  --source-address-prefix "*" \
  --source-port-range "*" \
  --destination-address-prefix "VirtualNetwork" \
  --destination-port-range "22"

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 za pomocą polecenia az storage account create. 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>"

az storage account create \
  --name $storageAcctName \
  --resource-group myResourceGroup \
  --sku Standard_LRS \
  --kind StorageV2

Po utworzeniu konta magazynu pobierz parametry połączenia dla konta magazynu do zmiennej za pomocą polecenia az storage account show-connection-string. Parametry połączenia służy do tworzenia udziału plików w późniejszym kroku.

saConnectionString=$(az storage account show-connection-string \
  --name $storageAcctName \
  --resource-group myResourceGroup \
  --query 'connectionString' \
  --out tsv)

Wyświetl zawartość zmiennej i zanotuj wartość AccountKey zwróconą w danych wyjściowych, ponieważ jest używana w późniejszym kroku.

echo $saConnectionString

Tworzenie udziału plików w ramach konta magazynu

Utwórz udział plików na koncie magazynu za pomocą polecenia az storage share create. W późniejszym kroku ten udział plików jest instalowany w celu potwierdzenia dostępu sieciowego do niego.

az storage share create \
  --name my-file-share \
  --quota 2048 \
  --connection-string $saConnectionString > /dev/null

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 az storage account update. Kiedy dostęp sieciowy jest blokowany, konto magazynu nie jest dostępne z żadnej sieci.

az storage account update \
  --name $storageAcctName \
  --resource-group myResourceGroup \
  --default-action Deny

Włączanie dostępu sieciowego z podsieci

Zezwalaj na dostęp sieciowy do konta magazynu z podsieci Prywatnej za pomocą polecenia az storage account network-rule add.

az storage account network-rule add \
  --resource-group myResourceGroup \
  --account-name $storageAcctName \
  --vnet-name myVirtualNetwork \
  --subnet Private

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 az vm create. Jeśli klucze SSH nie istnieją jeszcze w domyślnej lokalizacji kluczy, to polecenie je utworzy. Aby użyć określonego zestawu kluczy, użyj opcji --ssh-key-value.

az vm create \
  --resource-group myResourceGroup \
  --name myVmPublic \
  --image Ubuntu2204 \
  --vnet-name myVirtualNetwork \
  --subnet Public \
  --generate-ssh-keys

W ciągu kilku minut zostanie utworzona maszyna wirtualna. Po utworzeniu maszyny wirtualnej interfejs wiersza polecenia platformy Azure wyświetla informacje podobne do następującego przykładu:

{
  "fqdns": "",
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVmPublic",
  "location": "eastus",
  "macAddress": "00-0D-3A-23-9A-49",
  "powerState": "VM running",
  "privateIpAddress": "10.0.0.4",
  "publicIpAddress": "13.90.242.231",
  "resourceGroup": "myResourceGroup"
}

Zanotuj wartość publicIpAddress w zwróconych danych wyjściowych. Ten adres jest używany do uzyskiwania dostępu do maszyny wirtualnej z Internetu w późniejszym kroku.

Tworzenie drugiej maszyny wirtualnej

az vm create \
  --resource-group myResourceGroup \
  --name myVmPrivate \
  --image Ubuntu2204 \
  --vnet-name myVirtualNetwork \
  --subnet Private \
  --generate-ssh-keys

W ciągu kilku minut zostanie utworzona maszyna wirtualna. Po utworzeniu zanotuj zwrócone dane wyjściowe publicIpAddress . Ten adres jest używany do uzyskiwania dostępu do maszyny wirtualnej z Internetu w późniejszym kroku.

Potwierdzanie dostępu do konta magazynu

Połączenie SSH z maszyną wirtualną myVmPrivate . Zastąp ciąg publicIpAddress> publicznym adresem IP maszyny wirtualnej myVmPrivate.<

ssh <publicIpAddress>

Utwórz folder dla punktu instalacji:

sudo mkdir /mnt/MyAzureFileShare

Zainstaluj udział plików platformy Azure w utworzonym katalogu. Przed uruchomieniem następującego polecenia zastąp <storage-account-name> ciąg nazwą konta i <storage-account-key> kluczem pobranym w sekcji Tworzenie konta magazynu.

sudo mount --types cifs //<storage-account-name>.file.core.windows.net/my-file-share /mnt/MyAzureFileShare --options vers=3.0,username=<storage-account-name>,password=<storage-account-key>,dir_mode=0777,file_mode=0777,serverino

Zostanie wyświetlony user@myVmPrivate:~$ monit. Udział plików platformy Azure został pomyślnie zainstalowany w folderze /mnt/MyAzureFileShare.

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

ping bing.com -c 4

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ę SSH z maszyną wirtualną myVmPrivate .

Potwierdzanie odmowy dostępu do konta magazynu

Użyj następującego polecenia, aby utworzyć sesję SSH z maszyną wirtualną myVmPublic . Zastąp <publicIpAddress> ciąg publicznym adresem IP maszyny wirtualnej myVmPublic :

ssh <publicIpAddress>

Utwórz katalog dla punktu instalacji:

sudo mkdir /mnt/MyAzureFileShare

Spróbuj zainstalować udział plików platformy Azure w utworzonym katalogu. W tym artykule założono, że wdrożono najnowszą wersję systemu Ubuntu. Jeśli używasz wcześniejszych wersji systemu Ubuntu, zobacz Instalowanie w systemie Linux , aby uzyskać dodatkowe instrukcje dotyczące instalowania udziałów plików. Przed uruchomieniem następującego polecenia zastąp <storage-account-name> ciąg nazwą konta i <storage-account-key> kluczem pobranym w sekcji Tworzenie konta magazynu:

sudo mount --types cifs //storage-account-name>.file.core.windows.net/my-file-share /mnt/MyAzureFileShare --options vers=3.0,username=<storage-account-name>,password=<storage-account-key>,dir_mode=0777,file_mode=0777,serverino

Odmowa dostępu i występuje mount error(13): Permission denied błąd, 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ę SSH z maszyną wirtualną myVmPublic .

Na komputerze spróbuj wyświetlić udziały na koncie magazynu za pomocą polecenia az storage share list. Zastąp <account-name> wartości i <account-key> nazwą konta magazynu i kluczem z sekcji Tworzenie konta magazynu:

az storage share list \
  --account-name <account-name> \
  --account-key <account-key>

Odmowa dostępu i zostanie wyświetlone żądanie To żądanie nie jest autoryzowane 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, użyj polecenia az group delete , aby usunąć grupę zasobów i wszystkie zawarte w niej zasoby.

az group delete --name myResourceGroup --yes

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.