Guida introduttiva ad Amazon VPC utilizzando la CLI AWS - Amazon Virtual Private Cloud

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Guida introduttiva ad Amazon VPC utilizzando la CLI AWS

Questo tutorial ti guida nella creazione di un Virtual Private Cloud (VPC) utilizzando l'interfaccia a riga di AWS comando ().AWS CLI Imparerai come configurare un VPC con sottoreti pubbliche e private, configurare la connettività Internet e distribuire EC2 istanze per dimostrare un'architettura di applicazioni web comune.

Prerequisiti

Prima di iniziare questo tutorial, assicurati di disporre degli elementi indicati di seguito:

  1. AWS CLI Il. Se devi installarla, segui la guida all’installazione della AWS CLI.

  2. Hai configurato il tuo AWS CLI con le credenziali appropriate. Esegui aws configure se non hai ancora configurato le credenziali.

  3. Nozioni di base sui concetti di rete.

  4. Identity and Access Management per Amazon VPCper creare e gestire risorse VPC nel tuo AWS account.

Considerazioni sui costi

Questo tutorial crea AWS risorse che potrebbero comportare costi nel tuo account. Il costo principale proviene dal gateway NAT (0,045 USD all'ora più i costi di elaborazione dei dati) e dalle EC2 istanze (t2.micro, circa 0,0116 USD all'ora ciascuna). Se completi questo tutorial in un’ora e poi elimini tutte le risorse, il costo totale sarà di circa 0,07 $. Per ottimizzare i costi negli ambienti di sviluppo, valuta la possibilità di utilizzare un’istanza NAT invece di un gateway NAT, in modo da ridurre notevolmente i costi.

Verifichiamo che il tuo sia configurato correttamente prima di procedere. AWS CLI

aws configure list

Dovresti vedere la tua chiave di AWS accesso, la chiave segreta e la regione predefinita. Verifica inoltre di disporre delle autorizzazioni necessarie per creare risorse VPC.

aws sts get-caller-identity

Questo comando visualizza l'ID dell' AWS account, l'ID utente e l'ARN, confermando che le credenziali sono valide.

Crea un VPC

Un Virtual Private Cloud (VPC) è una rete virtuale dedicata al tuo account. AWS In questa sezione, potrai creare un VPC con un intervallo CIDR di 10.0.0.0/16, che fornisce fino a 65.536 indirizzi IP.

Crea il VPC

Il comando seguente crea un nuovo VPC e gli assegna un tag nome.

aws ec2 create-vpc --cidr-block 10.0.0.0/16 --tag-specifications 'ResourceType=vpc,Tags=[{Key=Name,Value=MyVPC}]'

Annota l’ID VPC visualizzato nei risultati. Ti servirà per i comandi successivi. Ai fini di questo tutorial, useremo "vpc-0123456789abcdef0" come ID VPC di esempio. Sostituiscilo con l’ID VPC effettivo in tutti i comandi.

Abilita il supporto DNS e i nomi host

Per impostazione predefinita, la risoluzione DNS e i nomi host DNS sono disabilitati in un nuovo VPC. Abilita queste funzionalità per consentire alle istanze nel VPC di risolvere i nomi di dominio.

aws ec2 modify-vpc-attribute --vpc-id vpc-0123456789abcdef0 --enable-dns-support aws ec2 modify-vpc-attribute --vpc-id vpc-0123456789abcdef0 --enable-dns-hostnames

Questi comandi non producono risultati se l’operazione viene completata. Sono stati abilitati il supporto DNS e la risoluzione dei nomi host per il VPC.

Creazione di sottoreti

Le sottoreti sono segmenti di un intervallo di indirizzi IP di un VPC in cui è possibile inserire gruppi di risorse isolate. In questa sezione, potrai creare sottoreti pubbliche e private in due zone di disponibilità per assicurare una disponibilità elevata.

Ottieni zone di disponibilità disponibili

Innanzitutto, recupera le zone di disponibilità disponibili nella tua regione.

aws ec2 describe-availability-zones

Per questo tutorial verrà illustrato l’utilizzo delle prime due zone di disponibilità. Annota i rispettivi nomi indicati nei risultati (ad esempio, "us-east-1a" e "us-east-1b").

Creazione di sottoreti pubbliche

Le sottoreti pubbliche vengono utilizzate per risorse che devono essere accessibili da Internet, come i server web.

aws ec2 create-subnet \ --vpc-id vpc-0123456789abcdef0 \ --cidr-block 10.0.0.0/24 \ --availability-zone us-east-1a \ --tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=Public-Subnet-AZ1}]'

Annota l’ID della sottorete indicato nei risultati. Ai fini di questo tutorial, useremo "subnet-0123456789abcdef0" come esempio per la prima sottorete pubblica.

aws ec2 create-subnet \ --vpc-id vpc-0123456789abcdef0 \ --cidr-block 10.0.1.0/24 \ --availability-zone us-east-1b \ --tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=Public-Subnet-AZ2}]'

Annota l’ID della sottorete indicato nei risultati. Ai fini di questo tutorial, useremo "subnet-0123456789abcdef1" come esempio per la seconda sottorete pubblica.

Creazione di sottoreti private

Le sottoreti private vengono utilizzate per risorse che non dovrebbero essere accessibili direttamente da Internet, come i database.

aws ec2 create-subnet \ --vpc-id vpc-0123456789abcdef0 \ --cidr-block 10.0.2.0/24 \ --availability-zone us-east-1a \ --tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=Private-Subnet-AZ1}]'

Annota l’ID della sottorete indicato nei risultati. Ai fini di questo tutorial, useremo "subnet-0123456789abcdef2" come esempio per la prima sottorete privata.

aws ec2 create-subnet \ --vpc-id vpc-0123456789abcdef0 \ --cidr-block 10.0.3.0/24 \ --availability-zone us-east-1b \ --tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=Private-Subnet-AZ2}]'

Annota l’ID della sottorete indicato nei risultati. Ai fini di questo tutorial, useremo "subnet-0123456789abcdef3" come esempio per la seconda sottorete privata.

Ora ci sono quattro sottoreti: due sottoreti pubbliche e due sottoreti private, distribuite in due zone di disponibilità.

Suggerimento: quando programmi gli intervalli CIDR, verifica che non si sovrappongano alle reti esistenti. Per gli ambienti di produzione, assegna una quantità di indirizzi IP sufficiente in funzione di eventuali aumenti futuri, con sottoreti di dimensioni adeguate per la sicurezza e le attività di gestione.

Configurazione della connettività Internet

Per consentire alle risorse del VPC di comunicare con Internet, devi creare e collegare un gateway Internet. In questa sezione, potrai configurare la connettività Internet per il VPC.

Creazione di un gateway Internet

Un gateway Internet consente la comunicazione tra il VPC e Internet.

aws ec2 create-internet-gateway \ --tag-specifications 'ResourceType=internet-gateway,Tags=[{Key=Name,Value=MyIGW}]'

Annota l’ID del gateway Internet indicato nei risultati. Ai fini di questo tutorial, useremo "igw-0123456789abcdef0" come esempio.

Collega il gateway Internet al VPC

Dopo aver creato il gateway Internet, collegalo a un VPC.

aws ec2 attach-internet-gateway --internet-gateway-id igw-0123456789abcdef0 --vpc-id vpc-0123456789abcdef0

Creazione e configurazione delle tabelle di routing

Le tabelle di routing contengono regole (route) che determinano la destinazione del traffico di rete. Innanzitutto, crea una tabella di routing per le sottoreti pubbliche.

aws ec2 create-route-table \ --vpc-id vpc-0123456789abcdef0 \ --tag-specifications 'ResourceType=route-table,Tags=[{Key=Name,Value=Public-RT}]'

Annota l’ID della tabella di routing indicato nei risultati. Ai fini di questo tutorial, useremo "rtb-0123456789abcdef0" come esempio per la tabella di routing pubblica.

Aggiungi una route al gateway Internet nella tabella di routing pubblica.

aws ec2 create-route --route-table-id rtb-0123456789abcdef0 --destination-cidr-block 0.0.0.0/0 --gateway-id igw-0123456789abcdef0

Associa le sottoreti pubbliche alla tabella di routing pubblica.

aws ec2 associate-route-table --route-table-id rtb-0123456789abcdef0 --subnet-id subnet-0123456789abcdef0 aws ec2 associate-route-table --route-table-id rtb-0123456789abcdef0 --subnet-id subnet-0123456789abcdef1

Quindi, crea una tabella di routing per le sottoreti private.

aws ec2 create-route-table \ --vpc-id vpc-0123456789abcdef0 \ --tag-specifications 'ResourceType=route-table,Tags=[{Key=Name,Value=Private-RT}]'

Annota l’ID della tabella di routing indicato nei risultati. Ai fini di questo tutorial, useremo "rtb-0123456789abcdef1" come esempio per la tabella di routing privata.

Associa le sottoreti private alla tabella di routing privata.

aws ec2 associate-route-table --route-table-id rtb-0123456789abcdef1 --subnet-id subnet-0123456789abcdef2 aws ec2 associate-route-table --route-table-id rtb-0123456789abcdef1 --subnet-id subnet-0123456789abcdef3

Creazione di un gateway NAT

Un gateway NAT consente alle istanze nelle sottoreti private di avviare il traffico in uscita verso Internet, bloccando al tempo stesso il traffico in entrata da Internet. Questa operazione è essenziale per le istanze che devono scaricare aggiornamenti o accedere a servizi esterni.

Allocazione di un IP elastico

Prima di tutto, alloca un indirizzo IP elastico per il gateway NAT.

aws ec2 allocate-address --domain vpc

Annota l’ID di allocazione indicato nei risultati. Ai fini di questo tutorial, useremo "eipalloc-0123456789abcdef0" come esempio.

Creazione del gateway NAT

Crea un gateway NAT in una delle sottoreti pubbliche utilizzando l’IP elastico allocato.

aws ec2 create-nat-gateway \ --subnet-id subnet-0123456789abcdef0 \ --allocation-id eipalloc-0123456789abcdef0 \ --tag-specifications 'ResourceType=natgateway,Tags=[{Key=Name,Value=MyNATGateway}]'

Annota l’ID del gateway NAT indicato nei risultati. Ai fini di questo tutorial, useremo "nat-0123456789abcdef0" come esempio.

Attendi che il gateway NAT diventi disponibile prima di procedere.

aws ec2 wait nat-gateway-available --nat-gateway-ids nat-0123456789abcdef0

Aggiunta di una route al gateway NAT

Aggiungi una route al gateway NAT nella tabella di routing privata per consentire alle istanze nelle sottoreti private di accedere a Internet.

aws ec2 create-route --route-table-id rtb-0123456789abcdef1 --destination-cidr-block 0.0.0.0/0 --nat-gateway-id nat-0123456789abcdef0

Attenzione: per gli ambienti di produzione, valuta la possibilità di creare un gateway NAT in ogni zona di disponibilità in cui sono presenti sottoreti private per eliminare singoli punti di errore.

Configurazione delle impostazioni della sottorete

Configura le sottoreti pubbliche per l’assegnazione automatica di indirizzi IP pubblici alle istanze avviate al loro interno.

aws ec2 modify-subnet-attribute --subnet-id subnet-0123456789abcdef0 --map-public-ip-on-launch aws ec2 modify-subnet-attribute --subnet-id subnet-0123456789abcdef1 --map-public-ip-on-launch

In questo modo, le istanze avviate nelle sottoreti pubbliche riceveranno per impostazione predefinita un indirizzo IP pubblico e saranno così accessibili da Internet.

Creazione di gruppi di sicurezza

I gruppi di sicurezza fungono da firewall virtuale per le istanze per controllare il traffico in entrata e quello in uscita. In questa sezione, potrai creare gruppi di sicurezza per server web e server di database.

Creazione di un gruppo di sicurezza per server web

aws ec2 create-security-group \ --group-name WebServerSG \ --description "Security group for web servers" \ --vpc-id vpc-0123456789abcdef0

Annota l’ID del gruppo di sicurezza indicato nei risultati. Ai fini di questo tutorial, useremo "sg-0123456789abcdef0" come esempio per il gruppo di sicurezza del server web.

Consenti il traffico HTTP e HTTPS verso i server web.

aws ec2 authorize-security-group-ingress --group-id sg-0123456789abcdef0 --protocol tcp --port 80 --cidr 0.0.0.0/0 aws ec2 authorize-security-group-ingress --group-id sg-0123456789abcdef0 --protocol tcp --port 443 --cidr 0.0.0.0/0

Attenzione: per gli ambienti di produzione, limita il traffico in entrata a determinati intervalli IP invece di consentire il traffico da 0.0.0.0/0 (qualsiasi indirizzo IP).

Creazione di un gruppo di sicurezza per server di database

aws ec2 create-security-group \ --group-name DBServerSG \ --description "Security group for database servers" \ --vpc-id vpc-0123456789abcdef0

Annota l’ID del gruppo di sicurezza indicato nei risultati. Ai fini di questo tutorial, useremo "sg-0123456789abcdef1" come esempio per il gruppo di sicurezza del server di database.

Consenti solo MySQL/Aurora il traffico proveniente dai server web.

aws ec2 authorize-security-group-ingress --group-id sg-0123456789abcdef1 --protocol tcp --port 3306 --source-group sg-0123456789abcdef0

Questa configurazione garantisce che solo le istanze del gruppo di sicurezza del server web possano connettersi ai server di database nella porta 3306, in base al principio del privilegio minimo.

Verifica la configurazione VPC

Dopo aver creato tutti i componenti necessari, verifica la configurazione del VPC per assicurarti che tutte le opzioni siano configurate correttamente.

Controlla il VPC

aws ec2 describe-vpcs --vpc-id vpc-0123456789abcdef0

Controlla le sottoreti

aws ec2 describe-subnets --filters "Name=vpc-id,Values=vpc-0123456789abcdef0"

Controlla le tabelle di routing

aws ec2 describe-route-tables --filters "Name=vpc-id,Values=vpc-0123456789abcdef0"

Controlla il gateway Internet

aws ec2 describe-internet-gateways --filters "Name=attachment.vpc-id,Values=vpc-0123456789abcdef0"

Controlla il gateway NAT

aws ec2 describe-nat-gateways --filter "Name=vpc-id,Values=vpc-0123456789abcdef0"

Controlla i gruppi di sicurezza

aws ec2 describe-security-groups --filters "Name=vpc-id,Values=vpc-0123456789abcdef0"

Questi comandi forniscono informazioni dettagliate su ogni singolo componente del VPC, consentendoti di verificare che tutte le opzioni siano configurate correttamente.

Distribuisci istanze EC2

Ora che hai creato la tua infrastruttura VPC, puoi implementare EC2 istanze per dimostrare come funziona l'architettura. Verranno avviati un server web in una sottorete pubblica e un server di database in una sottorete privata.

Creazione di una coppia di chiavi per l’accesso SSH

Innanzitutto, crea una coppia di chiavi per connetterti in modo sicuro alle istanze:

aws ec2 create-key-pair --key-name vpc-tutorial-key --query 'KeyMaterial' --output text > vpc-tutorial-key.pem chmod 400 vpc-tutorial-key.pem

Questo comando crea una nuova coppia di chiavi e salva la chiave privata in un file con autorizzazioni limitate.

Trovare l’AMI Amazon Linux 2 più recente

Trova l’AMI Amazon Linux 2 più recente da utilizzare per le istanze:

aws ec2 describe-images --owners amazon \ --filters "Name=name,Values=amzn2-ami-hvm-*-x86_64-gp2" "Name=state,Values=available" \ --query "sort_by(Images, &CreationDate)[-1].ImageId" --output text

Annota l’ID AMI indicato nei risultati. Ai fini di questo tutorial, useremo "ami-0123456789abcdef0" come esempio.

Avviare un server web nella sottorete pubblica

Ora, avvia un' EC2 istanza nella sottorete pubblica che funga da server Web:

aws ec2 run-instances \ --image-id ami-0123456789abcdef0 \ --count 1 \ --instance-type t2.micro \ --key-name vpc-tutorial-key \ --security-group-ids sg-0123456789abcdef0 \ --subnet-id subnet-0123456789abcdef0 \ --associate-public-ip-address \ --user-data '#!/bin/bash yum update -y yum install -y httpd systemctl start httpd systemctl enable httpd echo "<h1>Hello from $(hostname -f)</h1>" > /var/www/html/index.html' \ --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=WebServer}]'

Annota l’ID dell’istanza indicato nei risultati. Ai fini di questo tutorial, useremo "i-0123456789abcdef0" come esempio per l’istanza del server web.

Avviare un server di database nella sottorete privata

Quindi, avvia un' EC2 istanza nella sottorete privata che funga da server di database:

aws ec2 run-instances \ --image-id ami-0123456789abcdef0 \ --count 1 \ --instance-type t2.micro \ --key-name vpc-tutorial-key \ --security-group-ids sg-0123456789abcdef1 \ --subnet-id subnet-0123456789abcdef2 \ --user-data '#!/bin/bash yum update -y yum install -y mariadb-server systemctl start mariadb systemctl enable mariadb' \ --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=DBServer}]'

Annota l’ID dell’istanza indicato nei risultati. Ai fini di questo tutorial, useremo "i-0123456789abcdef1" come esempio per l’istanza del server di database.

Accedere al server web

Quando l’istanza del server web è in esecuzione, potrai accedervi utilizzando l’indirizzo IP pubblico:

aws ec2 describe-instances \ --instance-ids i-0123456789abcdef0 \ --query 'Reservations[0].Instances[0].PublicIpAddress' \ --output text

Questo comando restituirà l’indirizzo IP pubblico del server web. Ai fini di questo tutorial, useremo “203.0.113.10” come esempio.

Ora puoi aprire questo URL nel browser web: http://203.0.113.10

Connettersi alle istanze tramite SSH

Connettersi al server web:

ssh -i vpc-tutorial-key.pem ec2-user@203.0.113.10

Per connetterti al server di database, devi usare SSH prima per il server web e poi per il server di database:

# Get the private IP of the database server aws ec2 describe-instances \ --instance-ids i-0123456789abcdef1 \ --query 'Reservations[0].Instances[0].PrivateIpAddress' \ --output text

Questo comando restituirà l’indirizzo IP privato del server di database. Ai fini di questo tutorial, useremo "10.0.2.10" come esempio.

# First SSH to web server, then to database server ssh -i vpc-tutorial-key.pem -A ec2-user@203.0.113.10 ssh ec2-user@10.0.2.10

Questo dimostra il funzionamento dell’architettura di rete che hai creato: il server web è accessibile pubblicamente, mentre il server del database è accessibile solo dall’interno del VPC.

risoluzione dei problemi

Di seguito sono indicati alcuni problemi più comuni che potresti riscontrare durante la creazione di un VPC e i metodi per risolverli:

Sovrapposizioni di intervalli CIDR

Se ricevi un errore relativo alle sovrapposizioni di blocchi CIDR, assicurati che i blocchi CIDR per il tuo VPC e le sottoreti non si sovrappongano alle sottoreti esistenti o alle sottoreti del tuo account. VPCs

Errori di autorizzazione

Se riscontri errori di autorizzazione, verifica che il tuo utente o ruolo IAM disponga delle autorizzazioni necessarie per creare e gestire risorse VPC. Potrebbe essere necessario allegare la policy AmazonVPCFullAccess o creare una policy personalizzata con le autorizzazioni richieste.

Limiti delle risorse

AWS gli account hanno limiti predefiniti sul numero di VPCs sottoreti e altre risorse che è possibile creare. Se raggiungi questi limiti, puoi richiedere un aumento tramite il AWS Support Center.

Errori di dipendenza durante l’eliminazione

Durante l’eliminazione delle risorse, potrebbero verificarsi errori di dipendenza se provi a eliminare le risorse nell’ordine errato. Elimina sempre le risorse nell’ordine inverso rispetto a quello di creazione, iniziando dalle risorse più dipendenti.

Eseguire la pulizia delle risorse

Al termine del processo relativo al VPC, potrai eliminare le risorse per evitare costi aggiuntivi. Elimina le risorse nell’ordine inverso rispetto a quello di creazione per gestire correttamente le dipendenze.

Termina le EC2 istanze

aws ec2 terminate-instances --instance-ids i-0123456789abcdef0 i-0123456789abcdef1 aws ec2 wait instance-terminated --instance-ids i-0123456789abcdef0 i-0123456789abcdef1

Elimina la coppia di chiavi

aws ec2 delete-key-pair --key-name vpc-tutorial-key rm vpc-tutorial-key.pem

Ellimina il gateway NAT

aws ec2 delete-nat-gateway --nat-gateway-id nat-0123456789abcdef0 aws ec2 wait nat-gateway-deleted --nat-gateway-ids nat-0123456789abcdef0

Sblocca l’IP elastico

aws ec2 release-address --allocation-id eipalloc-0123456789abcdef0

Elimina i gruppi di sicurezza

aws ec2 delete-security-group --group-id sg-0123456789abcdef1 aws ec2 delete-security-group --group-id sg-0123456789abcdef0

Elimina le tabelle di routing

Innanzitutto, trova l'associazione della tabella di percorso: IDs

aws ec2 describe-route-tables --route-table-id rtb-0123456789abcdef0 aws ec2 describe-route-tables --route-table-id rtb-0123456789abcdef1

Quindi dissocia le tabelle di routing dalle sottoreti (sostituisci l'associazione IDs con quelle del tuo output):

aws ec2 disassociate-route-table --association-id rtbassoc-0123456789abcdef0 aws ec2 disassociate-route-table --association-id rtbassoc-0123456789abcdef1 aws ec2 disassociate-route-table --association-id rtbassoc-0123456789abcdef2 aws ec2 disassociate-route-table --association-id rtbassoc-0123456789abcdef3

A questo punto, elimina le tabelle di routing:

aws ec2 delete-route-table --route-table-id rtb-0123456789abcdef1 aws ec2 delete-route-table --route-table-id rtb-0123456789abcdef0

Scollega ed elimina il gateway Internet

aws ec2 detach-internet-gateway --internet-gateway-id igw-0123456789abcdef0 --vpc-id vpc-0123456789abcdef0 aws ec2 delete-internet-gateway --internet-gateway-id igw-0123456789abcdef0

Elimina le sottoreti

aws ec2 delete-subnet --subnet-id subnet-0123456789abcdef0 aws ec2 delete-subnet --subnet-id subnet-0123456789abcdef1 aws ec2 delete-subnet --subnet-id subnet-0123456789abcdef2 aws ec2 delete-subnet --subnet-id subnet-0123456789abcdef3

Eliminare il VPC

aws ec2 delete-vpc --vpc-id vpc-0123456789abcdef0

Passa alla produzione

Questo tutorial ti aiuterà a scoprire come creare un VPC con la AWS CLI. Per gli ambienti di produzione, adotta le seguenti best practice per la sicurezza e l’architettura:

  1. Regole del gruppo di sicurezza: limita il traffico in entrata a determinati intervalli IP invece di consentire il traffico da 0.0.0.0/0.

  2. Alta disponibilità: distribuisce i gateway NAT in ogni zona di disponibilità in cui sono presenti sottoreti private per eliminare singoli punti di errore.

  3. Rete ACLs: implementa la rete ACLs come livello di sicurezza aggiuntivo oltre ai gruppi di sicurezza.

  4. Log di flusso VPC: abilita i log di flusso VPC per monitorare e analizzare i modelli di traffico di rete.

  5. Etichettatura delle risorse: implementa una strategia di etichettatura completa per una migliore gestione delle risorse.

Per ulteriori informazioni sulla creazione di architetture pronte per la produzione, consulta AWS Well-Architected Framework e AWS Security Best Practices.

Fasi successive

Ora che hai creato un VPC con sottoreti sia pubbliche che private, potrai:

  1. Avvia EC2 istanze nelle tue sottoreti pubbliche o private.

  2. Implementare i bilanciatori del carico per distribuire il traffico tra più istanze.

  3. Configurare i gruppi di dimensionamento automatico per assicurare un’elevata disponibilità e scalabilità.

  4. Configurare i database RDS nelle sottoreti private.

  5. Implementa il peering VPC per connetterti con altri. VPCs

  6. Configurare le connessioni VPN per connettere il VPC alla rete on-premises.