Omezení síťového přístupu k prostředkům PaaS pomocí koncových bodů služby virtuální sítě pomocí Azure CLI

Koncové body služby pro virtuální síť umožňují omezení síťového přístupu k prostředkům některých služeb Azure na podsíť virtuální sítě. Můžete také odebrat internetový přístup k prostředkům. Koncové body služeb poskytují přímé připojení z vaší virtuální sítě k podporovaným službám Azure a umožňují pro přístup ke službám Azure použít privátní adresní prostor virtuální sítě. Provoz směřující do prostředků Azure prostřednictvím koncových bodů služby zůstává vždy v páteřní síti Microsoft Azure. V tomto článku získáte informace o těchto tématech:

  • Vytvoření virtuální sítě s jednou podsítí
  • Přidání podsítě a povolení koncového bodu služby
  • Vytvoření prostředku Azure a povolení síťového přístupu k tomuto prostředku pouze z podsítě
  • Nasazení virtuálního počítače do každé podsítě
  • Ověření přístupu k prostředku z podsítě
  • Ověření odepření přístupu k prostředku z podsítě a internetu

Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet Azure před tím, než začnete.

Předpoklady

  • Tento článek vyžaduje verzi 2.0.28 nebo novější azure CLI. Pokud používáte Azure Cloud Shell, je už nainstalovaná nejnovější verze.

Vytvoření virtuální sítě

Před vytvořením virtuální sítě musíte vytvořit skupinu prostředků pro virtuální síť a všechny ostatní prostředky vytvořené v tomto článku. Vytvořte skupinu prostředků pomocí příkazu az group create. Následující příklad vytvoří skupinu prostředků myResourceGroup v umístění eastus.

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

Vytvořte virtuální síť s jednou podsítí pomocí příkazu 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

Povolení koncového bodu služby

Koncové body služby můžete povolit jenom pro služby, které podporují koncové body služby. Zobrazte služby s povoleným koncovým bodem služby dostupné v umístění Azure pomocí příkazu az network vnet list-endpoint-services. Následující příklad vrátí seznam služeb s povolenými koncovými body služby, které jsou k dispozici v oblasti eastus . Seznam vrácených služeb se časem zvětšuje, protože více služeb Azure se stane povoleným koncovým bodem služby.

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

Vytvořte ve virtuální síti další podsíť pomocí příkazu az network vnet subnet create. V tomto příkladu se pro podsíť vytvoří koncový bod služby 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

Omezení síťového přístupu pro podsíť

Vytvořte skupinu zabezpečení sítě pomocí příkazu az network nsg create. Následující příklad vytvoří skupinu zabezpečení sítě myNsgPrivate.

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

Přidružte skupinu zabezpečení sítě k privátní podsíti pomocí příkazu az network vnet subnet update. Následující příklad přidruží skupinu zabezpečení sítě myNsgPrivate k privátní podsíti:

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

Vytvořte pravidla zabezpečení pomocí příkazu az network nsg rule create. Následující pravidlo umožňuje odchozí přístup k veřejným IP adresům přiřazeným ke službě 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ždá skupina zabezpečení sítě obsahuje několik výchozích pravidel zabezpečení. Následující pravidlo přepíše výchozí pravidlo zabezpečení, které umožňuje odchozí přístup ke všem veřejným IP adresám. Tato destination-address-prefix "Internet" možnost odepře odchozí přístup ke všem veřejným IP adresám. Předchozí pravidlo toto pravidlo přepíše kvůli vyšší prioritě, což umožňuje přístup k veřejným IP adresám služby 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 "*"

Následující pravidlo umožňuje příchozí provoz SSH do podsítě odkudkoli. Toto pravidlo přepíše výchozí pravidlo zabezpečení, které zakazuje veškerý příchozí provoz z internetu. SSH je pro podsíť povolená, aby bylo možné připojení otestovat v pozdějším 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"

Omezení síťového přístupu k prostředku

Kroky potřebné k omezení síťového přístupu k prostředkům vytvořeným prostřednictvím služeb Azure povolených v koncových bodech se u jednotlivých služeb liší. Konkrétní kroky pro jednotlivé služby najdete v dokumentaci příslušné služby. Zbývající část tohoto článku obsahuje postup omezení síťového přístupu pro účet Azure Storage, například.

Vytvoření účtu úložiště

Vytvořte účet úložiště Azure pomocí příkazu az storage account create. Nahraďte <replace-with-your-unique-storage-account-name> názvem, který je jedinečný ve všech umístěních Azure, o délce 3 až 24 znaků, a to pouze čísly a malá písmena.

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

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

Po vytvoření účtu úložiště načtěte připojovací řetězec pro účet úložiště do proměnné pomocí příkazu az storage account show-connection-string. Připojovací řetězec slouží k vytvoření sdílené složky v pozdějším kroku.

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

Zobrazte obsah proměnné a poznamenejte si hodnotu AccountKey vrácenou ve výstupu, protože se používá v pozdějším kroku.

echo $saConnectionString

Vytvoření sdílené složky v účtu úložiště

Vytvořte sdílenou složku v účtu úložiště pomocí příkazu az storage share create. V pozdějším kroku se tato sdílená složka připojí k potvrzení síťového přístupu k ní.

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

Odepření veškerého síťového přístupu k účtu úložiště

Účty úložiště ve výchozím nastavení přijímají síťová připojení z klientů v jakékoli síti. Pokud chcete omezit přístup k vybraným sítím, změňte výchozí akci na Odepřít pomocí příkazu az storage account update. Jakmile je přístup k síti zakázán, účet úložiště není přístupný ze žádné sítě.

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

Povolení síťového přístupu z podsítě

Povolte síťový přístup k účtu úložiště z privátní podsítě pomocí příkazu az storage account network-rule add.

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

Vytvoření virtuálních počítačů

Pokud chcete otestovat síťový přístup k účtu úložiště, nasaďte do každé podsítě virtuální počítač.

Vytvoření prvního virtuálního počítače

Vytvořte virtuální počítač ve veřejné podsíti pomocí příkazu az vm create. Pokud ve výchozím umístění klíčů ještě neexistují klíče SSH, příkaz je vytvoří. Chcete-li použít konkrétní sadu klíčů, použijte možnost --ssh-key-value.

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

Vytvoření virtuálního počítače trvá několik minut. Po vytvoření virtuálního počítače se v Azure CLI zobrazí podobné informace jako v následujícím příkladu:

{
  "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"
}

Poznamenejte si publicIpAddress ve vráceném výstupu. Tato adresa se používá pro přístup k virtuálnímu počítači z internetu v pozdějším kroku.

Vytvoření druhého virtuálního počítače

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

Vytvoření virtuálního počítače trvá několik minut. Po vytvoření si poznamenejte publicIpAddress ve vráceném výstupu. Tato adresa se používá pro přístup k virtuálnímu počítači z internetu v pozdějším kroku.

Ověření přístupu k účtu úložiště

Připojte se pomocí SSH k virtuálnímu počítači myVmPrivate . Nahraďte publicIpAddress> veřejnou IP adresou vašeho virtuálního počítače myVmPrivate.<

ssh <publicIpAddress>

Vytvořte složku pro přípojný bod:

sudo mkdir /mnt/MyAzureFileShare

Připojte sdílenou složku Azure k vytvořenému adresáři. Před spuštěním následujícího příkazu nahraďte <storage-account-name> názvem účtu a <storage-account-key> klíčem, který jste získali v části Vytvoření účtu úložiště.

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

Zobrazí se user@myVmPrivate:~$ výzva. Sdílená složka Azure se úspěšně připojila k /mnt/MyAzureFileShare.

Ověřte, že virtuální počítač nemá žádné odchozí připojení k žádným jiným veřejným IP adresům:

ping bing.com -c 4

Neobdržíte žádné odpovědi, protože skupina zabezpečení sítě přidružená k podsíti Private nepovoluje odchozí přístup k jiným veřejným IP adresám, než jsou adresy přiřazené službě Azure Storage.

Ukončete relaci SSH k virtuálnímu počítači myVmPrivate .

Ověření odepření přístupu k účtu úložiště

Pomocí následujícího příkazu vytvořte relaci SSH s virtuálním počítačem myVmPublic . Nahraďte <publicIpAddress> veřejnou IP adresou vašeho virtuálního počítače myVmPublic :

ssh <publicIpAddress>

Vytvořte adresář pro přípojný bod:

sudo mkdir /mnt/MyAzureFileShare

Pokuste se připojit sdílenou složku Azure k vytvořenému adresáři. Tento článek předpokládá, že jste nasadili nejnovější verzi Ubuntu. Pokud používáte starší verze Ubuntu, další pokyny k připojení sdílených složek najdete v tématu Připojení v Linuxu . Před spuštěním následujícího příkazu nahraďte <storage-account-name> názvem účtu a <storage-account-key> klíčem, který jste získali v části Vytvoření účtu úložiště:

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

Přístup byl odepřen a zobrazí se mount error(13): Permission denied chyba, protože virtuální počítač myVmPublic je nasazený v rámci veřejné podsítě. Podsíť Public nemá povolený koncový bod služby pro Azure Storage a účet úložiště umožňuje síťový přístup pouze z podsítě Private, a ne z podsítě Public.

Ukončete relaci SSH k virtuálnímu počítači myVmPublic .

Z počítače se pokuste zobrazit sdílené složky v účtu úložiště pomocí příkazu az storage share list. Nahraďte a nahraďte <account-name> názvem a klíčem účtu úložiště v části Vytvoření účtu<account-key> úložiště:

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

Přístup byl odepřen a tento požadavek nemá oprávnění k provedení této operace , protože váš počítač není v privátní podsíti virtuální sítě MyVirtualNetwork .

Vyčištění prostředků

Pokud už ji nepotřebujete, pomocí příkazu az group delete odeberte skupinu prostředků a všechny prostředky, které obsahuje.

az group delete --name myResourceGroup --yes

Další kroky

V tomto článku jste povolili koncový bod služby pro podsíť virtuální sítě. Dozvěděli jste se, že koncové body služeb je možné povolit pro prostředky nasazené pomocí několika služeb Azure. Vytvořili jste účet služby Azure Storage a omezili jste síťový přístup k účtu úložiště pouze na prostředky v rámci podsítě virtuální sítě. Další informace o koncových bodech služeb najdete v tématech Přehled koncových bodů služeb a Správa podsítí.

Pokud ve svém účtu máte více virtuálních sítí, možná budete chtít propojit dvě virtuální sítě, aby mezi sebou mohly komunikovat prostředky v obou virtuálních sítích. Postup najdete v tématu Připojení virtuálních sítích.