Guida alla creazione di una VPC AWS sicura da zero

Costruisci una VPC AWS sicura con intervalli CIDR pianificati, subnet pubbliche e private, tabelle di routing, NAT, gruppi di sicurezza e log di flusso.

Guida alla creazione di una VPC AWS sicura da zero

Una VPC AWS fornisce ai tuoi risorse cloud un confine di rete privato, ma la configurazione predefinita raramente è sufficiente per la produzione. Se inserisci database in subnet pubbliche, riutilizzi intervalli CIDR sovrapposti o apri regole di gruppo di sicurezza troppo ampie, puoi creare problemi difficili da risolvere in seguito.

Questa guida mostra come costruire una VPC AWS sicura da zero con subnet pubbliche per i punti di ingresso, subnet private per carichi di lavoro applicativi e database, tabelle di routing, NAT, gruppi di sicurezza e monitoraggio di base.

Comprensione dei concetti fondamentali della VPC

Prima di immergerti nei passaggi di configurazione, è essenziale comprendere i concetti fondamentali della VPC AWS:

  • VPC (Virtual Private Cloud): Una rete virtuale dedicata al tuo account AWS. È una sezione logicamente isolata del cloud AWS in cui puoi avviare risorse AWS.
  • Subnet: Un intervallo di indirizzi IP nella tua VPC. Puoi avviare risorse AWS in subnet che crei. Le subnet sono definite dal loro blocco CIDR, che è un sottoinsieme del blocco CIDR della VPC.
  • Tabella di routing: Un insieme di regole, chiamate route, utilizzate per determinare dove viene diretto il traffico di rete dalla tua subnet o dal gateway.
  • Internet Gateway (IGW): Un componente della VPC che consente il traffico instradabile su Internet per risorse con indirizzi IP pubblici e una route verso il gateway.
  • NAT Gateway (Network Address Translation): Un servizio NAT altamente disponibile e scalabile che consente l'accesso a Internet per le istanze in una subnet privata, impedendo al contempo connessioni in entrata avviate da Internet.
  • Gruppo di sicurezza: Funge da firewall virtuale per le tue istanze per controllare il traffico in entrata e in uscita. Opera a livello di istanza.
  • Network Access Control List (NACL): Un livello di sicurezza opzionale per la tua VPC che funge da firewall per controllare il traffico in entrata e in uscita da una o più subnet. Opera a livello di subnet.

Creazione passo-passo della VPC

Iniziamo a costruire la tua VPC sicura.

1. Pianifica lo schema degli indirizzi IP

Il primo e più critico passo è pianificare l'intervallo di indirizzi IP per la VPC e le sue subnet. Ciò comporta la selezione di un blocco Classless Inter-Domain Routing (CIDR) per la tua VPC.

  • Blocco CIDR della VPC: Scegli un intervallo di indirizzi IP privati che non si sovrapponga alla tua rete on-premises o ad altre VPC AWS a cui potresti connetterti tramite VPN o Direct Connect. AWS consiglia di utilizzare gli intervalli di indirizzi IP RFC 1918 (10.0.0.0/8, 172.16.0.0/12 o 192.168.0.0/16). Il blocco CIDR può essere da /16 (65.536 indirizzi IP) a /28 (16 indirizzi IP).

    • Esempio: 10.0.0.0/16 fornisce un ampio spazio di indirizzi per la tua VPC.
  • Blocchi CIDR delle subnet: Dividi il blocco CIDR della tua VPC in blocchi CIDR più piccoli per le tue subnet. Assicurati che il blocco CIDR di ogni subnet sia un sottoinsieme del blocco CIDR della VPC e non si sovrapponga ad altre subnet.

    • **Esempio (se la VPC è 10.0.0.0/16):
      • Subnet pubblica 1: 10.0.1.0/24
      • Subnet pubblica 2: 10.0.2.0/24
      • Subnet privata 1: 10.0.10.0/24
      • Subnet privata 2: 10.0.11.0/24

2. Crea la tua VPC

Vai al dashboard VPC nella console di gestione AWS e crea una nuova VPC.

  1. Vai a Dashboard VPC > Le tue VPC > Crea VPC.
  2. Tag nome: Dai un nome descrittivo alla tua VPC (ad esempio, MySecureVPC).
  3. Blocco CIDR IPv4: Inserisci il blocco CIDR che hai pianificato (ad esempio, 10.0.0.0/16).
  4. Blocco CIDR IPv6: Puoi scegliere di abilitare un blocco CIDR IPv6 se necessario.
  5. Tenancy: Per la maggior parte dei casi d'uso, Default è adatto. Dedicated offre isolamento hardware a un costo maggiore.
  6. Clicca Crea VPC.

3. Crea le subnet

Ora, crea le tue subnet pubbliche e private all'interno della VPC.

  1. Vai a Dashboard VPC > Subnet > Crea subnet.
  2. ID VPC: Seleziona la VPC che hai appena creato.
  3. Nome subnet: Fornisci un nome (ad esempio, MyPublicSubnet-AZ1).
  4. Zona di disponibilità: Scegli una zona di disponibilità (AZ). È buona pratica distribuire le risorse su più AZ per l'alta disponibilità.
  5. Blocco CIDR IPv4: Inserisci il blocco CIDR per questa subnet (ad esempio, 10.0.1.0/24).
  6. Clicca Crea subnet.

Ripeti questo processo per creare tutte le tue subnet pubbliche e private pianificate, assicurandoti che siano in diverse zone di disponibilità per la resilienza.

4. Crea un Internet Gateway (IGW)

Un IGW è necessario affinché le tue subnet pubbliche possano accedere a Internet.

  1. Vai a Dashboard VPC > Internet Gateway > Crea internet gateway.
  2. Tag nome: MyVPCInternetGateway.
  3. Clicca Crea internet gateway.
  4. Dopo la creazione, seleziona l'IGW, clicca Azioni e scegli Collega a VPC. Seleziona la tua VPC e clicca Collega internet gateway.

5. Crea le tabelle di routing

Le tabelle di routing dirigono il traffico all'interno della tua VPC. In genere avrai bisogno di almeno due: una per le subnet pubbliche e una per quelle private.

a. Tabella di routing pubblica:

  1. Vai a Dashboard VPC > Tabelle di routing > Crea tabella di routing.
  2. Tag nome: MyPublicRouteTable.
  3. VPC: Seleziona la tua VPC.
  4. Clicca Crea tabella di routing.
  5. Seleziona la MyPublicRouteTable appena creata.
  6. Sotto la scheda Route, clicca Modifica route.
  7. Clicca Aggiungi route.
  8. Destinazione: 0.0.0.0/0 (tutto il traffico IPv4).
  9. Target: Seleziona Internet Gateway e scegli il tuo IGW.
  10. Clicca Salva route.
  11. Associa subnet: Vai alla scheda Associazioni subnet, clicca Modifica associazioni subnet e associa le tue subnet pubbliche a questa tabella di routing.

b. Tabella di routing privata (con NAT Gateway):

Per consentire alle istanze nelle subnet private di avviare connessioni in uscita verso Internet (ad esempio, per aggiornamenti software) senza essere direttamente accessibili da Internet, utilizzerai un NAT Gateway.

  1. Crea un NAT Gateway:

    • Vai a Dashboard VPC > NAT Gateway > Crea NAT gateway.
    • Nome: MyNATGateway.
    • Subnet: Seleziona una delle tue subnet pubbliche.
    • Tipo di connettività: Pubblica.
    • ID allocazione IP elastico: Clicca Alloca IP elastico per creare e assegnare un nuovo indirizzo IP elastico.
    • Clicca Crea NAT gateway.
    • Nota: I NAT Gateway comportano costi. Per la connettività di base in uscita, assicurati di avere sufficienti indirizzi IP disponibili nella tua subnet pubblica per il NAT Gateway.
  2. Crea la tabella di routing privata:

    • Vai a Dashboard VPC > Tabelle di routing > Crea tabella di routing.
    • Tag nome: MyPrivateRouteTable.
    • VPC: Seleziona la tua VPC.
    • Clicca Crea tabella di routing.
    • Seleziona MyPrivateRouteTable.
    • Sotto la scheda Route, clicca Modifica route.
    • Clicca Aggiungi route.
    • Destinazione: 0.0.0.0/0.
    • Target: Seleziona NAT Gateway e scegli il tuo NAT Gateway.
    • Clicca Salva route.
    • Associa subnet: Vai alla scheda Associazioni subnet, clicca Modifica associazioni subnet e associa le tue subnet private a questa tabella di routing.

6. Configura i gruppi di sicurezza

I gruppi di sicurezza fungono da firewall stateful a livello di istanza. Permettono o negano il traffico in base alle regole che definisci.

  • Buona pratica: Crea gruppi di sicurezza specifici per diversi tipi di risorse (ad esempio, server web, server database, server applicativi). Evita di utilizzare regole eccessivamente permissive.

Esempio: Gruppo di sicurezza per server web (WebServerSG)

  1. Vai a Dashboard VPC > Gruppi di sicurezza > Crea gruppo di sicurezza.
  2. Nome gruppo di sicurezza: WebServerSG.
  3. Descrizione: Consenti accesso HTTP e HTTPS.
  4. VPC: Seleziona la tua VPC.
  5. Regole in entrata:
    • Tipo: HTTP, Protocollo: TCP, Intervallo porte: 80, Origine: 0.0.0.0/0 (o un intervallo IP fidato più specifico).
    • Tipo: HTTPS, Protocollo: TCP, Intervallo porte: 443, Origine: 0.0.0.0/0 (o un intervallo IP fidato più specifico).
    • (Opzionale) Tipo: SSH, Protocollo: TCP, Intervallo porte: 22, Origine: Il tuo indirizzo/intervallo IP fidato (cruciale per la gestione).
  6. Regole in uscita: Per impostazione predefinita, consenti tutto il traffico in uscita (0.0.0.0/0). Puoi limitarlo se necessario.
  7. Clicca Crea gruppo di sicurezza.

Esempio: Gruppo di sicurezza per server database (DatabaseSG)

  1. Crea un nuovo gruppo di sicurezza chiamato DatabaseSG.
  2. Regole in entrata:
    • Aggiungi una regola che consenta il traffico sulla porta predefinita del tuo database (ad esempio, 3306 per MySQL, 5432 per PostgreSQL) solo dal gruppo di sicurezza dei tuoi server applicativi (ad esempio, WebServerSG o AppServerSG).
    • Origine: Seleziona Personalizzato e quindi digita l'ID del gruppo di sicurezza del tuo server applicativo.
  3. Regole in uscita: In genere consenti tutto il traffico in uscita.

7. Configura le Network Access Control List (NACL)

Le NACL sono firewall stateless che operano a livello di subnet. Fungono da ulteriore livello di difesa.

  • Stateful vs. Stateless: I gruppi di sicurezza sono stateful (se consenti il traffico in entrata, la risposta in uscita è automaticamente consentita). Le NACL sono stateless (devi definire esplicitamente le regole sia per il traffico in entrata che per quello in uscita).

  • Buona pratica: Le NACL sono spesso lasciate con configurazioni predefinite a meno che non sia richiesto un controllo di accesso specifico a livello di subnet. Possono essere complesse da gestire.

Se devi utilizzare le NACL:

  1. Vai a Dashboard VPC > Network ACL > Crea network ACL.
  2. Tag nome: MyNacl.
  3. VPC: Seleziona la tua VPC.
  4. Clicca Crea network ACL.
  5. Seleziona la NACL e, sotto Regole in entrata, aggiungi le regole.
  6. Numeri di regola: Le NACL valutano le regole in ordine, a partire dal numero di regola più basso. Usa numeri come 100, 200, 300, ecc., per consentire future inserzioni di regole.
  7. Consenti/Nega: Specifica se consentire o negare il traffico.
  8. Protocollo, Intervallo porte, Origine/Destinazione: Definisci i parametri del traffico.
  9. Ricorda di configurare le corrispondenti Regole in uscita.
  10. Associa la NACL alle tue subnet andando alla scheda Associazioni subnet.

Scenario di distribuzione di esempio

Considera una tipica applicazione web:

  • VPC: 10.0.0.0/16

  • Subnet pubblica 1 (us-east-1a): 10.0.1.0/24 (Associata a MyPublicRouteTable e IGW)

  • Subnet pubblica 2 (us-east-1b): 10.0.2.0/24 (Associata a MyPublicRouteTable e IGW)

  • Subnet privata 1 (us-east-1a): 10.0.10.0/24 (Associata a MyPrivateRouteTable e NAT Gateway)

  • Subnet privata 2 (us-east-1b): 10.0.11.0/24 (Associata a MyPrivateRouteTable e NAT Gateway)

  • Internet Gateway: Collegato alla VPC.

  • NAT Gateway: Distribuito in Subnet pubblica 1 con un IP elastico.

  • Tabella di routing pubblica: Dirige 0.0.0.0/0 verso l'IGW. Associata alle subnet pubbliche.

  • Tabella di routing privata: Dirige 0.0.0.0/0 verso il NAT Gateway. Associata alle subnet private.

  • Gruppo di sicurezza per i bilanciatori di carico (nelle subnet pubbliche): Consente HTTP/HTTPS da 0.0.0.0/0.

  • Gruppo di sicurezza per i server web (nelle subnet private): Consente HTTP/HTTPS dal SG del bilanciatore di carico e SSH dal tuo IP fidato.

  • Gruppo di sicurezza per i database (nelle subnet private): Consente MySQL/PostgreSQL dal SG del server web.

Considerazioni critiche sulla sicurezza

  • Principio del minimo privilegio: Concedi solo le autorizzazioni necessarie per i tuoi gruppi di sicurezza e NACL. Limita gli indirizzi IP di origine il più possibile.
  • Utilizza più zone di disponibilità: Distribuisci le tue subnet e risorse su più AZ per l'alta disponibilità e il disaster recovery. Ciò si ottiene creando subnet in diverse AZ e associandole a tabelle di routing appropriate.
  • Rivedi regolarmente gruppi di sicurezza e NACL: Man mano che la tua applicazione evolve, anche le tue regole di sicurezza dovrebbero farlo. Controlla e aggiorna periodicamente.
  • Evita subnet pubbliche per risorse sensibili: Database, server applicativi e altre risorse sensibili dovrebbero risiedere in subnet private. Solo le risorse che richiedono accesso diretto a Internet (come bilanciatori di carico o host bastione) dovrebbero essere in subnet pubbliche.
  • Considera gli host bastione: Se devi connetterti tramite SSH a istanze in subnet private, considera l'utilizzo di un host bastione protetto in una subnet pubblica. Limita l'accesso SSH all'host bastione a indirizzi IP noti.
  • Log di flusso VPC: Abilita i log di flusso VPC per catturare informazioni sul traffico IP in entrata e in uscita dalle interfacce di rete nella tua VPC. Questo è prezioso per il monitoraggio della sicurezza e la risoluzione dei problemi.
  • Segmentazione della rete: Utilizza diverse VPC e subnet per segmentare gli ambienti (ad esempio, sviluppo, staging, produzione) e diversi livelli della tua applicazione.

Considerazione finale

Costruisci la VPC attorno al flusso del traffico: le subnet pubbliche dovrebbero esporre solo bilanciatori di carico, NAT gateway o accesso bastione strettamente controllato, mentre le risorse applicative e di database rimangono private. Dopo il lancio, continua a rivedere gruppi di sicurezza, tabelle di routing e log di flusso VPC in modo che la rete rimanga allineata al funzionamento effettivo della tua applicazione.