Begränsa nätverksåtkomsten till PaaS-resurser med tjänstslutpunkter för virtuella nätverk med hjälp av Azure CLI

Med tjänstslutpunkter för virtuellt nätverk kan du begränsa nätverksåtkomsten till vissa Azure-tjänsters resurser till ett undernät för virtuella datorer. Du kan också ta bort resursernas internetåtkomst. Tjänstslutpunkterna möjliggör direktanslutning från ditt virtuella nätverk till Azure-tjänster som stöds, så att du kan använda det privata adressutrymmet i det virtuella nätverket för åtkomst till Azure-tjänsterna. Trafik till Azure-resurser genom tjänstslutpunkterna finns alltid kvar i Microsoft Azure-stamnätverket. I den här artikeln kan du se hur du:

  • Skapa ett virtuellt nätverk med ett undernät
  • Lägga till ett undernät och aktivera en tjänstslutpunkt
  • Skapa en Azure-resurs och tillåt nätverksåtkomst till den från enbart ett undernät
  • Distribuera en virtuell dator (VM) till varje undernät
  • Bekräfta åtkomst till en resurs från ett undernät
  • Bekräfta att åtkomst nekas för en resurs från ett undernät och internet

Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt Azure-konto innan du börjar.

Förutsättningar

  • Den här artikeln kräver version 2.0.28 eller senare av Azure CLI. Om du använder Azure Cloud Shell är den senaste versionen redan installerad.

Skapa ett virtuellt nätverk

Innan du skapar ett virtuellt nätverk måste du skapa en resursgrupp för det virtuella nätverket och alla andra resurser som skapas i den här artikeln. Skapa en resursgrupp med az group create. I följande exempel skapas en resursgrupp med namnet myResourceGroup i regionen eastus.

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

Skapa ett virtuellt nätverk med ett undernät med 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

Aktivera en tjänstslutpunkt

Du kan endast aktivera tjänstslutpunkter för tjänster som stöder tjänstslutpunkter. Visa tjänstslutpunktsaktiverade tjänster som är tillgängliga på en Azure-plats med az network vnet list-endpoint-services. I följande exempel returneras en lista över tjänstslutpunktsaktiverade tjänster som är tillgängliga i regionen eastus . Listan över tjänster som returneras växer med tiden när fler Azure-tjänster blir tjänstslutpunkter aktiverade.

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

Skapa ytterligare ett undernät i det virtuella nätverket med az network vnet subnet create. I det här exemplet skapas en tjänstslutpunkt för Microsoft.Storage för undernätet:

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

Begränsa nätverksåtkomst för ett undernät

Skapa en nätverkssäkerhetsgrupp med az network nsg create. I följande exempel skapas en nätverkssäkerhetsgrupp med namnet myNsgPrivate.

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

Associera nätverkssäkerhetsgruppen med det privata undernätet med az network vnet subnet update. I följande exempel associeras nätverkssäkerhetsgruppen myNsgPrivate med det privata undernätet:

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

Skapa säkerhetsregler med az network nsg rule create. Regeln som följer tillåter utgående åtkomst till de offentliga IP-adresser som tilldelats Till Azure Storage-tjänsten:

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 "*"

Varje nätverkssäkerhetsgrupp innehåller flera standardsäkerhetsregler. Regeln som följer åsidosätter en standardsäkerhetsregel som tillåter utgående åtkomst till alla offentliga IP-adresser. Alternativet destination-address-prefix "Internet" nekar utgående åtkomst till alla offentliga IP-adresser. Den tidigare regeln åsidosätter den här regeln på grund av dess högre prioritet, vilket ger åtkomst till de offentliga IP-adresserna för 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 "*"

Följande regel tillåter inkommande SSH-trafik till undernätet var som helst. Regeln åsidosätter en standardsäkerhetsregel som nekar all inkommande trafik från internet. SSH tillåts till undernätet så att anslutningen kan testas i ett senare steg.

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"

Begränsa nätverksåtkomst till en resurs

De steg som behövs för att begränsa nätverksåtkomsten till resurser som har skapats via Azure-tjänster som är aktiverade för tjänstslutpunkter varierar från tjänst till tjänst. Läs dokumentationen för enskilda tjänster för specifika åtgärder för varje tjänst. Resten av den här artikeln innehåller steg för att begränsa nätverksåtkomsten för ett Azure Storage-konto, till exempel.

Skapa ett lagringskonto

Skapa ett Azure Storage-konto med az storage account create. Ersätt <replace-with-your-unique-storage-account-name> med ett namn som är unikt på alla Azure-platser, mellan 3 och 24 tecken långt, med endast siffror och gemener.

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

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

När lagringskontot har skapats hämtar du anslutningssträng för lagringskontot till en variabel med az storage account show-connection-string. Anslutningssträng används för att skapa en filresurs i ett senare steg.

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

Visa innehållet i variabeln och notera värdet för AccountKey som returneras i utdata, eftersom det används i ett senare steg.

echo $saConnectionString

Skapa en filresurs i lagringskontot

Skapa en filresurs i lagringskontot med az storage share create. I ett senare steg monteras den här filresursen för att bekräfta nätverksåtkomsten till den.

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

Neka all nätverksåtkomst till ett lagringskonto

Som standard godkänner lagringskonton nätverksanslutningar från klienter i alla nätverk. Om du vill begränsa åtkomsten till valda nätverk ändrar du standardåtgärden till Neka med az storage account update. När nätverksåtkomsten nekas är lagringskontot inte tillgängligt från något nätverk.

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

Aktivera nätverksåtkomst från ett undernät

Tillåt nätverksåtkomst till lagringskontot från det privata undernätet med az storage account network-rule add.

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

Skapa virtuella datorer

Om du vill testa nätverksåtkomsten till ett lagringskonto distribuerar du en virtuell dator till varje undernät.

Skapa din första virtuella dator

Skapa en virtuell dator i det offentliga undernätet med az vm create. Om det inte redan finns SSH-nycklar på en standardnyckelplats skapar kommandot dem. Om du vill använda en specifik uppsättning nycklar använder du alternativet --ssh-key-value.

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

Det tar några minuter att skapa den virtuella datorn. När den virtuella datorn har skapats visar Azure CLI information som liknar följande exempel:

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

Anteckna publicIpAddress i de returnerade utdata. Den här adressen används för att komma åt den virtuella datorn från Internet i ett senare steg.

Skapa den andra virtuella datorn

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

Det tar några minuter att skapa den virtuella datorn. När du har skapat bör du anteckna publicIpAddress i de utdata som returneras. Den här adressen används för att komma åt den virtuella datorn från Internet i ett senare steg.

Bekräfta åtkomst till lagringskontot

SSH till den virtuella datorn myVmPrivate . Ersätt <publicIpAddress> med den offentliga IP-adressen för den virtuella datorn myVmPrivate .

ssh <publicIpAddress>

Skapa en mapp för en monteringspunkt:

sudo mkdir /mnt/MyAzureFileShare

Montera Azure-filresursen i den katalog som du skapade. Innan du kör följande kommando ersätter <storage-account-name> du med kontonamnet och <storage-account-key> med nyckeln som du hämtade i Skapa ett lagringskonto.

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

Du får kommandotolken user@myVmPrivate:~$ . Azure-filresursen har monterats på /mnt/MyAzureFileShare.

Bekräfta att den virtuella datorn inte har någon utgående anslutning till andra offentliga IP-adresser:

ping bing.com -c 4

Du får inga svar eftersom nätverkssäkerhetsgruppen som är kopplad till det privata undernätet inte tillåter utgående åtkomst till offentliga IP-adresser förutom de adresser som är kopplade till Azure Storage-tjänsten.

Avsluta SSH-sessionen till den virtuella datorn myVmPrivate .

Bekräfta att åtkomst till lagringskontot nekas

Använd följande kommando för att skapa en SSH-session med den virtuella datorn myVmPublic . Ersätt <publicIpAddress> med den offentliga IP-adressen för den virtuella datorn myVmPublic :

ssh <publicIpAddress>

Skapa en katalog för en monteringspunkt:

sudo mkdir /mnt/MyAzureFileShare

Försök att montera Azure-filresursen till den katalog som du skapade. Den här artikeln förutsätter att du har distribuerat den senaste versionen av Ubuntu. Om du använder tidigare versioner av Ubuntu kan du läsa Mer information om hur du monterar filresurser finns i Montera på Linux . Innan du kör följande kommando ersätter <storage-account-name> du med kontonamnet och <storage-account-key> med nyckeln som du hämtade i Skapa ett lagringskonto:

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

Åtkomst nekas och du får ett mount error(13): Permission denied fel eftersom den virtuella datorn myVmPublic distribueras i det offentliga undernätet. Det offentliga undernätet har ingen tjänstslutpunkt aktiverad för Azure Storage, och lagringskontot tillåter endast nätverksåtkomst från det privata undernätet, inte det offentliga.

Avsluta SSH-sessionen till den virtuella datorn myVmPublic .

Från datorn försöker du visa resurserna i lagringskontot med az storage share list. Ersätt <account-name> och <account-key> med lagringskontots namn och nyckel från Skapa ett lagringskonto:

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

Åtkomst nekas och du får en Den här begäran har inte behörighet att utföra det här åtgärdsfelet , eftersom datorn inte finns i det privata undernätet i det virtuella nätverket MyVirtualNetwork .

Rensa resurser

När den inte längre behövs använder du az group delete för att ta bort resursgruppen och alla resurser som den innehåller.

az group delete --name myResourceGroup --yes

Nästa steg

I den här artikeln har du aktiverat en tjänstslutpunkt för ett virtuellt nätverksundernät. Du har lärt dig att tjänstslutpunkter kan aktiveras för resurser som distribueras med flera Azure-tjänster. Du har skapat ett Azure Storage-konto och begränsat nätverksåtkomst för lagringskontot till enbart resurser inom ett undernät för ett virtuellt nätverk. Om du vill veta mer om tjänstslutpunkter går du till Översikt över tjänstslutpunkter och Hantera undernät.

Om du har flera virtuella nätverk i ditt konto kanske du vill ansluta två virtuella nätverk så att resurserna i vart och ett kan kommunicera med varandra. Mer information finns i Anslut virtuella nätverk.