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:

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

ricordandovi di selezionare la sottoscrizione corretta con il comando

 

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

 

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

 

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

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!