Come attivare un servizio SFTP in Azure basato su Container

Un protocollo di comunicazione che viene comunemente utilizzato per il trasferimento di file tra differenti realtà aziendali è certamente SFTP (SSH File Transfer Protocol oppure Secure File Transfer Protocol). Ad oggi, in Azure non è disponibile un servizio di piattaforma totalmente gestito che consenta di erogare un accesso tramite il protocollo SFTP. L’attivazione di una macchina virtuale in Azure che ospiti il servizio SFTP comporta costi di attivazione e un effort di gestione non trascurabili. In questo articolo viene riportata una soluzione che è possibile adottare per erogare in ambiente Azure il servizio SFTP, basata su Azure Container Instances (ACI) ed Azure File Shares.

La soluzione proposta si basa sui seguenti componenti:

  • Azure Container Instances (ACI), che in Azure è il metodo più semplice e rapido per l’esecuzione di containers on-demand in un ambiente serverless gestito. Il tutto viene reso possibile senza dover attivare macchine virtuali specifiche e la manutenzione necessaria è pressoché trascurabile. La soluzione Azure Container Instances è idonea in scenari che richiedono containers isolati, senza la necessità di adottare un sistema di orchestrazione. Il servizio Azure Container Instances comporta dei costi minimi che dipendono dal numero di vCPU e di GBs di memoria utilizzati dal container group. Per maggiori dettagli sui costi è possibile consultare la relativa pagina ufficiale Microsoft.
  • Azure File, il servizio Azure gestito che permette di accedere a file shares nel cloud tramite il protocollo Server Message Block (SMB).
Figura 1 – Architettura Azure

Sarà quindi attivato un container docker basato su Linux per erogare il servizio SFTP tramite Azure Container Instance (ACI). Per poter avere un accesso persistente allo storage dal container verrà fatto il mount di una Azure Files Shares. I file trasferiti tramite il servizio SFTP saranno pertanto anche accessibili tramite protocollo SMB, gestendo le opportune autorizzazioni, anche fermando l’esecuzione del container creato.

Per effettuare il deploy di questa soluzione è possibile utilizzare come base di partenza i template referenziati in questo documento Microsoft. Si tratta di due template, dove il primo prevede anche la creazione di uno storage account, ma di tipologia V1.

Figura 2 – Deployment tramite template custom

Al fine di ottenere una corretta integrazione con ambienti Azure esistenti e per garantire un accesso filtrato al servizio SFTP è necessario effettuare il deploy di container instances all’interno di una virtual network di Azure. Per fare ciò è necessario attivare una funzionalità in preview, che come tale ha alcune limitazioni, tra le quali non supporta scenari di Virtual Network tra di loro in peering. In questo scenario, qualora sia richiesta la pubblicazione del servizio SFTP verso internet, questa dovrà necessariamente avvenire tramite Azure Firewall, in quanto non è supportata l’assegnazione diretta di IP Pubblici agli Azure Container configurati in Virtual Network. Al fine di migliorare le security posture del vostro ambiente Azure è inoltre consigliabile:

  • Adottare un approccio legato alla micro-segmentazione e alla definizione di perimetri granulari nell’architettura di rete in Azure. Per fare ciò, oltre all’adozione di Azure Firewall, è necessario prevedere l’utilizzo dei Network Security Groups (NSGs), lo strumento utilizzato per segregare il traffico di rete internamente alla Virtual Network di Azure. Tramite delle regole di deny e permit è possibile filtrate le comunicazioni tra le differenti subnet dove sono attestati i differenti workload applicativi.
  • Prevedere l’utilizzo dei Virtual Network (VNet) service endpoints per aumentare il livello di sicurezza dello Storage Account, prevenendo accessi non autorizzati. I vNet Service Endpoints consentono di isolare maggiormente i servizi Azure, permettendo l’accesso ad essi solamente da una o più subnet definite nelle proprie Virtual Network. Questa funzionalità garantisce inoltre che tutto il traffico generato dalle proprie vNet verso i servizi Azure rimanga sempre all’interno della rete di backbone di Azure.

Per rendere completa questa soluzione è necessario prevedere anche una strategia di protezione dei dati che vengono posizionati sullo storage account tramite il servizio SFTP. Il backup dei contenuti trasferiti tramite servizio SFTP su Azure file shares potrà avvenire utilizzando Azure Backup. Anche in questo caso si tratta al momento di una funzionalità in preview, quindi si potrà avere una protezione con una frequenza giornaliera.

Ad oggi, in alternativa a questa soluzione è possibile adottare soluzioni di terze parti disponibili nel marketplace di Azure per erogare il servizio SFTP. Si tratta di soluzioni nettamente più costose che tipicamente richiedono un effort maggiore per il deployment e per la relativa gestione.

Conclusioni

In attesa che Microsoft rilasci un servizio SFTP totalmente gestito in Azure, questa soluzione proposta consente di erogare in modo semplice e veloce questo servizio, con costi ridotti e senza dover mantenere e gestire delle macchine virtuali. L’adozione di questa soluzione necessità l’integrazione con altri servizi della piattaforma Azure per realizzarla in modo efficace, senza tralasciare l’aspetto sicurezza. Al momento potrebbe essere necessario utilizzare servizi in preview, quindi non ufficialmente supportati in ambiente di produzione.