Creare una connessione Point to Site in Azure Resource Manager usando Powershell
Una connessione Point to Site (P2S) consente di creare una connessione sicura da un singolo computer client verso una rete virtuale creata su Microsoft Azure. Questo tipo di connessione è molto utile quando ci si trova fuori dalla rete aziendale col proprio portatile e si vuole comunque accedere al workload che sta girando su Azure.
In questo articolo vedremo come configurare questo tipo di connessione utilizzando Azure Resource Manager (ARM). Alla data di stesura di questo articolo non è ancora disponibile la possibilità di farlo da interfaccia grafica dal portale di Azure, quindi utilizzeremo Powershell.
Figura 1: Diagramma di connessione Point to Site alla VNET su Azure
Come si può vedere dall’immagine sopra, i client si connetteranno utilizzando una connessione VPN con il protocollo SSTP (Secure Socket Tunnelling Protocol). Il protocollo SSTP utilizza la porta 443 ed incapsula il traffico VPN in un tunnel HTTPS. Per l’autenticazione verrà installato sul pc client un certificato digitale, invece che utilizzare una combinazione di username e password.
Nel mio laboratorio ho già realizzato una VNET chiamata PowerConVNET all’interno di una Resource Group chiamato PowerCon
Figura 2: VNET creata su Azure
Come creare una VNET utilizzando Azure Resource Manager esula dai contenuti di questo articolo. Per maggiori informazioni potete leggere Creare una rete virtuale usando il portale di Azure. Per poterci connettere alla VNET occorre anche creare un Virtual Network Gateway, che sarà il nostro endpoint in Azure. Per sapere come creare un Virtual Network Gateway potete leggere l’articolo Creare una rete virtuale con una connessione da sito a sito usando il portale di Azure
Figura 3: Diagramma di rete delle connessione SIte to Site
Il Virtual Network Gateway che ho creato per potermi connettere alla VNET si chiama PowerCon-Gateway
Figura 4: Gateway della VNET
Creazione dei certificati
Per connettersi con una connessione VPN Point to Site è necessario autenticarsi utilizzando dei certificati digitali. Per poter creare dei certificati digitali utilizzeremo il tool makecert.exe. Creeremo prima un certificato radice da caricare su Azure e poi creeremo un certificato client da installare sulle macchine da cui vorremo fare una connessione Point to Site (P2S). Maggiori dettagli sulla creazione dei certificati li potete trovare leggendo l’articolo Usare i certificati autofirmati per le connessioni Point-to-Site.
Dopo aver installato Windows Software Development Kit (SDK) per Windows 10 o esservi procurati il tool makecert.exe utilizzate il seguente comando per creare il Root Certificate:
1 |
makecert -sky exchange -r -n "CN=ARMP2SRootCert" -pe -a sha1 -len 2048 -ss My "ARMP2SRootCert.cer" |
Il certificato radice, chiamato ARMP2SRootCert, lo troverete nello store Personal dei certificati. Azure accetta solo certificati in formato Base64. Collegatevi alla console dei certificati digitando da Esegui il comando certmgr.msc ed esportate il certificato che avete appena creato in formato Base-64 encoded X.509 (.CER) (senza esportare la chiave privata).
Figura 5: Certificato Radice da esportare
Figura 6: Esportazione del certificato
Per creare i certificati Client vi basterà invece digitare il seguente comando:
1 |
makecert.exe -n "CN=ClientCertificateName" -pe -sky exchange -m 96 -ss My -in "ARMP2SRootCert" -is my -a sha1 |
Sostituite ClientCertificateName con il nome che prefereite, se volete creare diversi certificate e poterli distinguere. Per esportare un certificato client, aprite la console dei certificati digitando certmgr.msc da Esegui e fate clic con il pulsante destro del mouse sul certificato client da esportare, scegliete Tutte le attività e quindi fate clic su Esporta. Si avvia la procedura di Esportazione guidata certificati. Ricordatevi questa volta di selezionare Sì, esporta la chiave privata.
In ogni macchina che volete connettere alla rete virtuale con una connessione Point to Site (P2S) deve essere installato un certificato client, da utilizzare per l’autenticazione.
Creazione della connessione utilizzando Powershell
Prima di procedere con la creazione della connessione Point to Site è necessario procurarsi il contenuto del certificato di Root, che avete precedentemente creato, aprendo il file .CER con il blocco note e copiando la parte compresa tra BEGIN CERTIFICATE e END CERTIFICATE, avendo cura di scriverlo su un unico rigo e senza ritorni a capo.
Figura 7: Chiave pubblica del certificato Radice
Vi riporto di seguito lo script da utilizzare per aggiungere una connessione Point to Site ad una VNET già esistente
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# Definizione delle variabili da utilizzare nello script $vnetname = "PowerConVNET" $rgname = "Powercon" $region = "West Europe" $clientpool = "192.168.20.0/24" $RootCertName = "ARMP2SRootCert.cer" $gw = "PowerCon-Gateway" $publicCertData = "MIIDAjCCAe6gAwIBAgIQQ/Q16rr3I7xJnJuJ8AeXzTAJBgUrDgMCHQUAMBkxFzAVBgNVBAMTDkFSTVAyU1Jvb3RDZXJ0MB4XDTE2MDkwNzE1MzUwMloXDTM5MTIzMTIzNTk1OVowGTEXMBUGA1UEAxMOQVJNUDJTUm9vdENlcnQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDULwDO5d+LLx/2LQooMrLL0FFbrS5u05BibVG47K4aO+p0hHfhlFwW+35E1nCvETb2lpx1B22QioQTn2JJ3ZP+Wm0OqsfZeKjkZJAzGo6jx84I1RiagDygbKP2aNOgDU1usjtocJRhhJe8yPk0mgz44cNd+vUF8Q8QSdFbwhAG4+o3wXEPOb0rsh2gWiU5CHYApRZPGYMIUbAdbswkxsLlzcranrWCVVNNznGSIeSycwHQ0NLvUAlHdpWthSu487oqnD8MEoPX558RY8zOeLeBgkTHJ3UWFFQhHb6k28lexlPwr2wG9dbQiPjO1XsTbHXAqNgGtIkuqmnYK/iio+XnAgMBAAGjTjBMMEoGA1UdAQRDMEGAENE65YWdJeG64UR/wyOhtAqhGzAZMRcwFQYDVQQDEw5BUk1QMlNSb290Q2VydIIQQ/Q16rr3I7xJnJuJ8AeXzTAJBgUrDgMCHQUAA4IBAQCary6ckabU5f/RE/T66lcTtXoDyypZrNUY4HZlEe2mkfxoCmhReyo4eKhzpisqzXpdSYMnty/HD+Zz22ONeIdbbbV+YDC3vCW5yNFu+ScNjvg1/HTF+1oP+L7Mv5+72L7OY1NcO4fdhG5tfORzrRn7nTr33+Em+q36gpL9UdyiW4XiaH9WlfVRe7KzVgj/ntZb9ZNQ3loN+FXJS80tcYeYt0tY5fM1AzxD83m5jhQm9vTdBd0X8A6XR5ZagfRB18W7mLV8S18oRBR/2T18NIBgeifzcBTphATgwUE1H1dnaSom4Oh2FzM0UnLgDOssjBZ/fBd1nBrpJxzF5qY5GT01" # Login ad Azure Login-AzureRMAccount # Creazione della configurazione del client VPN Set-AzureRmVirtualNetworkGatewayVpnClientConfig -VirtualNetworkGateway $gw -VpnClientAddressPool $clientpool # Aggiunta del certificato di Root Add-AzureRmVpnClientRootCertificate -VpnClientRootCertificateName $RootCertName -PublicCertData $publicCertData -VirtualNetworkGatewayName $gw -ResourceGroupName $rgname # Download del client di connessione Get-AzureRmVpnClientPackage -ResourceGroupName $rgname -VirtualNetworkGatewayName $gw -ProcessorArchitecture Amd64 |
Con l’ultimo comando otterremo l’URL del client di connessione, nel mio caso è
Dal Portale di Azure potete verificare che la connessione P2S è stata creata andando a visualizzare il nodo Point-to-Site configuration, come mostrato in figura:
Figura 8: Point-to-Site configuration
Come potete vedere è stato caricato anche il certificato radice chiamato ARMP2SRootCert. In Azure è possibile aggiungere fino a 20 certificati radice diversi.
Connessione alla VNET
Lanciando l’eseguibile scaricato (nel mio caso 45b1c375-8d3a-4b92-8232-2eca25dc1893.exe) verrà installata la connessione VPN e potremo connetterci alla VNET PowerCon-vnet, come mostrato in figura:
Figura 9: Connessione VPN SSTP verso la Azure VNET
Conclusioni
La creazione della Connessione Point to Site potrebbe essere facilmente migliorata dando la possibilità di caricare graficamente il certificato radice e di creare il Pool degli indirizzi dal Portale di Azure, come accade se utilizzate delle VNET create con il Classic Model, ma abbiamo visto che con poche righe di Powershell comunque non risulta particolarmente difficile.