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:
-
AWS CLI Il. Se devi installarla, segui la guida all’installazione della AWS CLI.
-
Hai configurato il tuo AWS CLI con le credenziali appropriate. Esegui
aws configurese non hai ancora configurato le credenziali. -
Nozioni di base sui concetti di rete.
-
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:
-
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.
-
Alta disponibilità: distribuisce i gateway NAT in ogni zona di disponibilità in cui sono presenti sottoreti private per eliminare singoli punti di errore.
-
Rete ACLs: implementa la rete ACLs come livello di sicurezza aggiuntivo oltre ai gruppi di sicurezza.
-
Log di flusso VPC: abilita i log di flusso VPC per monitorare e analizzare i modelli di traffico di rete.
-
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:
-
Avvia EC2 istanze nelle tue sottoreti pubbliche o private.
-
Implementare i bilanciatori del carico per distribuire il traffico tra più istanze.
-
Configurare i gruppi di dimensionamento automatico per assicurare un’elevata disponibilità e scalabilità.
-
Configurare i database RDS nelle sottoreti private.
-
Implementa il peering VPC per connetterti con altri. VPCs
-
Configurare le connessioni VPN per connettere il VPC alla rete on-premises.