È possibile usare un gruppo di sicurezza di rete per filtrare il traffico di rete in ingresso e in uscita da e verso le risorse di Azure in una rete virtuale di Azure.
I gruppi di sicurezza di rete contengono regole di sicurezza per filtrare il traffico di rete in base a indirizzo IP, porta e protocollo. Quando un gruppo di sicurezza di rete è associato a una subnet, le regole di sicurezza vengono applicate alle risorse distribuite in tale subnet.
In questa esercitazione verranno illustrate le procedure per:
- Creare un gruppo di sicurezza di rete e le regole di sicurezza
- Creare gruppi di sicurezza dell'applicazione
- Creare una rete virtuale e associare un gruppo di sicurezza di rete a una subnet
- Distribuire macchine virtuali e associare le interfacce di rete ai gruppi di sicurezza delle applicazioni
Prerequisiti
Azure Cloud Shell
Azure Cloud Shell è un ambiente di shell interattivo ospitato in Azure e usato tramite il browser. È possibile usare Bash o PowerShell con Cloud Shell per usare i servizi di Azure. È possibile usare i comandi preinstallati di Cloud Shell per eseguire il codice contenuto in questo articolo senza dover installare strumenti nell'ambiente locale.
Per avviare Azure Cloud Shell:
| Opzione |
Esempio/Collegamento |
| Selezionare Prova nell'angolo superiore destro di un blocco di codice o di comando. Quando si seleziona Prova, il codice o il comando non viene copiato automaticamente in Cloud Shell. |
|
| Passare a https://shell.azure.com o selezionare il pulsante Avvia Cloud Shell per aprire Cloud Shell nel browser. |
|
| Selezionare il pulsante Cloud Shell nella barra dei menu nell'angolo in alto a destra del portale di Azure. |
|
Per usare Azure Cloud Shell:
Avviare Cloud Shell.
Selezionare il pulsante Copia in un blocco di codice (o in un blocco di comando) per copiare il codice o il comando.
Incollare il codice o il comando nella sessione di Cloud Shell selezionando CTRL+MAIUSC+V in Windows e Linux o selezionando CMD+MAIUSC+V in macOS.
Premere Invio per eseguire il codice o il comando.
Se si sceglie di installare e usare PowerShell in locale, per questo articolo è necessario il modulo Azure PowerShell 1.0.0 o versione successiva. Eseguire Get-Module -ListAvailable Az per trovare la versione installata. Se è necessario eseguire l'aggiornamento, vedere Installare e configurare Azure PowerShell. Se si esegue PowerShell in locale, è anche necessario eseguire Connect-AzAccount per creare una connessione con Azure.
Se non si ha un account Azure, creare un account gratuito prima di iniziare.
- Questo articolo richiede l'interfaccia della riga di comando di Azure versione 2.0.28 o successiva. Se si usa Azure Cloud Shell, la versione più recente è già installata.
La procedura seguente crea una rete virtuale con una subnet della risorsa.
Nel portale, cercare e selezionare Reti virtuali.
Nella pagina Reti virtuali selezionare + Crea.
Nella scheda Dati principali di Crea rete virtuale immettere o selezionare le informazioni seguenti:
| Impostazione |
valore |
|
Dettagli del progetto |
|
| Abbonamento |
Selezionare la propria sottoscrizione. |
| Gruppo di risorse |
Selezionare Crea nuovo.
Immettere test-rg in Nome.
Selezionare OK. |
|
Dettagli istanza |
|
| Nome |
Immettere vnet-1. |
| Region |
Selezionare Stati Uniti orientali 2. |
Selezionare Avanti per passare alla scheda Sicurezza.
Selezionare Avanti per passare alla scheda Indirizzi IP.
Nella casella spazio indirizzi in Subnet selezionare la subnet predefinita.
Nel riquadro Modifica subnet immettere o selezionare le informazioni seguenti:
| Impostazione |
valore |
|
Dettagli subnet |
|
| Modello di subnet |
Lasciare l'impostazione predefinita Predefinito. |
| Nome |
Immettere subnet-1. |
| Indirizzo iniziale |
Lasciare l'impostazione predefinita 10.0.0.0. |
| Dimensioni della subnet |
Lasciare l'impostazione predefinita /24(256 indirizzi). |
Selezionare Salva.
Selezionare Rivedi e crea nella parte inferiore dello schermo. Al termine della convalida selezionare Crea.
Creare prima di tutto un gruppo di risorse con New-AzResourceGroup per tutte le risorse create in questo articolo. L'esempio seguente crea un gruppo di risorse nell’area westus2:
$rg = @{
ResourceGroupName = "test-rg"
Location = "westus2"
}
New-AzResourceGroup @rg
Creare una rete virtuale con New-AzVirtualNetwork. L'esempio seguente crea una rete virtuale denominata vnet-1:
$vnet = @{
ResourceGroupName = "test-rg"
Location = "westus2"
Name = "vnet-1"
AddressPrefix = "10.0.0.0/16"
}
$virtualNetwork = New-AzVirtualNetwork @vnet
Creare una configurazione di una subnet con New-AzVirtualNetworkSubnetConfig e quindi scrivere la configurazione della subnet nella rete virtuale con Set-AzVirtualNetwork. L'esempio seguente aggiunge una subnet denominata subnet-1 alla rete virtuale e vi associa il gruppo di sicurezza di rete nsg-1:
$subnet = @{
Name = "subnet-1"
VirtualNetwork = $virtualNetwork
AddressPrefix = "10.0.0.0/24"
}
Add-AzVirtualNetworkSubnetConfig @subnet
$virtualNetwork | Set-AzVirtualNetwork
Creare innanzitutto un gruppo di risorse con az group create per tutte le risorse create in questo articolo. L'esempio seguente crea un gruppo di risorse nell’area westus2:
az group create \
--name test-rg \
--location westus2
Creare una rete virtuale con az network vnet create. L'esempio seguente crea una rete virtuale denominata vnet-1:
az network vnet create \
--name vnet-1 \
--resource-group test-rg \
--address-prefixes 10.0.0.0/16
Aggiungere una subnet a una rete virtuale con il comando az network vnet subnet create. L'esempio seguente aggiunge una subnet denominata subnet-1 alla rete virtuale e vi associa il gruppo di sicurezza di rete nsg-1:
az network vnet subnet create \
--vnet-name vnet-1 \
--resource-group test-rg \
--name subnet-1 \
--address-prefix 10.0.0.0/24
Creare gruppi di sicurezza dell'applicazione
Un gruppo di sicurezza delle applicazioni (ASGs) consente di raggruppare i server con funzioni simili, ad esempio i server Web.
Nella casella di ricerca nella parte superiore del portale immettere Gruppo di sicurezza dell'applicazione. Selezionare Gruppi di sicurezza delle applicazioni nei risultati della ricerca.
Selezionare [+] Create ([+] Crea).
Nella scheda Informazioni di base di Creare un gruppo di sicurezza delle applicazioni immettere o selezionare queste informazioni:
| Impostazione |
valore |
|
Dettagli del progetto |
|
| Abbonamento |
Selezionare la propria sottoscrizione. |
| Gruppo di risorse |
Selezionare test-rg. |
|
Dettagli istanza |
|
| Nome |
Immettere asg-web. |
| Region |
Selezionare Stati Uniti occidentali 2. |
Selezionare Rivedi e crea.
Selezionare [+] Create ([+] Crea).
Ripetere i passaggi precedenti specificando i seguenti valori:
| Impostazione |
valore |
|
Dettagli del progetto |
|
| Abbonamento |
Selezionare la propria sottoscrizione. |
| Gruppo di risorse |
Selezionare test-rg. |
|
Dettagli istanza |
|
| Nome |
Immettere asg-mgmt. |
| Region |
Selezionare Stati Uniti occidentali 2. |
Selezionare Rivedi e crea.
Selezionare Crea.
Creare un gruppo di sicurezza dell'applicazione con New-AzApplicationSecurityGroup. Un gruppo di sicurezza delle applicazioni consente di raggruppare i server con requisiti di filtro delle porte simili. L'esempio seguente crea due gruppi di sicurezza dell'applicazione.
$web = @{
ResourceGroupName = "test-rg"
Name = "asg-web"
Location = "westus2"
}
$webAsg = New-AzApplicationSecurityGroup @web
$mgmt = @{
ResourceGroupName = "test-rg"
Name = "asg-mgmt"
Location = "westus2"
}
$mgmtAsg = New-AzApplicationSecurityGroup @mgmt
Creare un gruppo di sicurezza delle applicazioni con il comando az network asg create. Un gruppo di sicurezza delle applicazioni consente di raggruppare i server con requisiti di filtro delle porte simili. L'esempio seguente crea due gruppi di sicurezza dell'applicazione.
az network asg create \
--resource-group test-rg \
--name asg-web \
--location westus2
az network asg create \
--resource-group test-rg \
--name asg-mgmt \
--location westus2
Creare un gruppo di sicurezza di rete
Un gruppo di sicurezza di rete (NSG) protegge il traffico di rete nella rete virtuale.
Nella casella di ricerca nella parte superiore del portale immettere Gruppi di sicurezza di rete. Selezionare Gruppi di sicurezza di rete nei risultati della ricerca.
Note
Nei risultati della ricerca per i gruppi di sicurezza di rete è possibile che vengano visualizzati gruppi di sicurezza di rete (versione classica). Selezionare Gruppi di sicurezza di rete.
Selezionare [+] Create ([+] Crea).
Nella scheda Informazioni di base della pagina Crea gruppo di sicurezza di rete immettere o selezionare queste informazioni:
| Impostazione |
valore |
|
Dettagli del progetto |
|
| Abbonamento |
Selezionare la propria sottoscrizione. |
| Gruppo di risorse |
Selezionare test-rg. |
|
Dettagli istanza |
|
| Nome |
Immettere nsg-1. |
| Location |
Selezionare Stati Uniti occidentali 2. |
Selezionare Rivedi e crea.
Selezionare Crea.
Creare un gruppo di sicurezza di rete con New-AzNetworkSecurityGroup. Nell'esempio seguente viene creato un gruppo di sicurezza di rete denominato nsg-1:
$nsgParams = @{
ResourceGroupName = "test-rg"
Location = "westus2"
Name = "nsg-1"
}
$nsg = New-AzNetworkSecurityGroup @nsgParams
Creare un gruppo di sicurezza di rete con il comando az network nsg create. Nell'esempio seguente viene creato un gruppo di sicurezza di rete denominato nsg-1:
# Create a network security group
az network nsg create \
--resource-group test-rg \
--name nsg-1
Associare il gruppo di sicurezza di rete alla subnet
In questa sezione si associa il gruppo di sicurezza di rete alla subnet della rete virtuale creata in precedenza.
Nella casella di ricerca nella parte superiore del portale immettere Gruppi di sicurezza di rete. Selezionare Gruppi di sicurezza di rete nei risultati della ricerca.
Selezionare nsg-1.
Selezionare Subnet nella sezione Impostazioni di nsg-1.
Nella pagina Subnet selezionare + Associa:
In Associa subnet, selezionare vnet-1 (test-rg) per Rete virtuale.
Selezionare subnet-1 per Subnet, e quindi selezionare OK.
Usare Get-AzVirtualNetwork per recuperare l'oggetto rete virtuale, quindi usare Set-AzVirtualNetworkSubnetConfig per associare il gruppo di sicurezza di rete alla subnet. L'esempio seguente recupera l'oggetto rete virtuale e aggiorna la configurazione della subnet per associare il gruppo di sicurezza di rete:
# Retrieve the virtual network
$vnet = Get-AzVirtualNetwork -Name "vnet-1" -ResourceGroupName "test-rg"
# Update the subnet configuration to associate the network security group
$subnetConfigParams = @{
VirtualNetwork = $vnet
Name = "subnet-1"
AddressPrefix = $vnet.Subnets[0].AddressPrefix
NetworkSecurityGroup = Get-AzNetworkSecurityGroup -Name "nsg-1" -ResourceGroupName "test-rg"
}
Set-AzVirtualNetworkSubnetConfig @subnetConfigParams
# Update the virtual network with the new subnet configuration
$vnet | Set-AzVirtualNetwork
Usare az network vnet subnet update per associare il gruppo di sicurezza di rete con la subnet. L'esempio seguente associa il gruppo di sicurezza di rete nsg-1 con la subnet subnet-1:
az network vnet subnet update \
--resource-group test-rg \
--vnet-name vnet-1 \
--name subnet-1 \
--network-security-group nsg-1
Creare regole di sicurezza
Selezionare Regole di sicurezza in ingresso nella sezione Impostazioni di nsg-1.
Nella pagina Regole di sicurezza in ingresso selezionare + Aggiungi.
Creare una regola di sicurezza che consenta la porta 80 al gruppo di sicurezza delle applicazioni asg-Web . Nella pagina Aggiungi regola di sicurezza in ingresso immettere o selezionare le informazioni seguenti:
| Impostazione |
valore |
| Source (Sorgente) |
Lasciare l'impostazione predefinita Qualsiasi. |
| Intervalli di porte di origine |
Lasciare l'impostazione predefinita di (*). |
| Destination |
Selezionare gruppo di sicurezza dell'applicazione. |
| Gruppi di sicurezza delle applicazioni di destinazione |
Selezionare asg-web. |
| Servizio |
Lasciare l'impostazione predefinita Personalizzato. |
| Intervalli di porte di destinazione |
Immettere 80. |
| Protocollo |
selezionare TCP. |
| Azione |
Lasciare l'impostazione predefinita Consenti. |
| Priorità |
Lasciare l'impostazione predefinita 100. |
| Nome |
Immettere allow-http-web. |
Selezionare Aggiungi.
Completare i passaggi precedenti con le informazioni seguenti:
| Impostazione |
valore |
| Source (Sorgente) |
Lasciare l'impostazione predefinita Qualsiasi. |
| Intervalli di porte di origine |
Lasciare l'impostazione predefinita di (*). |
| Destination |
Selezionare gruppo di sicurezza dell'applicazione. |
| Gruppo di sicurezza delle applicazioni di destinazione |
Selezionare asg-mgmt. |
| Servizio |
Lasciare l'impostazione predefinita Personalizzato. |
| Intervalli di porte di destinazione |
Immettere 8080. |
| Protocollo |
selezionare TCP. |
| Azione |
Lasciare l'impostazione predefinita Consenti. |
| Priorità |
Lasciare l'impostazione predefinita 110. |
| Nome |
Immettere allow-8080-mgmt. |
Selezionare Aggiungi.
Creare una regola di sicurezza con New-AzNetworkSecurityRuleConfig. L'esempio seguente crea una regola che consente il traffico in ingresso da Internet al gruppo di sicurezza delle applicazioni asg-Web sulla porta 80:
$webAsgParams = @{
Name = "asg-web"
ResourceGroupName = "test-rg"
}
$webAsg = Get-AzApplicationSecurityGroup @webAsgParams
$webRuleParams = @{
Name = "Allow-HTTP-Web"
Access = "Allow"
Protocol = "Tcp"
Direction = "Inbound"
Priority = 100
SourceAddressPrefix = "Internet"
SourcePortRange = "*"
DestinationApplicationSecurityGroupId = $webAsg.id
DestinationPortRange = 80
}
$webRule = New-AzNetworkSecurityRuleConfig @webRuleParams
L'esempio seguente crea una regola che consente il traffico in ingresso da Internet al gruppo di sicurezza dell'applicazione asg-mgmt sulla porta 8080:
$mgmtAsgParams = @{
Name = "asg-mgmt"
ResourceGroupName = "test-rg"
}
$mgmtAsg = Get-AzApplicationSecurityGroup @mgmtAsgParams
$mgmtRuleParams = @{
Name = "Allow-8080-Mgmt"
Access = "Allow"
Protocol = "Tcp"
Direction = "Inbound"
Priority = 110
SourceAddressPrefix = "Internet"
SourcePortRange = "*"
DestinationApplicationSecurityGroupId = $mgmtAsg.id
DestinationPortRange = 8080
}
$mgmtRule = New-AzNetworkSecurityRuleConfig @mgmtRuleParams
Usare Get-AzNetworkSecurityGroup per recuperare il gruppo di sicurezza di rete esistente e quindi aggiungere le nuove regole con l'operatore +=. Aggiornare infine il gruppo di sicurezza di rete con Set-AzNetworkSecurityGroup:
# Retrieve the existing network security group
$nsg = Get-AzNetworkSecurityGroup -Name "nsg-1" -ResourceGroupName "test-rg"
# Add the new rules to the security group
$nsg.SecurityRules += $webRule
$nsg.SecurityRules += $mgmtRule
# Update the network security group with the new rules
Set-AzNetworkSecurityGroup -NetworkSecurityGroup $nsg
Creare una regola di sicurezza con il comando az network nsg rule create. L'esempio seguente crea una regola che consente il traffico in ingresso da Internet al gruppo di sicurezza delle applicazioni asg-Web sulla porta 80:
az network nsg rule create \
--resource-group test-rg \
--nsg-name nsg-1 \
--name Allow-HTTP-Web \
--access Allow \
--protocol Tcp \
--direction Inbound \
--priority 100 \
--source-address-prefix Internet \
--source-port-range "*" \
--destination-asgs "asg-web" \
--destination-port-range 80
L'esempio seguente crea una regola che consente il traffico in ingresso da Internet al gruppo di sicurezza delle applicazioni asg-mgmt sulla porta 8080:
az network nsg rule create \
--resource-group test-rg \
--nsg-name nsg-1 \
--name Allow-8080-Mgmt \
--access Allow \
--protocol Tcp \
--direction Inbound \
--priority 110 \
--source-address-prefix Internet \
--source-port-range "*" \
--destination-asgs "asg-mgmt" \
--destination-port-range 8080
Creare macchine virtuali
Creare due macchine virtuali (VM) nella rete virtuale.
Nel portale, cercare e selezionare Macchine virtuali.
In Macchine virtuali selezionare + Crea e quindi Macchina virtuale.
In Creare una macchina virtuale immettere o selezionare le informazioni seguenti nella scheda Informazioni di base:
| Impostazione |
valore |
|
Dettagli del progetto |
|
| Abbonamento |
Selezionare la propria sottoscrizione. |
| Gruppo di risorse |
Selezionare test-rg. |
|
Dettagli istanza |
|
| Nome della macchina virtuale |
Immettere vm-web. |
| Region |
Selezionare (Stati Uniti) Stati Uniti occidentali 2. |
| Opzioni di disponibilità |
Lasciare l'impostazione predefinita Nessuna ridondanza dell'infrastruttura necessaria. |
| Tipo di sicurezza |
Selezionare Standard. |
| Immagine |
Selezionare Ubuntu Server 24.04 LTS - x64 Gen2. |
| Istanza Spot di Azure |
Lasciare deselezionata l'impostazione predefinita. |
| Dimensione |
Selezionare una dimensione. |
|
Account amministratore |
|
| Tipo di autenticazione |
selezionare Chiave pubblica SSH. |
| Nome utente |
Inserire azureuser. |
| Origine chiave pubblica SSH |
Selezionare Genera nuova coppia di chiavi. |
| Nome della coppia di chiavi |
Immettere vm-web-key. |
|
Regole porta in ingresso |
|
| Selezionare le porte in ingresso |
Selezionare Nessuno. |
Selezionare Avanti: Dischi e quindi Avanti: Rete.
Nella scheda Rete immettere o selezionare le informazioni seguenti:
| Impostazione |
valore |
|
Interfaccia di rete |
|
| Rete virtuale |
Selezionare vnet-1. |
| Subnet |
Selezionare subnet-1 (10.0.0.0/24). |
| IP pubblico |
Lascia l'impostazione predefinita di un nuovo indirizzo IP pubblico. |
| Gruppo di sicurezza di rete della scheda di interfaccia di rete |
Selezionare Nessuno. |
Selezionare la scheda Rivedi e crea o selezionare il pulsante blu Rivedi e crea nella parte inferiore della pagina.
Selezionare Crea.
Quando viene richiesto di generare una nuova coppia di chiavi, selezionare Scarica chiave privata e crea risorsa. La chiave privata viene scaricata nel computer locale. La distribuzione della macchina virtuale potrebbe richiedere alcuni minuti.
Ripetere i passaggi precedenti per creare una seconda macchina virtuale denominata vm-mgmt con il nome della coppia di chiavi vm-mgmt-key.
Prima di creare le macchine virtuali, recuperare l'oggetto rete virtuale con la subnet con Get-AzVirtualNetwork:
$virtualNetworkParams = @{
Name = "vnet-1"
ResourceGroupName = "test-rg"
}
$virtualNetwork = Get-AzVirtualNetwork @virtualNetworkParams
Creare un indirizzo IP pubblico per ogni VM con New-AzPublicIpAddress:
$publicIpWebParams = @{
AllocationMethod = "Static"
ResourceGroupName = "test-rg"
Location = "westus2"
Name = "public-ip-vm-web"
}
$publicIpWeb = New-AzPublicIpAddress @publicIpWebParams
$publicIpMgmtParams = @{
AllocationMethod = "Static"
ResourceGroupName = "test-rg"
Location = "westus2"
Name = "public-ip-vm-mgmt"
}
$publicIpMgmt = New-AzPublicIpAddress @publicIpMgmtParams
Creare due interfacce di rete con New-AzNetworkInterface e assegnare un indirizzo IP pubblico all'interfaccia di rete. Nell'esempio seguente viene creata un'interfaccia di rete, a cui viene associato l'indirizzo IP pubblico public-ip-vm-web.
$webNicParams = @{
Location = "westus2"
Name = "vm-web-nic"
ResourceGroupName = "test-rg"
SubnetId = $virtualNetwork.Subnets[0].Id
PublicIpAddressId = $publicIpWeb.Id
}
$webNic = New-AzNetworkInterface @webNicParams
Nell'esempio seguente viene creata un'interfaccia di rete, a cui viene associato l'indirizzo IP pubblico public-ip-vm-mgmt.
$mgmtNicParams = @{
Location = "westus2"
Name = "vm-mgmt-nic"
ResourceGroupName = "test-rg"
SubnetId = $virtualNetwork.Subnets[0].Id
PublicIpAddressId = $publicIpMgmt.Id
}
$mgmtNic = New-AzNetworkInterface @mgmtNicParams
Creare due VM nella rete virtuale per convalidare il filtro del traffico in un passaggio successivo.
Generare chiavi SSH in Azure con New-AzSshKey. L'esempio seguente crea risorse chiave SSH per ogni macchina virtuale:
# Create SSH key for vm-web
$webSshKeyParams = @{
ResourceGroupName = "test-rg"
Name = "vm-web-key"
}
New-AzSshKey @webSshKeyParams
# Create SSH key for vm-mgmt
$mgmtSshKeyParams = @{
ResourceGroupName = "test-rg"
Name = "vm-mgmt-key"
}
New-AzSshKey @mgmtSshKeyParams
Creare una configurazione di VM con New-AzVMConfig, quindi creare la macchina virtuale con New-AzVM. L'esempio seguente crea una macchina virtuale (VM) che funge da server Web. L'opzione -AsJob crea la macchina virtuale in background, quindi è possibile continuare con il passaggio successivo:
# Get the SSH public key
$sshKey = Get-AzSshKey -Name "vm-web-key" -ResourceGroupName "test-rg"
$webVmConfigParams = @{
VMName = "vm-web"
VMSize = "Standard_DS1_V2"
}
$vmImageParams = @{
PublisherName = "Canonical"
Offer = "ubuntu-24_04-lts"
Skus = "server"
Version = "latest"
}
$webVmConfig = New-AzVMConfig @webVmConfigParams | `
Set-AzVMOperatingSystem -Linux -ComputerName "vm-web" -Credential (New-Object System.Management.Automation.PSCredential("azureuser", (ConvertTo-SecureString "DummyP@ssw0rd" -AsPlainText -Force))) -DisablePasswordAuthentication | `
Set-AzVMSourceImage @vmImageParams | `
Add-AzVMNetworkInterface -Id $webNic.Id | `
Set-AzVMOSDisk -CreateOption FromImage | `
Set-AzVMBootDiagnostic -Disable | `
Add-AzVMSshPublicKey -KeyData $sshKey.publicKey -Path "/home/azureuser/.ssh/authorized_keys"
$webVmParams = @{
ResourceGroupName = "test-rg"
Location = "westus2"
VM = $webVmConfig
}
New-AzVM @webVmParams -AsJob
Creare una VM che funge da server di gestione:
# Get the SSH public key
$sshKey = Get-AzSshKey -Name "vm-mgmt-key" -ResourceGroupName "test-rg"
$mgmtVmConfigParams = @{
VMName = "vm-mgmt"
VMSize = "Standard_DS1_V2"
}
$vmImageParams = @{
PublisherName = "Canonical"
Offer = "ubuntu-24_04-lts"
Skus = "server"
Version = "latest"
}
$mgmtVmConfig = New-AzVMConfig @mgmtVmConfigParams | `
Set-AzVMOperatingSystem -Linux -ComputerName "vm-mgmt" -Credential (New-Object System.Management.Automation.PSCredential("azureuser", (ConvertTo-SecureString "DummyP@ssw0rd" -AsPlainText -Force))) -DisablePasswordAuthentication | `
Set-AzVMSourceImage @vmImageParams | `
Add-AzVMNetworkInterface -Id $mgmtNic.Id | `
Set-AzVMOSDisk -CreateOption FromImage | `
Set-AzVMBootDiagnostic -Disable | `
Add-AzVMSshPublicKey -KeyData $sshKey.publicKey -Path "/home/azureuser/.ssh/authorized_keys"
$mgmtVmParams = @{
ResourceGroupName = "test-rg"
Location = "westus2"
VM = $mgmtVmConfig
}
New-AzVM @mgmtVmParams
La creazione della macchina virtuale richiede alcuni minuti. Prima di continuare con i passaggi successivi, attendere che Azure finisca di creare la VM.
Creare due VM nella rete virtuale per convalidare il filtro del traffico in un passaggio successivo.
Creare una VM con il comando az vm create. L'esempio seguente crea una macchina virtuale (VM) che funge da server Web. L'opzione --nsg "" è specificata per impedire ad Azure di creare un gruppo di sicurezza di rete predefinito per l'interfaccia di rete creata da Azure al momento della creazione della VM. Il parametro --generate-ssh-keys fa sì che l'interfaccia della riga di comando cerchi una chiave SSH disponibile in ~/.ssh. Se ne viene trovata una, viene usata la chiave. Se no, uno viene generato e archiviato in ~/.ssh:
az vm create \
--resource-group test-rg \
--name vm-web \
--image Ubuntu2404 \
--vnet-name vnet-1 \
--subnet subnet-1 \
--nsg "" \
--admin-username azureuser \
--generate-ssh-keys
La creazione della VM richiede alcuni minuti. Dopo la creazione della VM, viene restituito un output simile all'esempio seguente:
{
"fqdns": "",
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test-rg/providers/Microsoft.Compute/virtualMachines/vm-web",
"location": "westus2",
"macAddress": "00-0D-3A-23-9A-49",
"powerState": "VM running",
"privateIpAddress": "10.0.0.4",
"publicIpAddress": "203.0.113.24",
"resourceGroup": "test-rg"
}
Creare una VM con il comando az vm create. L'esempio seguente crea una macchina virtuale che funge da server di gestione:
az vm create \
--resource-group test-rg \
--name vm-mgmt \
--image Ubuntu2404 \
--vnet-name vnet-1 \
--subnet subnet-1 \
--nsg "" \
--admin-username azureuser \
--generate-ssh-keys
La creazione della VM richiede alcuni minuti. Prima di continuare con i passaggi successivi, attendere che Azure finisca di creare la VM.
Associare le interfacce di rete a un gruppo di sicurezza delle applicazioni
Quando hai creato le macchine virtuali, Azure ha creato un'interfaccia di rete per ogni macchina virtuale e l'ha collegata alla macchina stessa.
Aggiungere l'interfaccia di rete di ogni macchina virtuale a uno dei gruppi di sicurezza delle applicazioni creati in precedenza:
Nella casella di ricerca, nella parte superiore del portale, immettere Macchina virtuale. Selezionare Macchine virtuali nei risultati della ricerca e quindi vm-web.
Selezionare gruppi di sicurezza delle applicazioni nella sezione rete di vm-web.
Selezionare Aggiungi gruppi di sicurezza delle applicazioni, quindi nella scheda Aggiungi gruppi di sicurezza delle applicazioni selezionare asg-web. Infine, selezionare Aggiungi.
Ripetere i passaggi precedenti per vm-mgmt, selezionando asg-mgmt nella scheda Aggiungi gruppi di sicurezza delle applicazioni.
Usare Get-AzNetworkInterface per recuperare l'interfaccia di rete della macchina virtuale e quindi usare Get-AzApplicationSecurityGroup per recuperare il gruppo di sicurezza dell'applicazione. Usare infine Set-AzNetworkInterface per associare il gruppo di sicurezza delle applicazioni all'interfaccia di rete. L'esempio seguente associa il gruppo di sicurezza dell'applicazione asg-web all'interfaccia di rete vm-web-nic:
$params1 = @{
Name = "vm-web-nic"
ResourceGroupName = "test-rg"
}
$nic = Get-AzNetworkInterface @params1
$params2 = @{
Name = "asg-web"
ResourceGroupName = "test-rg"
}
$asg = Get-AzApplicationSecurityGroup @params2
$nic.IpConfigurations[0].ApplicationSecurityGroups = @($asg)
$params3 = @{
NetworkInterface = $nic
}
Set-AzNetworkInterface @params3
Ripetere il comando per associare il gruppo di sicurezza dell'applicazione asg-mgmt all'interfaccia di rete vm-mgmt-nic.
$params1 = @{
Name = "vm-mgmt-nic"
ResourceGroupName = "test-rg"
}
$nic = Get-AzNetworkInterface @params1
$params2 = @{
Name = "asg-mgmt"
ResourceGroupName = "test-rg"
}
$asg = Get-AzApplicationSecurityGroup @params2
$nic.IpConfigurations[0].ApplicationSecurityGroups = @($asg)
$params3 = @{
NetworkInterface = $nic
}
Set-AzNetworkInterface @params3
Usare az network nic update per associare l'interfaccia di rete al gruppo di sicurezza dell'applicazione. L'esempio seguente associa il gruppo di sicurezza dell'applicazione asg-web all'interfaccia di rete vm-web-nic:
# Retrieve the network interface name associated with the virtual machine
nic_name=$(az vm show --resource-group test-rg --name vm-web --query 'networkProfile.networkInterfaces[0].id' -o tsv | xargs basename)
# Associate the application security group with the network interface
az network nic ip-config update \
--name ipconfigvm-web \
--nic-name $nic_name \
--resource-group test-rg \
--application-security-groups asg-web
Ripetere il comando per associare il gruppo di sicurezza dell'applicazione asg-mgmt all'interfaccia di rete vm-mgmt-nic.
# Retrieve the network interface name associated with the virtual machine
nic_name=$(az vm show --resource-group test-rg --name vm-mgmt --query 'networkProfile.networkInterfaces[0].id' -o tsv | xargs basename)
# Associate the application security group with the network interface
az network nic ip-config update \
--name ipconfigvm-mgmt \
--nic-name $nic_name \
--resource-group test-rg \
--application-security-groups asg-mgmt
Testare i filtri del traffico
Nella casella di ricerca, nella parte superiore del portale, immettere Macchina virtuale. Selezionare Macchine virtuali nei risultati della ricerca.
Selezionare vm-web.
Selezionare Esegui comando nella sezione Operazioni .
Selezionare EseguiShellScript.
Nel riquadro Esegui script comando immettere i comandi seguenti:
sudo apt-get update -y
sudo apt-get install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx
Selezionare Esegui. Attendere il completamento dello script con successo.
Nella pagina Panoramica di vm-webprendere nota dell'indirizzo IP pubblico per la macchina virtuale.
Per verificare che sia possibile accedere al server Web vm-web da Internet sulla porta 80, aprire un browser Internet nel computer e passare a http://<public-ip-address-from-previous-step>.
Viene visualizzata la pagina predefinita di nginx, perché il traffico in ingresso da Internet al gruppo di sicurezza delle applicazioni asg-Web è consentito tramite la porta 80.
L'interfaccia di rete collegata per vm-web è associata al gruppo di sicurezza delle applicazioni asg-web e consente la connessione.
Provare ad accedere a vm-web sulla porta 443 passando a https://<public-ip-address-vm-web> nel browser. La connessione non riesce o scade perché la regola di sicurezza per asg-web non consente di accedere alla porta 443 in ingresso da Internet.
Configurare ora vm-mgmt con nginx sulla porta 8080. Selezionare vm-mgmt nella pagina Macchine virtuali .
Selezionare Esegui comando nella sezione Operazioni .
Selezionare EseguiShellScript.
Nel riquadro Esegui script comando immettere i comandi seguenti per installare nginx sulla porta 8080:
sudo apt-get update -y
sudo apt-get install -y nginx
# Configure nginx to listen on port 8080
sudo tee /etc/nginx/sites-available/default > /dev/null <<EOF
server {
listen 8080 default_server;
listen [::]:8080 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files \$uri \$uri/ =404;
}
}
EOF
sudo systemctl restart nginx
Selezionare Esegui. Attendere il completamento dello script con successo.
Nella pagina Panoramica di vm-mgmt prendere nota dell'indirizzo IP pubblico per la macchina virtuale.
Per verificare che sia possibile accedere al server Web vm-mgmt da Internet sulla porta 8080, aprire un browser Internet nel computer e passare a http://<public-ip-address-vm-mgmt>:8080.
Viene visualizzata la pagina predefinita di nginx perché il traffico in ingresso da Internet al gruppo di sicurezza dell'applicazione asg-mgmt è consentito tramite la porta 8080.
Provare ad accedere a vm-mgmt sulla porta 80 passando a http://<public-ip-address-vm-mgmt> nel browser. La connessione ha esito negativo o si verifica il timeout perché nessuna regola di sicurezza consente la porta 80 in ingresso al gruppo di sicurezza delle applicazioni asg-mgmt .
L'interfaccia di rete collegata per vm-web è associata al gruppo di sicurezza delle applicazioni asg-web e consente la connessione.
Installare nginx in vm-web usando Invoke-AzVMRunCommand:
$webInstallParams = @{
ResourceGroupName = "test-rg"
VMName = "vm-web"
CommandId = "RunShellScript"
ScriptString = @"
sudo apt-get update -y
sudo apt-get install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx
"@
}
Invoke-AzVMRunCommand @webInstallParams
Il completamento del comando potrebbe richiedere alcuni minuti. Al termine, testare l'accesso Web in vm-web.
Ottenere l'indirizzo IP pubblico di vm-web:
$webIPParams = @{
Name = "public-ip-vm-web"
ResourceGroupName = "test-rg"
}
$webIP = Get-AzPublicIpAddress @webIPParams
Write-Host "vm-web IP: $($webIP.IpAddress)"
Per verificare che sia possibile accedere al server Web vm-web da Internet sulla porta 80, aprire un browser Internet nel computer e passare a http://<vm-web-ip-address>.
Viene visualizzata la pagina predefinita di nginx perché il traffico in ingresso da Internet al gruppo di sicurezza delle applicazioni asg-Web è consentito tramite la porta 80. L'interfaccia di rete collegata alla macchina virtuale vm-web si trova in questo gruppo.
Provare ad accedere a vm-web sulla porta 443 passando a https://<vm-web-ip-address> nel browser. La connessione non riesce o scade perché la regola di sicurezza per asg-web non consente di accedere alla porta 443 in ingresso da Internet.
Installa ora nginx alla porta 8080 su vm-mgmt:
$mgmtInstallParams = @{
ResourceGroupName = "test-rg"
VMName = "vm-mgmt"
CommandId = "RunShellScript"
ScriptString = @"
sudo apt-get update -y
sudo apt-get install -y nginx
# Configure nginx to listen on port 8080
sudo tee /etc/nginx/sites-available/default > /dev/null <<'EOF'
server {
listen 8080 default_server;
listen [::]:8080 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files \$uri \$uri/ =404;
}
}
EOF
sudo systemctl restart nginx
"@
}
Invoke-AzVMRunCommand @mgmtInstallParams
Ottenere l'indirizzo IP pubblico di vm-mgmt:
$mgmtIPParams = @{
Name = "public-ip-vm-mgmt"
ResourceGroupName = "test-rg"
}
$mgmtIP = Get-AzPublicIpAddress @mgmtIPParams
Write-Host "vm-mgmt IP: $($mgmtIP.IpAddress)"
Per verificare che sia possibile accedere al server Web vm-mgmt da Internet sulla porta 8080, aprire un browser Internet nel computer e passare a http://<vm-mgmt-ip-address>:8080.
Viene visualizzata la pagina predefinita di nginx perché il traffico in ingresso da Internet al gruppo di sicurezza dell'applicazione asg-mgmt è consentito tramite la porta 8080.
Provare ad accedere a vm-mgmt sulla porta 80 passando a http://<vm-mgmt-ip-address> nel browser. La connessione ha esito negativo o si verifica il timeout perché nessuna regola di sicurezza consente la porta 80 in ingresso al gruppo di sicurezza delle applicazioni asg-mgmt .
Installare nginx in vm-web usando az vm run-command invoke:
az vm run-command invoke \
--resource-group test-rg \
--name vm-web \
--command-id RunShellScript \
--scripts "sudo apt-get update -y && sudo apt-get install -y nginx && sudo systemctl enable nginx && sudo systemctl start nginx"
Ottenere l'indirizzo IP pubblico di vm-web:
webIP=$(az vm show --show-details --resource-group test-rg --name vm-web --query publicIps --output tsv)
echo "vm-web IP: $webIP"
Per verificare che sia possibile accedere al server Web vm-web da Internet sulla porta 80, usare curl:
curl http://$webIP
La connessione ha esito positivo perché l'interfaccia di rete collegata alla macchina virtuale vm-web si trova nel gruppo di sicurezza dell'applicazione asg-mgmt, così che sulla porta 80 è consentito il traffico in ingresso proveniente da Internet.
Provare ad accedere a vm-web sulla porta 443:
curl -k https://$webIP
La connessione non riesce o scade perché la regola di sicurezza per asg-web non consente di accedere alla porta 443 in ingresso da Internet.
Installa ora nginx alla porta 8080 su vm-mgmt:
az vm run-command invoke \
--resource-group test-rg \
--name vm-mgmt \
--command-id RunShellScript \
--scripts "sudo apt-get update -y && \
sudo apt-get install -y nginx && \
sudo bash -c 'cat > /etc/nginx/sites-available/default <<EOF
server {
listen 8080 default_server;
listen [::]:8080 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files \\\$uri \\\$uri/ =404;
}
}
EOF' && \
sudo systemctl restart nginx"
Ottenere l'indirizzo IP pubblico di vm-mgmt:
mgmtIP=$(az vm show --show-details --resource-group test-rg --name vm-mgmt --query publicIps --output tsv)
echo "vm-mgmt IP: $mgmtIP"
Per verificare che sia possibile accedere al server Web vm-mgmt da Internet sulla porta 8080, usare curl:
curl http://$mgmtIP:8080
La connessione ha esito positivo perché il traffico in ingresso da Internet al gruppo di sicurezza dell'applicazione asg-mgmt è consentito tramite la porta 8080.
Provare ad accedere a vm-mgmt sulla porta 80:
curl http://$mgmtIP
La connessione ha esito negativo o si verifica il timeout perché nessuna regola di sicurezza consente la porta 80 in ingresso al gruppo di sicurezza delle applicazioni asg-mgmt .
Quando le risorse create non sono più necessarie, è possibile eliminare il gruppo di risorse e tutte le risorse che contiene.
Accedere al portale di Azure e selezionare Gruppi di risorse.
Nella pagina Gruppi di risorse selezionare il gruppo di risorse test-rg.
Nella pagina test-rg selezionare Elimina gruppo di risorse.
Immettere test-rg in Immettere il nome del gruppo di risorse per confermare l'eliminazione, quindi selezionare Elimina.
Quando il gruppo di risorse e tutte le risorse in esso contenute non sono più necessari, è possibile usare Remove-AzResourceGroup per rimuoverli:
$params = @{
Name = "test-rg"
Force = $true
}
Remove-AzResourceGroup @params
Quando il gruppo di risorse e tutte le risorse in esso contenute non sono più necessari, usare az group delete per rimuoverli.
az group delete \
--name test-rg \
--yes \
--no-wait
Passaggi successivi
In questa esercitazione:
- È stato creato un gruppo di sicurezza di rete e associato a una subnet di rete virtuale.
- Gruppi di sicurezza delle applicazioni creati per il traffico Web e di gestione.
- Creare due macchine virtuali Linux con l'autenticazione della chiave SSH e associare le interfacce di rete ai gruppi di sicurezza delle applicazioni.
- Server Web nginx installati in entrambe le macchine virtuali con configurazioni di porta diverse.
- È stato testato il filtro di rete del gruppo di sicurezza delle applicazioni dimostrando che vm-web consente la porta 80 (HTTP) ma nega la porta 443, mentre vm-mgmt consente la porta 8080 ma nega la porta 80 (HTTP).
Per altre informazioni sui gruppi di sicurezza di rete, vedere Panoramica dei gruppi di sicurezza di rete e Gestire un gruppo di sicurezza di rete.
Per impostazione predefinita, Azure instrada il traffico tra subnet. In alternativa, si potrebbe ad esempio scegliere di instradare il traffico tra subnet tramite una VM che funge da firewall.
Per informazioni su come creare una tabella di route, passare all'esercitazione successiva.