Una panoramica aggiornata sui diversi modi per collegarsi in sicurezza alle istanze EC2 private
L'accesso alle istanze EC2 private è un'esigenza ricorrente per determinati utenti all'interno delle organizzazioni, di norma amministratori e alcuni sviluppatori autorizzati. Tradizionalmente, gli utenti AWS hanno fatto ricorso a bastion (jump box), VPN (Virtual Private Connection) o AWS Direct Connect per rispondere a questa esigenza. Sebbene AWS EC2 offra da tempo alternative moderne a queste soluzioni "old-school", un recente miglioramento introdotto a giugno 2023 a uno di questi approcci moderni rende opportuno un aggiornamento. In questo articolo vediamo le opzioni alternative per collegarsi alle istanze EC2 private, i relativi vantaggi e svantaggi e come utilizzarle.
Nota: in questo contesto, per istanza privata si intende un'istanza EC2 priva di indirizzo IPv4 pubblico oppure non avviata in una subnet VPC pubblica. Per definizione, una subnet pubblica è qualunque subnet la cui tabella di routing instrada il traffico verso Internet attraverso un Internet Gateway.
Una sintesi della connessione SSH "tradizionale".
Esistono due modalità "tradizionali" tipiche per collegarsi in sicurezza a un'istanza EC2 privata: 1) creare un tunnel cifrato sicuro tramite Client-VPN o Site-to-Site VPN (in questo gruppo includiamo anche AWS Direct Connect, sebbene tecnicamente non sia un tunnel) e 2) utilizzare un'istanza EC2 pubblica come "jump box" (comunemente nota come host "bastion") per aprire una nuova connessione verso l'istanza privata. Entrambe le opzioni hanno un costo e (in determinati casi) richiedono un lavoro di configurazione tutt'altro che banale. Vediamole nel dettaglio:
- AWS Client-VPN, AWS Site-to-Site VPN (o soluzioni VPN analoghe) o AWS Direct Connect
Questo approccio è stato (e rimane) un modo diffuso per consentire la connettività da qualsiasi rete a una rete privata, attraverso un tunnel cifrato (nel caso delle VPN) o un collegamento privato dedicato (nel caso di AWS Direct Connect). Comporta però un costo, perché serve almeno un'istanza o un servizio gestito come terminazione della connessione VPN e, in alcuni casi, costi legati al tempo di connessione, oltre a un livello di complessità variabile.
- Jump box o Bastion
Opzione ancora più diffusa, con costi e complessità inferiori rispetto alla configurazione di VPN/Direct Connect, prevede l'utilizzo di un'istanza EC2 pubblica che riceve la connessione dal client e ne apre poi una nuova verso l'istanza EC2 privata (vedi diagramma sotto). È utilizzabile sia per SSH (di norma tramite SSH Agent Forwarding) sia per RDP (tramite Remote Desktop Gateway). Lo svantaggio è che (oltre al costo dell'istanza bastion) si amplia la superficie di attacco, esponendo pubblicamente l'istanza bastion stessa. Naturalmente, occorre adottare tutte le misure di sicurezza disponibili per proteggere gli host bastion: accesso controllato alle credenziali della macchina (cioè le chiavi private), restrizioni di rete tramite security group e Network Access Control List (NACL) e patching frequente del sistema operativo. Tutto questo si traduce in un sovraccarico operativo per la propria infrastruttura.

Connessione basata su Bastion
Sebbene le opzioni descritte sopra siano tecnicamente valide, AWS mette a disposizione due metodi moderni, più gestibili ed economici per garantire lo stesso tipo di accesso alle istanze private. Vediamoli.
METODO DI ACCESSO 1: Session Manager consente di evitare del tutto SSH (se lo si desidera).
AWS Session Manager, introdotto nel 2018, è una funzionalità di AWS Systems Manager che permette di gestire in modo interattivo le proprie istanze EC2, gli edge device e i server e le macchine virtuali (VM) on-premise.
Quando si usa Session Manager, SSH o RDP non sono richiesti (non devono essere installati, configurati né in esecuzione) sull'istanza EC2 privata a cui ci si collega. È comunque possibile usare i protocolli SSH o RDP per collegarsi all'istanza EC2 privata tramite Session Manager (vedi sotto).
Configurazione di Session Manager:
- Sull'istanza EC2 privata deve essere in esecuzione il Systems Manager Agent, che è preinstallato in diverse AMI, ma può anche essere installato manualmente (e non solo sulle istanze EC2).
- La subnet a cui è collegata l'istanza EC2 privata di destinazione deve avere connettività Internet diretta o indiretta tramite un Internet Gateway o un NAT Gateway. In alternativa, è possibile configurare VPC endpoint per Session Manager per gestire istanze EC2 private senza accesso Internet in uscita. Vediamo nel dettaglio queste due opzioni:
- Opzione di configurazione di rete 1: se si dispone già di un NAT Gateway in una subnet pubblica (e non si ha problema a sostenere il costo del traffico aggiuntivo del Systems Manager Agent elaborato dal NAT Gateway), il diagramma seguente mostra come l'agente di Session Manager necessiti di connettività in uscita verso gli endpoint di Session Manager per consentire l'avvio delle sessioni client.

Session Manager con NAT Gateway
- Opzione di configurazione di rete 2: se si preferisce non utilizzare un Internet Gateway e un NAT Gateway, occorre un VPC Endpoint per ciascun servizio: Systems Manager, Session Manager Message Gateway Service e Message Delivery Service. Per maggiori dettagli, consulti questo e questo. Da notare che i VPC Endpoint hanno propri Security Group (e Resource Policy) utilizzabili per un ulteriore livello di controllo di accesso a livello di rete e di identità.

Session Manager con VPC Endpoint
Utilizzo di Session Manager:
- È possibile usare la AWS Management Console o la AWS Command Line Interface (AWS CLI) per avviare sessioni verso i nodi a cui l'amministratore di sistema ha concesso l'accesso tramite policy AWS Identity and Access Management (IAM). Da notare che, se si preferisce la AWS CLI, occorre prima installare il plugin di Session Manager per la AWS CLI.
- Si dispone di un controllo di accesso centralizzato alle istanze tramite policy IAM, sia sull'istanza di destinazione (il ruolo assegnato all'istanza necessita dei permessi che consentano al Systems Manager Agent di interagire con le API di Systems Manager/Session Manager) sia sull'identità che tenta di accedere all'istanza EC2 (l'utente o il ruolo IAM necessita dei permessi per avviare una connessione Session Manager verso l'istanza).
- È possibile assegnare i permessi all'istanza a livello di account utilizzando un ruolo AWS Identity and Access Management (IAM) oppure a livello di istanza tramite un instance profile. Se il caso d'uso lo permette, AWS consiglia di concedere l'accesso a livello di account utilizzando la Default Host Management Configuration.
- È comunque possibile utilizzare i protocolli SSH o RDP (in tal caso serve un file di credenziali sul client).
- È persino possibile collegarsi in sicurezza a un'istanza di database Amazon RDS o Amazon EC2 con la GUI preferita, utilizzando il port forwarding e un "bastion" EC2 in una subnet privata.
Altre considerazioni su Session Manager:
- Session Manager supporta funzionalità di logging e auditing. È possibile sfruttare AWS CloudTrail e Amazon CloudWatch Logs (e, facoltativamente, anche un bucket S3) per conservare un registro di tutte le attività di sessione. Il logging non è disponibile per le sessioni di Session Manager che si collegano tramite port forwarding o SSH, perché SSH cifra tutti i dati di sessione e Session Manager funge da semplice tunnel per le connessioni SSH.
- Non sono previsti costi aggiuntivi per accedere alle istanze Amazon EC2 tramite Session Manager. Si applicano le tariffe standard per il trasferimento dati. L'utilizzo di Session Manager per accedere in modo interattivo a istanze on-premise comporta invece un costo.
METODO DI ACCESSO 2: EC2 Instance Connect Endpoint è la soluzione più recente per accedere a una macchina via SSH/RDP.
EC2 Instance Connect Endpoint consente di collegarsi a un'istanza tramite SSH o RDP utilizzando SSH basato su chiavi effimere, senza che l'istanza debba avere un indirizzo IPv4 pubblico. Prima di giugno 2023, EC2 Instance Connect offriva una funzionalità simile ma consentiva l'accesso solo alle istanze EC2 pubbliche (opzione tuttora disponibile per accedere a questo tipo di macchine). EC2 Instance Connect è stato introdotto nel 2019.
Configurazione di EC2 Instance Connect Endpoint:
- Non è richiesto alcun agente sull'istanza di destinazione. Questo approccio consente di accedere anche a istanze che potrebbero non supportare agenti, come gli appliance di terze parti.
- Non è necessario disporre di connettività Internet diretta o indiretta tramite Internet Gateway o NAT Gateway. Occorre però configurare un endpoint in una subnet del VPC che ospita l'istanza di destinazione. Al momento della stesura di questo articolo (novembre 2023) è possibile creare un solo EC2 Instance Connect Endpoint per VPC (vedi Quotas). Sono necessari alcuni minuti perché l'Endpoint diventi disponibile.

EC2 Instance Connect Endpoint
Utilizzo di EC2 Instance Connect Endpoint:
- È possibile utilizzare la AWS Management Console, la propria chiave e il proprio client SSH oppure la AWS Command Line Interface ( AWS CLI) per collegarsi ai propri nodi privati. Occorre aprire un tunnel tramite la AWS CLI prima di avviare una connessione con un client RDP.
- È possibile usare le proprie chiavi SSH (in tal caso serve un file di credenziali sul client). Per creare una connessione RDP utilizzando l'utente amministratore predefinito, occorre la chiave privata della Key Pair predefinita associata all'EC2 per decifrare la password iniziale dell'amministratore, esattamente come avviene per la connessione a istanze Windows pubbliche.
- EC2 Instance Connect Endpoint offre un controllo di accesso centralizzato alle istanze, combinando controlli basati sull'identità ( permessi IAM assegnati all'utente o ruolo IAM che avvia la connessione) e controlli di accesso a livello di rete ( Security Group applicati all'Endpoint e all'istanza di destinazione). È possibile chiedere a EC2 Instance Connect Endpoint di preservare l'indirizzo IP del client. Questo aspetto può influenzare la configurazione di Security Group e Network Access Control List (NACL).
Altre considerazioni su EC2 Instance Connect Endpoint:
- Utilizza credenziali temporanee: anche se una chiave privata venisse compromessa, non potrebbe essere usata oltre il periodo di validità delle credenziali.
- È possibile registrare le operazioni sulle risorse e sottoporre ad audit le connessioni stabilite tramite EC2 Instance Connect Endpoint con i log di AWS CloudTrail. A differenza di Session Manager, il logging dell'attività utente va gestito a livello di sistema operativo dell'istanza di destinazione.
- Esistono alcune limitazioni da tenere presenti. Per citarne un paio: sono supportate solo le porte 22 e 3389 ed EC2 Instance Connect Endpoint non supporta connessioni a un'istanza tramite indirizzi IPv6.
- Non sono previsti costi aggiuntivi per l'utilizzo degli EC2 Instance Connect Endpoint. Si applicano le tariffe standard per il trasferimento dati.
Conclusioni
In questo articolo ho analizzato quattro metodi per collegarsi in sicurezza a istanze EC2 private su AWS.
Tra i metodi tradizionali troviamo: 1) la configurazione di AWS Client-VPN, Site-to-Site VPN o AWS Direct Connect (che prevedono la creazione di tunnel cifrati o link dedicati ma comportano complessità e costi) e 2) l'uso di un'istanza EC2 pubblica come "jump box" (soluzione economica ma che amplia la superficie di attacco).
L'articolo presenta poi due approcci moderni, più semplici ed economici:
- Session Manager: una funzionalità di AWS Systems Manager che consente la gestione interattiva delle istanze EC2 senza richiedere SSH o RDP (utilizzabili comunque in via opzionale) sull'istanza privata. Sfrutta il Systems Manager Agent, richiede che la subnet di destinazione disponga di connettività Internet in uscita (tramite NAT Gateway o VPC Interface Endpoint) e offre un controllo di accesso centralizzato tramite policy IAM.
- EC2 Instance Connect Endpoint: abilita l'accesso SSH o RDP a istanze prive di indirizzi IPv4 pubblici. Non richiede un agente sull'istanza di destinazione né una connettività Internet diretta (è sufficiente collegare l'Endpoint a una subnet del VPC). Il controllo di accesso è gestito tramite permessi IAM e Security Group.
Sia Session Manager sia EC2 Instance Connect Endpoint offrono funzionalità di auditing (con Session Manager che consente in via opzionale anche il logging dell'attività di sessione) e non comportano costi aggiuntivi per l'accesso alle istanze Amazon EC2, fatta eccezione per le tariffe standard di trasferimento dati.
La invitiamo a iniziare fin da subito a utilizzare queste opzioni di connessione evolute, anche perché possono aiutarla a contenere l'impatto delle nuove tariffe per gli indirizzi IPv4 pubblici annunciate da AWS a partire dal 1° febbraio 2024. Se ha bisogno di assistenza, i nostri Customer Reliability Engineering (CRE) e Technical Account Manager (TAM) di DoiT saranno lieti di supportarla: non esiti a contattarci!