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 avere quanto segue:
-
Il AWS CLI. Se devi installarlo, segui la guida all'AWS CLI installazione.
-
Hai configurato il tuo AWS CLI con le credenziali appropriate. Esegui
aws configure
se non hai ancora impostato le tue credenziali. -
Conoscenza di base dei 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 pulisci tutte le risorse, il costo totale sarà di circa 0,07 USD. Per ottimizzare i costi negli ambienti di sviluppo, prendi in considerazione l'utilizzo di un'istanza NAT anziché un gateway NAT, che può ridurre i costi in modo significativo.
Verifichiamo che il tuo AWS CLI sia configurato correttamente prima di procedere.
aws configure list
Dovresti vedere la tua chiave di AWS accesso, la chiave segreta e la regione predefinita. Inoltre, verifica 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, creerai un VPC con un blocco 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 di nome.
aws ec2 create-vpc --cidr-block 10.0.0.0/16 --tag-specifications 'ResourceType=vpc,Tags=[{Key=Name,Value=MyVPC}]'
Prendi nota dell'ID VPC nell'output. Ti servirà per i comandi successivi. Ai fini di questo tutorial, useremo «vpc-0123456789abcdef0" come ID VPC di esempio. Sostituiscilo con il tuo 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 tuo 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 in caso di successo. Il tuo VPC ora ha il supporto DNS e la risoluzione dei nomi host abilitati.
Crea sottoreti
Le sottoreti sono segmenti dell'intervallo di indirizzi IP di un VPC in cui è possibile inserire gruppi di risorse isolate. In questa sezione, creerai sottoreti pubbliche e private in due zone di disponibilità per un'elevata disponibilità.
Ottieni zone di disponibilità disponibili
Innanzitutto, recupera le zone di disponibilità disponibili nella tua regione.
aws ec2 describe-availability-zones
Per questo tutorial, utilizzeremo le prime due zone di disponibilità. Annotate i loro nomi dall'output (ad esempio, «us-east-1a» e «us-east-1b»).
Crea 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 dall'output. Per 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 dall'output. Per 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 dall'output. Per 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 dall'output. Per questo tutorial, useremo «subnet-0123456789abcdef3" come esempio per la seconda sottorete privata.
Ora hai quattro sottoreti: due sottoreti pubbliche e due sottoreti private, distribuite su due zone di disponibilità.
Suggerimento: quando pianifichi i blocchi CIDR, assicurati che non si sovrappongano alle reti esistenti. Per gli ambienti di produzione, alloca indirizzi IP sufficienti per la crescita futura mantenendo le sottoreti di dimensioni ragionevoli per la sicurezza e la gestione.
Configura la connettività Internet
Per consentire alle risorse del tuo VPC di comunicare con Internet, devi creare e collegare un Internet Gateway. In questa sezione, configurerai la connettività Internet per il tuo VPC.
Creazione di un gateway Internet
Un Internet Gateway consente la comunicazione tra il tuo VPC e Internet.
aws ec2 create-internet-gateway \ --tag-specifications 'ResourceType=internet-gateway,Tags=[{Key=Name,Value=MyIGW}]'
Annotare l'ID Internet Gateway dall'output. Per questo tutorial, useremo «igw-0123456789abcdef0" come esempio.
Collega l'Internet Gateway al tuo VPC
Dopo aver creato l'Internet Gateway, collegalo al tuo VPC.
aws ec2 attach-internet-gateway --internet-gateway-id igw-0123456789abcdef0 --vpc-id vpc-0123456789abcdef0
Crea e configura le tabelle di routing
Le tabelle delle rotte contengono regole (rotte) che determinano dove viene diretto il traffico di rete. Innanzitutto, create 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 dall'output. Per questo tutorial, useremo «rtb-0123456789abcdef0" come esempio per la tabella delle rotte pubbliche.
Aggiungi una route all'Internet Gateway nella tabella delle rotte pubbliche.
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 delle rotte pubbliche.
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
Ora crea una tabella di routing per le tue 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 delle rotte dall'output. Per questo tutorial, useremo «rtb-0123456789abcdef1" come esempio per la tabella di route 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
Crea un gateway NAT
Un gateway NAT consente alle istanze in sottoreti private di avviare il traffico in uscita verso Internet, impedendo al contempo il traffico in entrata da Internet. Questo è essenziale per le istanze che devono scaricare aggiornamenti o accedere a servizi esterni.
Assegna un IP elastico
Innanzitutto, assegna un indirizzo IP elastico per il tuo gateway NAT.
aws ec2 allocate-address --domain vpc
Annota l'ID di allocazione dall'output. Per questo tutorial, useremo «eipalloc-0123456789abcdef0" come esempio.
Crea il NAT Gateway
Crea un gateway NAT in una delle tue 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 dall'output. Per questo tutorial, useremo «nat-0123456789abcdef0" come esempio.
Attendi che il NAT Gateway diventi disponibile prima di procedere.
aws ec2 wait nat-gateway-available --nat-gateway-ids nat-0123456789abcdef0
Aggiungi un percorso al NAT Gateway
Aggiungi una route al NAT Gateway nella tabella delle rotte private 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
Nota: per gli ambienti di produzione, prendi in considerazione la creazione di un gateway NAT in ogni zona di disponibilità in cui sono presenti sottoreti private per eliminare singoli punti di errore.
Configura le impostazioni delle sottoreti
Configura le sottoreti pubbliche per assegnare automaticamente 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
Ciò garantisce che le istanze avviate nelle sottoreti pubbliche ricevano per impostazione predefinita un indirizzo IP pubblico, che le rende accessibili da Internet.
Crea gruppi di sicurezza
I gruppi di sicurezza fungono da firewall virtuali per consentire alle istanze di controllare il traffico in entrata e in uscita. In questa sezione, creerai gruppi di sicurezza per server Web e server di database.
Crea un gruppo di sicurezza per i 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 dall'output. Per questo tutorial, useremo «sg-0123456789abcdef0" come esempio per il gruppo di sicurezza del server web.
Consenti il traffico HTTP e HTTPS verso i tuoi 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
Nota: per gli ambienti di produzione, limita il traffico in entrata a intervalli IP specifici anziché consentire il traffico proveniente da 0.0.0.0/0 (qualsiasi indirizzo IP).
Crea un gruppo di sicurezza per i 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 visualizzato nell'output. Per questo tutorial, useremo «sg-0123456789abcdef1" come esempio per il gruppo di sicurezza del server di database.
Consenti solo il traffico proveniente dai server web. MySQL/Aurora
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 sulla porta 3306, seguendo il principio del privilegio minimo.
Verifica la configurazione VPC
Dopo aver creato tutti i componenti necessari, verifica la configurazione del VPC per assicurarti che tutto sia configurato correttamente.
Controlla il tuo VPC
aws ec2 describe-vpcs --vpc-id vpc-0123456789abcdef0
Controlla le tue sottoreti
aws ec2 describe-subnets --filters "Name=vpc-id,Values=vpc-0123456789abcdef0"
Controlla le tabelle dei percorsi
aws ec2 describe-route-tables --filters "Name=vpc-id,Values=vpc-0123456789abcdef0"
Controlla il tuo Internet Gateway
aws ec2 describe-internet-gateways --filters "Name=attachment.vpc-id,Values=vpc-0123456789abcdef0"
Controlla il tuo NAT Gateway
aws ec2 describe-nat-gateways --filter "Name=vpc-id,Values=vpc-0123456789abcdef0"
Controlla i tuoi gruppi di sicurezza
aws ec2 describe-security-groups --filters "Name=vpc-id,Values=vpc-0123456789abcdef0"
Questi comandi forniscono informazioni dettagliate su ogni componente del tuo VPC, consentendoti di verificare che tutto sia configurato correttamente.
Distribuisci istanze EC2
Ora che hai creato la tua infrastruttura VPC, puoi implementare EC2 istanze per dimostrare come funziona l'architettura. Avvierai un server Web in una sottorete pubblica e un server di database in una sottorete privata.
Crea una key pair per l'accesso SSH
Innanzitutto, crea una key pair per connetterti in modo sicuro alle tue 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.
Trova l'AMI Amazon Linux 2 più recente
Trova l'AMI Amazon Linux 2 più recente da usare per le tue 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 dall'output. Per questo tutorial, useremo «ami-0123456789abcdef0" come esempio.
Avvia 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 dall'output. Per questo tutorial, useremo «i-0123456789abcdef0" come esempio per l'istanza del server web.
Avvia 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}]'
Annotate l'ID dell'istanza dall'output. Per questo tutorial, useremo «i-0123456789abcdef1" come esempio per l'istanza del server di database.
Accedi al tuo server web
Una volta che l'istanza del server web è in esecuzione, puoi accedervi utilizzando il suo 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 tuo server web. Per questo tutorial, useremo «203.0.113.10" come esempio.
Ora puoi aprire questo URL nel tuo browser web: http://203.0.113.10
Connect alle tue istanze tramite SSH
Per connetterti al tuo server web:
ssh -i vpc-tutorial-key.pem ec2-user@203.0.113.10
Per connetterti al tuo server di database, devi prima usare SSH sul tuo server web e poi sul tuo 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 del database. Per 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 l'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
Ecco alcuni problemi comuni che potresti riscontrare durante la creazione di un VPC e come risolverli:
Sovrapposizioni di blocchi 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 AmazonVPCFullAccess
policy 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 la pulizia
Durante la pulizia delle risorse, è possibile che si verifichino errori di dipendenza se si tenta di eliminare le risorse nell'ordine sbagliato. Eliminate sempre le risorse nell'ordine inverso rispetto a quello di creazione, iniziando dalle risorse più dipendenti.
Pulizia delle risorse
Quando hai finito con il tuo VPC, puoi ripulire le risorse per evitare di incorrere in addebiti. Elimina le risorse nell'ordine inverso rispetto alla creazione per gestire correttamente le dipendenze.
Termina EC2 le istanze
aws ec2 terminate-instances --instance-ids i-0123456789abcdef0 i-0123456789abcdef1 aws ec2 wait instance-terminated --instance-ids i-0123456789abcdef0 i-0123456789abcdef1
Eliminare la key pair
aws ec2 delete-key-pair --key-name vpc-tutorial-key rm vpc-tutorial-key.pem
Eliminare il gateway NAT
aws ec2 delete-nat-gateway --nat-gateway-id nat-0123456789abcdef0 aws ec2 wait nat-gateway-deleted --nat-gateway-ids nat-0123456789abcdef0
Rilascia l'IP elastico
aws ec2 release-address --allocation-id eipalloc-0123456789abcdef0
Eliminare i gruppi di sicurezza
aws ec2 delete-security-group --group-id sg-0123456789abcdef1 aws ec2 delete-security-group --group-id sg-0123456789abcdef0
Eliminare le tabelle di routing
Innanzitutto, trova l'associazione delle tabelle 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
Quindi elimina le tabelle delle rotte:
aws ec2 delete-route-table --route-table-id rtb-0123456789abcdef1 aws ec2 delete-route-table --route-table-id rtb-0123456789abcdef0
Scollegare ed eliminare l'Internet Gateway
aws ec2 detach-internet-gateway --internet-gateway-id igw-0123456789abcdef0 --vpc-id vpc-0123456789abcdef0 aws ec2 delete-internet-gateway --internet-gateway-id igw-0123456789abcdef0
Eliminare 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
Andiamo alla produzione
Questo tutorial è progettato per aiutarti a imparare a creare un VPC utilizzando. AWS CLI Per gli ambienti di produzione, considera le seguenti best practice di sicurezza e architettura:
-
Regole dei gruppi di sicurezza: limita il traffico in entrata a intervalli IP specifici anziché consentire il traffico da 0.0.0.0/0.
-
Alta disponibilità: implementa 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.
-
Registri 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 tagging completa per una migliore gestione delle risorse.
Per ulteriori informazioni sulla creazione di architetture pronte per la produzione, consulta AWS Well-Architected Framework and Security Best Practices.AWS
Passaggi successivi
Ora che hai creato un VPC con sottoreti pubbliche e private, puoi:
-
Avvia EC2 istanze nelle tue sottoreti pubbliche o private.
-
Implementa sistemi di bilanciamento del carico per distribuire il traffico su più istanze.
-
Configura i gruppi di Auto Scaling per un'elevata disponibilità e scalabilità.
-
Configura i database RDS nelle tue sottoreti private.
-
Implementa il peering VPC per connetterti con altri. VPCs
-
Configura connessioni VPN per connettere il tuo VPC alla rete locale.