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 avere quanto segue:

  1. Il AWS CLI. Se devi installarlo, segui la guida all'AWS CLI installazione.

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

  3. Conoscenza di base dei 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 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:

  1. Regole dei gruppi di sicurezza: limita il traffico in entrata a intervalli IP specifici anziché consentire il traffico da 0.0.0.0/0.

  2. Alta disponibilità: implementa 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. Registri 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 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:

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

  2. Implementa sistemi di bilanciamento del carico per distribuire il traffico su più istanze.

  3. Configura i gruppi di Auto Scaling per un'elevata disponibilità e scalabilità.

  4. Configura i database RDS nelle tue sottoreti private.

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

  6. Configura connessioni VPN per connettere il tuo VPC alla rete locale.