Netwerktoegang tot PaaS-resources beperken met service-eindpunten voor virtuele netwerken met behulp van de Azure CLI

Met service-eindpunten voor virtuele netwerken kunt u de netwerktoegang tot sommige Azure-servicebronnen beperken tot een subnet van een virtueel netwerk. U kunt ook internettoegang tot de resources verwijderen. Service-eindpunten zorgen voor een rechtstreekse verbinding van uw virtuele netwerk met ondersteunde Azure-services, zodat u de privéadresruimte van uw virtuele netwerk kunt gebruiken voor toegang tot de Azure-services. Verkeer dat bestemd is voor Azure-resources via de service-eindpunten blijft altijd op het Microsoft Azure-backbone-netwerk. In dit artikel leert u het volgende:

  • Een virtueel netwerk maken met één subnet
  • Een subnet toevoegen en een service-eindpunt inschakelen
  • Een Azure-resource maken en alleen toegang ertoe toestaan vanaf een subnet
  • Een virtuele machine (VM) implementeren op elk subnet
  • Toegang tot een resource vanaf een subnet bevestigen
  • Bevestigen dat toegang wordt geweigerd aan een resource vanaf een subnet en internet

Als u geen Azure-abonnement hebt, kunt u een gratis Azure-account maken voordat u begint.

Vereisten

  • Voor dit artikel is versie 2.0.28 of hoger van Azure CLI vereist. Als u Azure Cloud Shell gebruikt, is de nieuwste versie al geïnstalleerd.

Een virtueel netwerk maken

Voordat u een virtueel netwerk maakt, moet u een resourcegroep maken voor het virtuele netwerk en alle andere resources die in dit artikel zijn gemaakt. Maak een resourcegroep maken met az group create. In het volgende voorbeeld wordt een resourcegroep met de naam myResourceGroup gemaakt op de locatie VS - oost.

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

Maak een virtueel netwerk met één subnet met 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

Een service-eindpunt inschakelen

U kunt service-eindpunten alleen inschakelen voor services die service-eindpunten ondersteunen. Services met service-eindpunten weergeven die beschikbaar zijn op een Azure-locatie met az network vnet list-endpoint-services. In het volgende voorbeeld wordt een lijst met services met service-eindpunten geretourneerd die beschikbaar zijn in de regio Eastus . De lijst met geretourneerde services neemt na verloop van tijd toe, omdat meer Azure-services service-eindpunten worden ingeschakeld.

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

Maak een extra subnet in het virtuele netwerk met az network vnet subnet create. In dit voorbeeld wordt een service-eindpunt voor Microsoft.Storage gemaakt voor het subnet:

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

Netwerktoegang voor een subnet beperken

Maak een netwerkbeveiligingsgroep met az network nsg create. In het volgende voorbeeld wordt een netwerkbeveiligingsgroep met de naam myNsgPrivate gemaakt.

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

Koppel de netwerkbeveiligingsgroep aan het privésubnet met az network vnet subnet update. In het volgende voorbeeld wordt de netwerkbeveiligingsgroep myNsgPrivate gekoppeld aan het privésubnet :

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

Maak beveiligingsregels met az network nsg rule create. De volgende regel staat uitgaande toegang toe tot de openbare IP-adressen die zijn toegewezen aan de Azure Storage-service:

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

Elke netwerkbeveiligingsgroep bevat verschillende standaardbeveiligingsregels. De regel die volgt overschrijft een standaardbeveiligingsregel waarmee uitgaande toegang tot alle openbare IP-adressen wordt toegestaan. De destination-address-prefix "Internet" optie weigert uitgaande toegang tot alle openbare IP-adressen. De vorige regel overschrijft deze regel vanwege de hogere prioriteit, waardoor toegang tot de openbare IP-adressen van Azure Storage mogelijk is.

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

Met de volgende regel kan SSH-verkeer binnenkomend naar het subnet vanaf elke locatie. De regel overschrijft een standaardbeveiligingsregel waardoor al het inkomende verkeer van internet wordt geweigerd. SSH is toegestaan voor het subnet, zodat de connectiviteit in een latere stap kan worden getest.

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"

Netwerktoegang tot een resource beperken

De stappen die nodig zijn om netwerktoegang te beperken tot resources die zijn gemaakt met Azure-services waarvoor service-eindpunten zijn ingeschakeld, verschillen per service. Zie de documentatie voor afzonderlijke services voor specifieke stappen voor elke service. De rest van dit artikel bevat stappen voor het beperken van de netwerktoegang voor een Azure Storage-account, bijvoorbeeld.

Een opslagaccount maken

Maak een Azure-opslagaccount met az storage account create. Vervang <replace-with-your-unique-storage-account-name> door een naam die uniek is voor alle Azure-locaties, tussen 3 en 24 tekens lang, met alleen cijfers en kleine letters.

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

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

Nadat het opslagaccount is gemaakt, haalt u de verbindingsreeks voor het opslagaccount op in een variabele met az storage account show-connection-string. De verbindingsreeks wordt gebruikt om in een latere stap een bestandsshare te maken.

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

Bekijk de inhoud van de variabele en noteer de waarde voor AccountKey die in de uitvoer is geretourneerd, omdat deze in een latere stap wordt gebruikt.

echo $saConnectionString

Een bestandsshare maken in het opslagaccount

Maak een bestandsshare in het opslagaccount met az storage share create. In een latere stap wordt deze bestandsshare gekoppeld om de netwerktoegang te bevestigen.

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

Alle netwerktoegang tot een opslagaccount weigeren

Standaard accepteren opslagaccounts netwerkverbindingen van clients in ieder netwerk. Als u de toegang tot geselecteerde netwerken wilt beperken, wijzigt u de standaardactie in Weigeren met az storage account update. Nadat de netwerktoegang is geweigerd, is het opslagaccount niet via elk netwerk toegankelijk.

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

Netwerktoegang vanuit een subnet inschakelen

Netwerktoegang tot het opslagaccount toestaan vanuit het privésubnet met az storage account network-rule add.

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

Virtuele machines maken

Implementeer een VM in elk subnet om de netwerktoegang tot een opslagaccount te testen.

De eerste virtuele machine maken

Maak een virtuele machine in het openbare subnet met az vm create. Als SSH-sleutels niet al bestaan op de standaardlocatie van de sleutel, worden ze met deze opdracht gemaakt. Als u een specifieke set sleutels wilt gebruiken, gebruikt u de optie --ssh-key-value.

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

Het maken van de virtuele machine duurt een paar minuten. Nadat de VIRTUELE machine is gemaakt, toont de Azure CLI informatie die vergelijkbaar is met het volgende voorbeeld:

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

Noteer het publicIpAddress in de geretourneerde uitvoer. Dit adres wordt in een latere stap gebruikt voor toegang tot de virtuele machine vanaf internet.

De tweede virtuele machine maken

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

Het maken van de virtuele machine duurt een paar minuten. Noteer na het maken het publicIpAddress in de geretourneerde uitvoer. Dit adres wordt in een latere stap gebruikt voor toegang tot de virtuele machine vanaf internet.

Toegang tot opslagaccount bevestigen

SSH in de myVmPrivate-VM . Vervang <publicIpAddress> door het openbare IP-adres van uw myVmPrivate-VM .

ssh <publicIpAddress>

Maak een map voor een koppelpunt:

sudo mkdir /mnt/MyAzureFileShare

Koppel de Azure-bestandsshare aan de map die u hebt gemaakt. Voordat u de volgende opdracht uitvoert, vervangt <storage-account-name> u de accountnaam en <storage-account-key> door de sleutel die u hebt opgehaald in Een opslagaccount maken.

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

U ontvangt de user@myVmPrivate:~$ prompt. De Azure-bestandsshare is gekoppeld aan /mnt/MyAzureFileShare.

Controleer of de VIRTUELE machine geen uitgaande connectiviteit heeft met andere openbare IP-adressen:

ping bing.com -c 4

U krijgt geen antwoorden, omdat de netwerkbeveiligingsgroep die is gekoppeld aan het Privé-subnet geen uitgaande toegang toestaat aan andere openbare IP-adressen dan de adressen die zijn toegewezen aan de Azure Storage-service.

Sluit de SSH-sessie af op de myVmPrivate-VM .

Bevestigen dat toegang tot opslagaccount wordt geweigerd

Gebruik de volgende opdracht om een SSH-sessie te maken met de myVmPublic-VM . Vervang <publicIpAddress> door het openbare IP-adres van uw myVmPublic-VM :

ssh <publicIpAddress>

Maak een map voor een koppelpunt:

sudo mkdir /mnt/MyAzureFileShare

Probeer de Azure-bestandsshare te koppelen aan de map die u hebt gemaakt. In dit artikel wordt ervan uitgegaan dat u de nieuwste versie van Ubuntu hebt geïmplementeerd. Als u eerdere versies van Ubuntu gebruikt, raadpleegt u Koppeling op Linux voor aanvullende instructies over het koppelen van bestandsshares. Voordat u de volgende opdracht uitvoert, vervangt <storage-account-name> u de accountnaam en <storage-account-key> door de sleutel die u hebt opgehaald in Een opslagaccount maken:

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

De toegang wordt geweigerd en u ontvangt een mount error(13): Permission denied foutmelding omdat de myVmPublic-VM is geïmplementeerd in het openbare subnet. Het Openbare subnet heeft geen service-eindpunt ingeschakeld voor Azure Storage en het opslagaccount staat alleen netwerktoegang toe van het Privé-subnet, en niet van het Openbaresubnet.

Sluit de SSH-sessie af op de myVmPublic-VM .

Probeer vanaf uw computer de shares in uw opslagaccount te bekijken met az storage share list. Vervang en <account-key> door <account-name> de naam en sleutel van het opslagaccount uit Een opslagaccount maken:

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

De toegang wordt geweigerd en u ontvangt een aanvraag die niet is gemachtigd om deze bewerkingsfout uit te voeren, omdat uw computer zich niet in het privésubnet van het virtuele netwerk MyVirtualNetwork bevindt.

Resources opschonen

Wanneer u deze niet meer nodig hebt, gebruikt u az group delete om de resourcegroep en alle resources die deze bevat te verwijderen.

az group delete --name myResourceGroup --yes

Volgende stappen

In dit artikel hebt u een service-eindpunt ingeschakeld voor een subnet van een virtueel netwerk. U hebt geleerd dat service-eindpunten kunnen worden ingeschakeld voor met meerdere Azure-services geïmplementeerde resources. U hebt een Azure Storage-account gemaakt en netwerktoegang tot het opslagaccount beperkt tot alleen resources binnen een subnet van een virtueel netwerk. Zie voor meer informatie over service-eindpunten Overzicht voor service-eindpunten en Subnetten beheren.

Als u meerdere virtuele netwerken in uw account hebt, kunt u twee virtuele netwerken met elkaar verbinden zodat de resources in beide virtuele netwerken met elkaar kunnen communiceren. Zie Verbinding maken virtuele netwerken voor meer informatie.