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 Gateway, che sarà il nostro endpoint nel public cloud. Per sapere come creare un 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 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 uploadare 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:

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:

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 certmgr.msc e fate clic con il pulsante destro del mouse sul certificato client da esportare, scegliere Tutte le attività e quindi fare clic su Esporta. Si avvia la procedura di Esportazione guidata certificati. Ricordatevi questa volta di selezionare Sì, esporta la chiave privata.

In ogni client 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

# 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 è

https://mdsbrketwprodsn1prod.blob.core.windows.net/cmakexe/45b1c375-8d3a-4b92-8232-2eca25dc1893/amd64/45b1c375-8d3a-4b92-8232-2eca25dc1893.exe?sv=2015-04-5&sr=b&sig=WuS%2FbGH1quyDn41gy8vFd1wYnIMkVTR2OVj%2FFayr9sk%3D&st=2016-09-11T07%3A55%3A56Z&se=2016-09-11T08%3A55%3A56Z&sp=r&fileExtension=.exe

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.