Azure Cloud Shell – Integrazione con una Virtual Network (VNET)
Abbiamo già visto nei precedenti articoli Azure Cloud Shell – Amministrazione di Microsoft Azure con una shell accessibile tramite browser e Creazione e modifica di file e script utilizzando gli editor in Azure Cloud Shell quanto sia potente Azure Cloud Shell, una shell basata su browser che ci permette di gestire e sviluppare le risorse in Microsoft Azure senza la necessità di installare e aggiornare i tool di gestione.
La comodità offerta da Azure Cloud Shell è davvero notevole e la semplicità di attivazione, sia tramite browser che tramite app sullo smartphone, ci permette di poterla utilizzare praticamente ovunque.
La shell viene eseguita in un Linux Container basato su Ubuntu 16.04 LTS e include gli strumenti più usati dell’interfaccia della riga di comando, tra cui gli interpreti della shell Linux, i moduli di PowerShell, gli strumenti per amministrare Azure, gli editor di testo, il controllo del codice sorgente, gli strumenti per la compilazione, gli strumenti per i container, gli strumenti per i database e altro ancora. Azure Cloud Shell include anche il supporto per alcuni linguaggi di programmazione più diffusi, ad esempio Node.js, .NET e Python.
Il container utilizzato da Azure Cloud Shell è open source ed è disponibile alla pagina GitHub https://github.com/azure/cloudshell, dove troverete I docker files che sono stati utilizzati per creare la Docker image, che potrete quindi anche eseguire localmente nel vostro ambiente, semplicemente eseguendo I comandi:
1 2 3 |
docker pull mcr.microsoft.com/azure-cloudshell:latest docker run -it mcr.microsoft.com/azure-cloudshell /bin/bash |
Ovviamente ci sono delle differenze tra eseguire l’immagine online ed on-premises e nella pagina GitHub sono evidenziate tutte.
Figura 1: Microsoft Azure Cloud Shell Image presente in GitHub
L’utilizzo di uno Storage Account permette di poter mantenere lo stato delle sessioni anche tra sessioni diverse e ci permette di caricare script personalizzati che possiamo riutilizzare tutte le volte che ci servono.
La prima volta che avviate al Azure Cloud Shell vi verrà chiesto di scegliere tra Bash e PowerShell e successivamente di scegliere uno Storage Account da utilizzare con Azure File Share per rendere persistenti i file.
Integrazione di Azure Cloud Shell in una Azure Virtual Network (VNET)
Da pochi giorni è disponibile in public preview (limitata a solo due regioni: WestUS e WestCentralUS) la possibilità di integrare Azure Cloud Shell con una Virtual Network (VNET). Effettivamente finora il tool girava in una rete Microsoft separata dalle nostre risorse e i comandi eseguiti all’interno del container non erano capaci di accedere a risorse raggiungibili solo dalla VNET (immaginate ad esempio una VM con solo un indirizzo IP privato e nessun endpoint pubblico).
Con questa integrazione il problema è risolto e quindi potrete d’ora in poi gestire anche risorse che sono “isolate” nella VNET.
Figura 2: Funzionamento di Azure Cloud Shell integrata in una Virtual Network (VNET)
Come si può vedere dall’immagine sopra, l’integrazione di Azure Cloud Shell richiede l’utilizzo di Azure Relay, un servizio che consente di esporre in modo sicuro nel cloud pubblico i servizi in esecuzione che vengono eseguiti nella rete aziendale. È possibile eseguire questa operazione senza aprire una porta nel firewall o apportare modifiche che potrebbero avere un notevole impatto all’infrastruttura di rete aziendale.
È bene ricordare che, a differenza di Azure Cloud Shell, il servizio Azure Relay non è gratuito. Nello scenario Cloud Shell viene utilizzata una connessione ibrida ogni volt ache viene utilizzata Azure Cloud Shell. La connessione verrà arrestata automaticamente dopo il completamento della sessione di Cloud Shell.
L’Azure Relay permette al browser di comunicare con il container nella rete privata (VNET). L’istanza di Azure Relay usata per Cloud Shell può essere configurata in modo da controllare le reti che possono accedere alle risorse del container:
- Accessibile dalla rete Internet pubblica: in questa configurazione Cloud Shell fornisce un modo per raggiungere le risorse interne altrimenti dall’esterno.
- Accessibili dalle reti specifiche: in questa configurazione gli amministratori dovranno accedere al portale di Azure da un computer in esecuzione nella rete appropriata per poter usare Cloud Shell.
Per poter distribuire Azure Cloud Shell in una Virtual Network è sufficiente utilizzare il template presente alla pagina https://azure.microsoft.com/en-us/resources/templates/101-cloud-shell-vnet/
Figura 3: Distribuzione di Azure Cloud Shell in una Azure Virtual Network (VNET)
Prima di procedere alla distribuzione delle risorse nevessarie, assocuratevi che il Microsoft.ContainerInstances resource provider sia registrato nella sottoscrizione dove si trova la VNET con cui vi volete integrare. Per verificare la registrazione del resource provider lanciate il comando PowerShell
1 |
Get-AzResourceProvider -ProviderNamespace Microsoft.ContainerInstance | select ResourceTypes,RegistrationState |
ricordandovi di selezionare la sottoscrizione corretta con il comando
1 |
Set-AzContext -Subscription {subscriptionName} |
Figura 4: Verifica della registrazione del Microsoft.ContainerInstances resource provider
Se il RegistrationState riporta la dicitura Registered, non sarà necessario effettuare nessuna azione. Altrimenti il provider deve essere registrato con il comando
1 |
AzResourceProvider -ProviderNamespace Microsoft.ContainerInstance |
Distribuzione delle risorse
Cliccando sul bottone Deploy to Azure avrete la possibilità di connettervi al vostro tenant e di eseguire la creazione delle risorse necessarie previste dal template.
Per procurarvi l’Azure Container Instance OID potete utilizzare il comando PowerShell
1 |
Get-AzADServicePrincipal -DisplayNameBeginsWith 'Azure Container Instance' |
Figura 5: Utilizzo del template per l’integrazione della Azure Cloud Shell in una VNET esistente
Figura 6: Conferma della creazion delle risorse Azure
Figura 7: Creazione delle risorse avvenuta con successo
Come si può vedere dalla figura sotto, le nuove risorse sono state create all’interno del resource group e la VM non ha un ip pubblico.
Figura 8: Risorse create dal template
Creazione dello storage
Per poter ospitare i file utilizzati poi da Azure Cloud Shell è necessario creare uno storage account. Utilizzate il template presente a link https://azure.microsoft.com/en-us/resources/templates/101-cloud-shell-vnet-storage/ per la creazione dello storage account e la sua integrazione con la VNET:
Figura 9: Template per la creazione dello storage account da utilizzare in Azure Cloud Shell
Figura 10: Configurazioni dei parametri del template per la creazione dello storage account da utilizzare in Azure Cloud Shell
Abilitazione di Azure Cloud Shell
Se avete già utilizzato Azure Cloud Shell sarà necessario disconnerlo dal pecedente storage account. Per farlo lanciate la Shell dal pulsante e utilizzate il comando PowerShell
1 |
Dismount-CloudDrive |
Figura 11: Disconnessione del CloudDrive da Azure Cliud Shell
Dopo aver effettuato la disconnessione cliccate sul pulsante Reconnect e cliccate su Bash o Powershell, come mostrato in figura:
Figura 12: Abilitazione di Azure Cloud Shell
Nella schermata in basso cliccate su Show Advanced Settings e completate i campi con le configurazioni richieste. Scegliendo il resource group e la zona corretta, i campi si autocompleteranno.
Cliccate su Create Storage per avviare l’integrazione del container con la VNET.
Figura 13: Inserimento delle informazioni relative allo storage account che verrà utilizzato da Azure Cloud Shell
L’apertura del container dura qualche minuto, in maniera decisamente più lenta rispetto alla classica Azure Cloud Shell. Una volta apparso il prompt avrete la possibilità di lavorare con la Shell.
Figura 14: Il lancio del container di Azure Cloud Shell integrato nella VNET dura qualche minuto
Quando il prompt dei comandi sarà disponibile vi potrete collegare alle risorse presenti nella VNET. Nel mio caso ho effettuato una connessione ad una VM che non ha un IP pubblico ed è presente nella stessa VNET dove ho integrato Azure Cloud Shell.
Figura 15: Connessione ad una VM presente nella stessa VNET dove ho integrato Azure Cloud Shell.
Conclusioni
Poter accedere direttamente dal browser alle risorse presenti in una Azure Virtual Network che non hanno un endpoint pubblico è decisamente conveniente e non abbiamo la necessità di implementare una Jumpbpx o di utilizzare Azure Bastion. Da un browser, da un tablet o da uno smartphone abbiamo la possibilità di operare ovunque ci troviamo, senza la necessità di installare nessuno strumento di amministrazione. Ben Fatto!