Gestire reti virtuali di Azure e macchine virtuali Linux con l'interfaccia della riga di comando di AzureManage Azure Virtual Networks and Linux Virtual Machines with the Azure CLI

Le macchine virtuali di Azure usano la rete di Azure per la comunicazione di rete interna ed esterna.Azure virtual machines use Azure networking for internal and external network communication. Questa esercitazione illustra la distribuzione di due macchine virtuali e la configurazione della rete di Azure per tali VM.This tutorial walks through deploying two virtual machines and configuring Azure networking for these VMs. Gli esempi in questa esercitazione presuppongono che le VM ospitino un'applicazione Web con un back-end di database, ma nell'esercitazione non viene distribuita un'applicazione.The examples in this tutorial assume that the VMs are hosting a web application with a database back-end, however an application is not deployed in the tutorial. In questa esercitazione si apprenderà come:In this tutorial, you learn how to:

  • Creare una rete virtuale e una subnetCreate a virtual network and subnet
  • Creare un indirizzo IP pubblicoCreate a public IP address
  • Creare una VM front-endCreate a front-end VM
  • Proteggono il traffico di reteSecure network traffic
  • Creare una VM back-endCreate a back-end VM

Durante il completamento di questa esercitazione è possibile visualizzare queste risorse create:While completing this tutorial, you can see these resources created:

Rete virtuale con due subnet

  • myVNet: la rete virtuale che le VM usano per comunicare tra loro e con Internet.myVNet - The virtual network that the VMs use to communicate with each other and the internet.
  • myFrontendSubnet: la subnet in myVNet utilizzata dalle risorse front-end.myFrontendSubnet - The subnet in myVNet used by the front-end resources.
  • myPublicIPAddress: l'indirizzo IP pubblico utilizzato per accedere a myFrontendVM da Internet.myPublicIPAddress - The public IP address used to access myFrontendVM from the internet.
  • myFrontentNic: l'interfaccia di rete utilizzata da myFrontendVM per comunicare con myBackendVM.myFrontentNic - The network interface used by myFrontendVM to communicate with myBackendVM.
  • myFrontendVM: la VM utilizzata per la comunicazione tra Internet e myBackendVM.myFrontendVM - The VM used to communicate between the internet and myBackendVM.
  • myBackendNSG: il gruppo di sicurezza di rete che controlla la comunicazione tra myFrontendVM e myBackendVM.myBackendNSG - The network security group that controls communication between the myFrontendVM and myBackendVM.
  • myBackendSubnet: la subnet associata a myBackendNSG e utilizzata dalle risorse back-end.myBackendSubnet - The subnet associated with myBackendNSG and used by the back-end resources.
  • myBackendNic: l'interfaccia di rete utilizzata da myBackendVM per comunicare con myFrontendVM.myBackendNic - The network interface used by myBackendVM to communicate with myFrontendVM.
  • myBackendVM: la VM che usa la porta 22 e 3306 per comunicare con myFrontendVM.myBackendVM - The VM that uses port 22 and 3306 to communicate with myFrontendVM.

Avviare Azure Cloud ShellLaunch Azure Cloud Shell

Azure Cloud Shell è una shell Bash gratuita che può essere eseguita direttamente nel portale di Azure.The Azure Cloud Shell is a free Bash shell that you can run directly within the Azure portal. Include l'interfaccia della riga di comando di Azure preinstallata e configurata per l'uso con l'account.It has the Azure CLI preinstalled and configured to use with your account. Fare clic sul pulsante Cloud Shell nel menu nel riquadro in alto a destra nel portale di Azure.Click the Cloud Shell button on the menu in the upper-right of the Azure portal.

Cloud ShellCloud Shell

Il pulsante avvia una shell interattiva che è possibile usare per eseguire i passaggi di questo argomento:The button launches an interactive shell that you can use to run the steps in this topic:

Screenshot che mostra la finestra di Cloud Shell nel portaleScreenshot showing the Cloud Shell window in the portal

Se si sceglie di installare e usare l'interfaccia della riga di comando in locale, per questa esercitazione è necessario eseguire l'interfaccia della riga di comando di Azure versione 2.0.4 o successiva.If you choose to install and use the CLI locally, this tutorial requires that you are running the Azure CLI version 2.0.4 or later. Eseguire az --version per trovare la versione.Run az --version to find the version. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure 2.0.If you need to install or upgrade, see Install Azure CLI 2.0.

Panoramica della rete per le VMVM networking overview

Le reti virtuali di Azure consentono connessioni di rete sicure tra macchine virtuali, Internet e altri servizi di Azure come il database SQL di Azure.Azure virtual networks enable secure network connections between virtual machines, the internet, and other Azure services such as Azure SQL database. Le reti virtuali sono suddivise in segmenti logici denominati subnet.Virtual networks are broken down into logical segments called subnets. Le subnet vengono usate per controllare il flusso di rete e come limite di sicurezza.Subnets are used to control network flow, and as a security boundary. Quando si distribuisce una VM, questa include in genere un'interfaccia di rete virtuale collegata a una subnet.When deploying a VM, it generally includes a virtual network interface, which is attached to a subnet.

Creare una rete virtuale e una subnetCreate a virtual network and subnet

Per questa esercitazione viene creata una singola rete virtuale con due subnet:For this tutorial, a single virtual network is created with two subnets. una subnet front-end per ospitare un'applicazione Web e una subnet back-end per ospitare un server di database.A front-end subnet for hosting a web application, and a back-end subnet for hosting a database server.

Per poter creare una rete virtuale, creare prima di tutto un gruppo di risorse con az group create.Before you can create a virtual network, create a resource group with az group create. L'esempio seguente crea un gruppo di risorse denominato myRGNetwork nella località eastus.The following example creates a resource group named myRGNetwork in the eastus location.

az group create --name myRGNetwork --location eastus

Creare una rete virtualeCreate virtual network

Usare il comando az network vnet create per creare una rete virtuale.Use the az network vnet create command to create a virtual network. In questo esempio vengono assegnati alla rete il nome mvVNet e il prefisso di indirizzo 10.0.0.0/16.In this example, the network is named mvVNet and is given an address prefix of 10.0.0.0/16. Viene anche creata una subnet con il nome myFrontendSubnet e il prefisso 10.0.1.0/24.A subnet is also created with a name of myFrontendSubnet and a prefix of 10.0.1.0/24. Più avanti in questa esercitazione, a questa subnet verrà connessa una VM front-end.Later in this tutorial a front-end VM is connected to this subnet.

az network vnet create \
  --resource-group myRGNetwork \
  --name myVNet \
  --address-prefix 10.0.0.0/16 \
  --subnet-name myFrontendSubnet \
  --subnet-prefix 10.0.1.0/24

Creare una subnetCreate subnet

Alla rete virtuale viene aggiunta una nuova subnet con il comando az network vnet subnet create.A new subnet is added to the virtual network using the az network vnet subnet create command. In questo esempio vengono assegnati alla subnet il nome myBackendSubnet e il prefisso di indirizzo 10.0.2.0/24.In this example, the subnet is named myBackendSubnet and is given an address prefix of 10.0.2.0/24. Questa subnet verrà usata con tutti i servizi back-end.This subnet is used with all back-end services.

az network vnet subnet create \
  --resource-group myRGNetwork \
  --vnet-name myVNet \
  --name myBackendSubnet \
  --address-prefix 10.0.2.0/24

A questo punto, è stata creata una rete che è stata segmentata in due subnet, una per i servizi front-end e un'altra per i servizi back-end.At this point, a network has been created and segmented into two subnets, one for front-end services, and another for back-end services. Nella sezione successiva, le macchine virtuali verranno create e connesse a queste subnet.In the next section, virtual machines are created and connected to these subnets.

Creare un indirizzo IP pubblicoCreate a public IP address

Un indirizzo IP pubblico consente alle risorse di Azure di essere accessibili in Internet.A public IP address allows Azure resources to be accessible on the internet. Il metodo di allocazione dell'indirizzo IP pubblico può essere configurato come dinamico o statico.The allocation method of the public IP address can be configured as dynamic or static. Per impostazione predefinita, un indirizzo IP pubblico viene allocato in modo dinamico.By default, a public IP address is dynamically allocated. Gli indirizzi IP dinamici vengono rilasciati quando una VM viene deallocata.Dynamic IP addresses are released when a VM is deallocated. Questo comportamento determina la modifica dell'indirizzo IP durante qualsiasi operazione che includa la deallocazione di una VM.This behavior causes the IP address to change during any operation that includes a VM deallocation.

Il metodo di allocazione può essere impostato come statico affinché l'indirizzo IP resti assegnato a una VM anche durante uno stato di deallocazione.The allocation method can be set to static, which ensures that the IP address remains assigned to a VM, even during a deallocated state. Quando si usa un indirizzo IP con allocazione statica, l'indirizzo IP non può essere specificatoWhen using a statically allocated IP address, the IP address itself cannot be specified. e viene invece allocato da un pool di indirizzi disponibili.Instead, it is allocated from a pool of available addresses.

az network public-ip create --resource-group myRGNetwork --name myPublicIPAddress

Quando si crea una VM con il comando az vm create, il metodo di allocazione predefinito dell'indirizzo IP pubblico è il metodo dinamico.When creating a VM with the az vm create command, the default public IP address allocation method is dynamic. Quando si crea una macchina virtuale con il comando az vm create, per assegnare un indirizzo IP pubblico statico includere l'argomento --public-ip-address-allocation static.When creating a virtual machine using the az vm create command, include the --public-ip-address-allocation static argument to assign a static public IP address. Questa operazione non viene illustrata in questa esercitazione, ma nella sezione successiva un indirizzo IP con allocazione dinamica verrà modificato in indirizzo con allocazione statica.This operation is not demonstrated in this tutorial, however in the next section a dynamically allocated IP address is changed to a statically allocated address.

Modificare il metodo di allocazioneChange allocation method

Il metodo di allocazione degli indirizzi IP può essere modificato con il comando az network public-ip update.The IP address allocation method can be changed using the az network public-ip update command. In questo esempio, il metodo di allocazione dell'indirizzo IP della VM front-end viene modificato in statico.In this example, the IP address allocation method of the front-end VM is changed to static.

Per prima cosa, deallocare la VM.First, deallocate the VM.

az vm deallocate --resource-group myRGNetwork --name myFrontendVM

Usare il comando az network public-ip update per aggiornare il metodo di allocazione.Use the az network public-ip update command to update the allocation method. In questo caso, si imposta --allocation-method su static.In this case, the --allocation-method is being set to static.

az network public-ip update --resource-group myRGNetwork --name myPublicIPAddress --allocation-method static

Avviare la VM.Start the VM.

az vm start --resource-group myRGNetwork --name myFrontendVM --no-wait

Nessun indirizzo IP pubblicoNo public IP address

Spesso non è necessario che una VM sia accessibile tramite Internet.Often, a VM does not need to be accessible over the internet. Per creare una VM senza indirizzo IP pubblico, usare l'argomento --public-ip-address "" con due virgolette doppie vuote.To create a VM without a public IP address, use the --public-ip-address "" argument with an empty set of double quotes. Questa configurazione verrà illustrata più avanti in questa esercitazione.This configuration is demonstrated later in this tutorial.

Creare una VM front-endCreate a front-end VM

Usare il comando az vm create per creare la VM denominata myFrontendVM mediante myPublicIPAddress.Use the az vm create command to create the VM named myFrontendVM using myPublicIPAddress.

az vm create \
  --resource-group myRGNetwork \
  --name myFrontendVM \
  --vnet-name myVNet \
  --subnet myFrontendSubnet \
  --nsg myFrontendNSG \
  --public-ip-address myPublicIPAddress \
  --image UbuntuLTS \
  --generate-ssh-keys

Proteggono il traffico di reteSecure network traffic

Un gruppo di sicurezza di rete (NSG) contiene un elenco di regole di sicurezza che consentono o rifiutano il traffico di rete verso le risorse connesse a reti virtuali di Azure.A network security group (NSG) contains a list of security rules that allow or deny network traffic to resources connected to Azure Virtual Networks (VNet). I gruppi di sicurezza di rete possono essere associati a subnet o singole interfacce di rete.NSGs can be associated to subnets or individual network interfaces. Quando un gruppo di sicurezza di rete è associato a un'interfaccia di rete, si applica solo alla VM associata.When an NSG is associated with a network interface, it applies only the associated VM. Quando un gruppo di sicurezza di rete è associato a una subnet, le regole si applicano a tutte le risorse connesse alla subnet.When an NSG is associated to a subnet, the rules apply to all resources connected to the subnet.

Regole dei gruppi di sicurezza di reteNetwork security group rules

Le regole dei gruppi di sicurezza di rete definiscono le porte di rete su cui il traffico viene consentito o negato.NSG rules define networking ports over which traffic is allowed or denied. Le regole possono includere intervalli di indirizzi IP di origine e di destinazione in modo da controllare il traffico tra subnet o sistemi specifici.The rules can include source and destination IP address ranges so that traffic is controlled between specific systems or subnets. Le regole dei gruppi di sicurezza di rete possono includere anche una priorità, compresa tra 1 e 4096.NSG rules also include a priority (between 1—and 4096). Le regole vengono valutate in ordine di priorità.Rules are evaluated in the order of priority. Una regola con priorità 100 viene valutata prima di una con priorità 200.A rule with a priority of 100 is evaluated before a rule with priority 200.

Tutti i gruppi di sicurezza di rete contengono un set di regole predefinite.All NSGs contain a set of default rules. Le regole predefinite non possono essere eliminate, ma poiché hanno la priorità più bassa, è possibile eseguirne l'override con le regole create dall'utente.The default rules cannot be deleted, but because they are assigned the lowest priority, they can be overridden by the rules that you create.

  • Rete virtuale: il traffico che ha origine e termina in una rete virtuale è consentito sia in ingresso che in uscita.Virtual network - Traffic originating and ending in a virtual network is allowed both in inbound and outbound directions.
  • Internet: il traffico in uscita è consentito, mentre il traffico in ingresso viene bloccato.Internet - Outbound traffic is allowed, but inbound traffic is blocked.
  • Servizio di bilanciamento del carico: viene consentito al servizio di bilanciamento del carico di Azure di verificare tramite probe l'integrità delle VM e delle istanze del ruolo.Load balancer - Allow Azure’s load balancer to probe the health of your VMs and role instances. Se non si usa un set con bilanciamento del carico, è possibile eseguire l'override di questa regola.If you are not using a load balanced set, you can override this rule.

Creare gruppi di sicurezza di reteCreate network security groups

È possibile creare un gruppo di sicurezza di rete contemporaneamente a una VM usando il comando az vm create.A network security group can be created at the same time as a VM using the az vm create command. In questo caso, il gruppo di sicurezza di rete viene associato all'interfaccia di rete della VM e viene creata automaticamente una regola del gruppo di sicurezza di rete per consentire il traffico sulla porta 22 da qualsiasi origine.When doing so, the NSG is associated with the VMs network interface and an NSG rule is auto created to allow traffic on port 22 from any source. In precedenza in questa esercitazione è stato creato automaticamente il gruppo di sicurezza di rete front-end con la VM front-end.Earlier in this tutorial, the front-end NSG was auto-created with the front-end VM. È stata anche creata automaticamente una regola del gruppo di sicurezza di rete per la porta 22.An NSG rule was also auto created for port 22.

In alcuni casi può essere utile creare preventivamente un gruppo di sicurezza di rete, ad esempio quando non devono essere create regole SSH predefinite o quando il gruppo di sicurezza di rete deve essere collegato a una subnet.In some cases, it may be helpful to pre-create an NSG, such as when default SSH rules should not be created, or when the NSG should be attached to a subnet.

Per creare un gruppo di sicurezza di rete, usare il comando az network nsg create.Use the az network nsg create command to create a network security group.

az network nsg create --resource-group myRGNetwork --name myBackendNSG

Il gruppo di sicurezza di rete verrà associato a una subnet, anziché a un'interfaccia di rete.Instead of associating the NSG to a network interface, it is associated with a subnet. In questa configurazione, qualsiasi VM collegata alla subnet eredita le regole del gruppo di sicurezza di rete.In this configuration, any VM that is attached to the subnet inherits the NSG rules.

Aggiornare la subnet myBackendSubnet esistente con il nuovo gruppo di sicurezza di rete.Update the existing subnet named myBackendSubnet with the new NSG.

az network vnet subnet update \
  --resource-group myRGNetwork \
  --vnet-name myVNet \
  --name myBackendSubnet \
  --network-security-group myBackendNSG

Proteggere il traffico in ingressoSecure incoming traffic

Quando è stata creata la VM front-end, è stata creata una regola del gruppo di sicurezza di rete per consentire il traffico in ingresso sulla porta 22.When the front-end VM was created, an NSG rule was created to allow incoming traffic on port 22. Questa regola consente le connessioni SSH alla VM.This rule allows SSH connections to the VM. Per questo esempio deve essere consentito il traffico anche sulla porta 80.For this example, traffic should also be allowed on port 80. Questa configurazione consente l'accesso a un'applicazione Web nella VM.This configuration allows a web application to be accessed on the VM.

Per creare una regola per la porta 80, usare il comando az network nsg rule create.Use the az network nsg rule create command to create a rule for port 80.

az network nsg rule create \
  --resource-group myRGNetwork \
  --nsg-name myFrontendNSG \
  --name http \
  --access allow \
  --protocol Tcp \
  --direction Inbound \
  --priority 200 \
  --source-address-prefix "*" \
  --source-port-range "*" \
  --destination-address-prefix "*" \
  --destination-port-range 80

La VM front-end è accessibile solo sulla porta 22 e sulla porta 80.The front-end VM is only accessible on port 22 and port 80. Tutto il resto del traffico in ingresso viene bloccato in corrispondenza del gruppo di sicurezza di rete.All other incoming traffic is blocked at the network security group. Potrebbe essere utile visualizzare le configurazioni delle regole dei gruppi di sicurezza di rete.It may be helpful to visualize the NSG rule configurations. Il comando az network rule list restituisce la configurazione delle regole dei gruppi di sicurezza di rete.Return the NSG rule configuration with the az network rule list command.

az network nsg rule list --resource-group myRGNetwork --nsg-name myFrontendNSG --output table

Proteggere il traffico da VM a VMSecure VM to VM traffic

Le regole dei gruppi di sicurezza di rete possono essere applicate anche tra VM.Network security group rules can also apply between VMs. Per questo esempio, la VM front-end deve comunicare con la VM back-end sulle porte 22 e 3306.For this example, the front-end VM needs to communicate with the back-end VM on port 22 and 3306. Questa configurazione consente le connessioni SSH dalla VM front-end nonché la comunicazione di un'applicazione nella VM front-end con un database MySQL back-end.This configuration allows SSH connections from the front-end VM, and also allow an application on the front-end VM to communicate with a back-end MySQL database. Tutto il resto del traffico tra le macchine virtuali front-end e back-end dovrà essere bloccato.All other traffic should be blocked between the front-end and back-end virtual machines.

Per creare una regola per la porta 22, usare il comando az network nsg rule create.Use the az network nsg rule create command to create a rule for port 22. Si noti che l'argomento --source-address-prefix specifica il valore 10.0.1.0/24.Notice that the --source-address-prefix argument specifies a value of 10.0.1.0/24. Questa configurazione garantisce che tramite il gruppo di sicurezza di rete sia consentito solo il traffico dalla subnet front-end.This configuration ensures that only traffic from the front-end subnet is allowed through the NSG.

az network nsg rule create \
  --resource-group myRGNetwork \
  --nsg-name myBackendNSG \
  --name SSH \
  --access Allow \
  --protocol Tcp \
  --direction Inbound \
  --priority 100 \
  --source-address-prefix 10.0.1.0/24 \
  --source-port-range "*" \
  --destination-address-prefix "*" \
  --destination-port-range "22"

Aggiungere ora una regola per il traffico MySQL sulla porta 3306.Now add a rule for MySQL traffic on port 3306.

az network nsg rule create \
  --resource-group myRGNetwork \
  --nsg-name myBackendNSG \
  --name MySQL \
  --access Allow \
  --protocol Tcp \
  --direction Inbound \
  --priority 200 \
  --source-address-prefix 10.0.1.0/24 \
  --source-port-range "*" \
  --destination-address-prefix "*" \
  --destination-port-range "3306"

Infine, dato che i gruppi di sicurezza di rete includono una regola predefinita che consente tutto il traffico tra le VM della stessa rete virtuale, è possibile creare una regola affinché il gruppo di sicurezza di rete back-end blocchi tutto il traffico.Finally, because NSGs have a default rule allowing all traffic between VMs in the same VNet, a rule can be created for the back-end NSGs to block all traffic. Si noti che a --priority viene assegnato un valore di 300, inferiore a quello delle regole MySQL e del gruppo di sicurezza di rete.Notice here that the --priority is given a value of 300, which is lower that both the NSG and MySQL rules. Questa configurazione garantisce che tramite il gruppo di sicurezza di rete sia comunque consentito il traffico SSH e MySQL.This configuration ensures that SSH and MySQL traffic is still allowed through the NSG.

az network nsg rule create \
  --resource-group myRGNetwork \
  --nsg-name myBackendNSG \
  --name denyAll \
  --access Deny \
  --protocol Tcp \
  --direction Inbound \
  --priority 300 \
  --source-address-prefix "*" \
  --source-port-range "*" \
  --destination-address-prefix "*" \
  --destination-port-range "*"

Creare la VM back-endCreate back-end VM

Creare quindi una macchina virtuale collegata a myBackendSubnet.Now create a virtual machine, which is attached to the myBackendSubnet. Si noti che l'argomento --nsg ha come valore virgolette doppie vuote.Notice that the --nsg argument has a value of empty double quotes. Non è necessario creare un gruppo di sicurezza di rete con la VM.An NSG does not need to be created with the VM. La VM è collegata alla subnet back-end, che è protetta con il gruppo di sicurezza di rete back-end già creato.The VM is attached to the back-end subnet, which is protected with the pre-created back-end NSG. Tale gruppo di sicurezza di rete viene applicato alla VM.This NSG applies to the VM. Si noti che anche l'argomento --public-ip-address ha come valore virgolette doppie vuote.Also, notice here that the --public-ip-address argument has a value of empty double quotes. Questa configurazione crea una VM senza un indirizzo IP pubblico.This configuration creates a VM without a public IP address.

az vm create \
  --resource-group myRGNetwork \
  --name myBackendVM \
  --vnet-name myVNet \
  --subnet myBackendSubnet \
  --public-ip-address "" \
  --nsg "" \
  --image UbuntuLTS \
  --generate-ssh-keys

La VM back-end è accessibile dalla subnet front-end solo sulla porta 22 e sulla porta 3306.The back-end VM is only accessible on port 22 and port 3306 from the front-end subnet. Tutto il resto del traffico in ingresso viene bloccato in corrispondenza del gruppo di sicurezza di rete.All other incoming traffic is blocked at the network security group. Potrebbe essere utile visualizzare le configurazioni delle regole dei gruppi di sicurezza di rete.It may be helpful to visualize the NSG rule configurations. Il comando az network rule list restituisce la configurazione delle regole dei gruppi di sicurezza di rete.Return the NSG rule configuration with the az network rule list command.

az network nsg rule list --resource-group myRGNetwork --nsg-name myBackendNSG --output table

Passaggi successiviNext steps

In questa esercitazione sono state create e protette reti di Azure in relazione a macchine virtuali.In this tutorial, you created and secured Azure networks as related to virtual machines. Si è appreso come:You learned how to:

  • Creare una rete virtuale e una subnetCreate a virtual network and subnet
  • Creare un indirizzo IP pubblicoCreate a public IP address
  • Creare una VM front-endCreate a front-end VM
  • Proteggono il traffico di reteSecure network traffic
  • Creare la VM back-endCreate back-end VM

Passare all'esercitazione successiva per apprendere come proteggere i dati nelle macchine virtuali con Backup di Azure.Advance to the next tutorial to learn about securing data on virtual machines using Azure backup.