Tancàvem el mòdul 2 amb una constatació incòmoda: MercadoFresco ja té a eu-west-1 un grup
d'Auto Scaling, discs amb còpies automàtiques, el catàleg a S3, la base de dades a RDS i dues
funcions Lambda… i tot això viu a la VPC per defecte. És a dir, en una xarxa que AWS va crear sola
el dia que es va obrir el compte, amb totes les subxarxes públiques, amb la base de dades compartint
espai de xarxa amb la botiga i amb la instància mercadofresco-tienda-01 accessible des d'internet
sense que ningú no ho hagi decidit conscientment.
Una VPC (Virtual Private Cloud) és el teu propi centre de dades virtual dins d'AWS: un espai de xarxa aïllat, amb el rang d'adreces IP que tu triïs, dividit en subxarxes que tu col·loques a les zones de disponibilitat que vulguis, amb les rutes que tu defineixis. És la capa sobre la qual s'apuntala absolutament tota la resta. Un balancejador es col·loca en subxarxes. Una base de dades viu en un grup de subxarxes. Un grup de seguretat pertany a una VPC. Si la xarxa està mal dissenyada, tot el que es construeixi a sobre arrossega el problema.
En aquesta lliçó la Marta dissenya i construeix des de zero la xarxa definitiva de MercadoFresco:
vpc-mercadofresco, amb sis subxarxes repartides en dues zones de disponibilitat, tres nivells
d'aïllament, sortida controlada a internet i una base de dades que deixa de ser abastable des de fora.
Contingut
- Què és una VPC i per què la VPC per defecte no serveix per a producció
- Adreçament: CIDR, màscares i com triar el rang
- Les cinc IP que AWS reserva a cada subxarxa
- Per què no s'ha de solapar amb la xarxa de l'oficina
- El disseny de xarxa de MercadoFresco: sis subxarxes en dues AZ
- Internet Gateway i què fa realment que una subxarxa sigui «pública»
- Taules de rutes: principal, personalitzades, associacions i la ruta local
- NAT Gateway i NAT instance: per a què serveixen i quant costen de debò
- Adreces IP privades, públiques, elàstiques i interfícies de xarxa
- Punts d'enllaç de VPC: de passarel·la i d'interfície
- DNS dins de la VPC
- Connectar amb l'oficina: peering, Transit Gateway, VPN i Direct Connect
- Construcció completa de
vpc-mercadofrescoper CLI - Moure la base de dades
mercadofresco-pedidosa les subxarxes privades de dades - VPC Flow Logs: el registre del que passa per la xarxa
- Neteja i control de cost
Què és una VPC i per què la VPC per defecte no serveix per a producció
Una VPC és una xarxa virtual aïllada lògicament de la resta de clients d'AWS. Viu en una regió
(la nostra, eu-west-1) i s'estén automàticament per totes les seves zones de disponibilitat. A dins
hi crees subxarxes, i cada subxarxa viu en una sola zona de disponibilitat. Aquesta és la
regla que governa tot el disseny: la VPC és regional, la subxarxa és zonal.
Quan AWS crea un compte nou, genera a cada regió una VPC per defecte amb un disseny pensat perquè qualsevol cosa funcioni al primer intent. Aquest és exactament el seu problema.
| Aspecte | VPC per defecte | VPC dissenyada (vpc-mercadofresco) |
|---|---|---|
| Rang | 172.31.0.0/16, idèntic a tots els comptes |
10.0.0.0/16, triat per nosaltres |
| Subxarxes | Una per AZ, totes públiques | Sis: pública, privada d'aplicació i privada de dades, en dues AZ |
| Ruta a internet | 0.0.0.0/0 → IGW a totes les subxarxes |
Només a les públiques |
| IP pública automàtica | Sí, activada per defecte | No, desactivada llevat de les públiques |
| Aïllament per capes | Cap | Tres nivells amb rutes diferents |
| Base de dades | Abastable des d'internet si el SG falla | Sense ruta a internet en absolut |
| Solapament amb l'oficina | Imprevisible | Controlat i documentat |
| Reproduïble en un altre compte | No | Sí, és infraestructura declarada |
El punt crític és el penúltim. A la VPC per defecte, l'única cosa que impedeix que qualsevol des
d'internet obri una connexió a la base de dades de comandes és el grup de seguretat. Un grup de
seguretat és una regla, i les regles s'editen per error un divendres a les set de la tarda. En una
subxarxa privada no hi ha cap ruta cap a internet: encara que algú obrís el port 5432 a
0.0.0.0/0, no hi hauria camí de tornada. Això no és una regla, és física de la xarxa. Això se'n diu
defensa en profunditat, i és la raó per la qual aquest disseny mereix la feina.
Adreçament: CIDR, màscares i com triar el rang
CIDR (Classless Inter-Domain Routing) és la notació adreça/màscara amb què es
descriu un rang d'adreces IP. A 10.0.0.0/16, el /16 significa que els primers 16 bits
són fixos (el 10.0.) i els 16 restants són variables: això dóna 2^16 = 65.536 adreces, des de
10.0.0.0 fins a 10.0.255.255.
La regla mental: com més gran és el número després de la barra, més petita és la xarxa. Cada bit que hi afegeixes divideix el rang per dos.
| Màscara | Adreces totals | IP utilitzables a AWS | Ús típic |
|---|---|---|---|
/16 |
65.536 | 65.531 | Màxim permès per a una VPC |
/18 |
16.384 | 16.379 | Subxarxa enorme, rarament necessària |
/20 |
4.096 | 4.091 | Subxarxa d'aplicació còmoda (la nostra tria) |
/22 |
1.024 | 1.019 | Subxarxa mitjana |
/24 |
256 | 251 | Subxarxa petita, la més habitual als exemples |
/26 |
64 | 59 | Subxarxa de base de dades |
/28 |
16 | 11 | Mínim permès per a una subxarxa a AWS |
Els rangs privats que pots fer servir (definits al RFC 1918) són:
10.0.0.0/8— de10.0.0.0a10.255.255.255. Gairebé 17 milions d'adreces.172.16.0.0/12— de172.16.0.0a172.31.255.255. Aquí hi viu la VPC per defecte.192.168.0.0/16— de192.168.0.0a192.168.255.255. El clàssic dels routers domèstics.
La Marta tria 10.0.0.0/16 per tres raons concretes:
- És el màxim que AWS permet per a una VPC (
/16). El CIDR principal d'una VPC no es pot reduir ni canviar un cop creada; només s'hi poden afegir blocs secundaris. Començar petit «perquè no necessitem tantes IP» és l'error que més migracions ha costat. - No és
172.31.x.x, així que mai no xocarà amb la VPC per defecte si algun dia s'ha de fer peering entre totes dues. - No és
192.168.x.x, que és exactament el que fa servir el router de l'oficina de MercadoFresco.
Sobre el punt 1, una xifra per calibrar: MercadoFresco té avui 2 instàncies de botiga i arriba a 4 al pic dels divendres. Amb 4.091 adreces per subxarxa d'aplicació, el marge és de tres ordres de magnitud. Les adreces IP privades no costen diners. Ser generós aquí és gratis; ser garrepa es paga amb una migració de xarxa d'aquí a dos anys.
Les cinc IP que AWS reserva a cada subxarxa
En qualsevol subxarxa, AWS es queda cinc adreces que no pots assignar a res. Prenent
com a exemple 10.0.0.0/20 (de 10.0.0.0 a 10.0.15.255):
| Adreça | Reservada per a |
|---|---|
10.0.0.0 |
Identificador de la xarxa (estàndard de xarxes, no és d'AWS) |
10.0.0.1 |
Encaminador de la VPC: la passarel·la per defecte de la subxarxa |
10.0.0.2 |
Servidor DNS de la VPC (Route 53 Resolver, «la IP +2») |
10.0.0.3 |
Reservada per AWS per a ús futur |
10.0.15.255 |
Adreça de difusió (broadcast), encara que AWS no admet broadcast |
Per això un /28 amb 16 adreces només en dóna 11 d'utilitzables, i per això /28 és el mínim: per
sota no en quedaria pràcticament cap. L'adreça .2 mereix ser recordada: quan a la lliçó
03-05 configurem regles de reenviament de DNS, aquesta és l'adreça amb què parlaran totes les
instàncies.
Per què no s'ha de solapar amb la xarxa de l'oficina
L'oficina de MercadoFresco fa servir 192.168.10.0/24 per als seus equips i el seu NAS. La Marta ho documenta
abans de crear res, perquè en el moment en què es vulgui connectar l'oficina amb AWS —per VPN,
com veurem al final de la lliçó— els rangs solapats fan la connexió impossible.
El motiu és pur encaminament. Si el portàtil del Luis és 192.168.10.25 i a AWS existís també
una instància 192.168.10.25, quan el portàtil volgués parlar amb la instància miraria la seva pròpia
taula de rutes, veuria que 192.168.10.0/24 és «la meva xarxa local» i enviaria el paquet al switch del
costat. Mai no creuaria el túnel. I no hi ha cap ajust que ho arregli: caldria renumerar una de les dues
xarxes senceres.
La regla que segueix la Marta i que convé adoptar: un document únic amb el mapa de tots els rangs de l'empresa, inclosos els que encara no existeixen.
| Xarxa | Rang | Estat |
|---|---|---|
| Oficina de Barcelona | 192.168.10.0/24 |
En ús |
| VPC per defecte d'AWS | 172.31.0.0/16 |
Existeix, a eliminar més endavant |
vpc-mercadofresco (producció, eu-west-1) |
10.0.0.0/16 |
Es crea en aquesta lliçó |
| VPC de desenvolupament (futura) | 10.1.0.0/16 |
Reservat |
| VPC d'una segona regió (futura) | 10.2.0.0/16 |
Reservat |
| VPN de teletreball | 10.200.0.0/22 |
Reservat |
El disseny de xarxa de MercadoFresco: sis subxarxes en dues AZ
El patró que construirem és l'estàndard de la indústria: tres capes × dues zones de disponibilitat. Cada capa té un nivell d'exposició diferent i una taula de rutes diferent.
| Subxarxa | AZ | CIDR | IP útils | Capa | Què hi viu |
|---|---|---|---|---|---|
snet-mercadofresco-publica-a |
eu-west-1a |
10.0.0.0/20 |
4.091 | Pública | ALB, NAT Gateway |
snet-mercadofresco-publica-b |
eu-west-1b |
10.0.16.0/20 |
4.091 | Pública | ALB, NAT Gateway |
snet-mercadofresco-app-a |
eu-west-1a |
10.0.32.0/20 |
4.091 | Privada d'aplicació | Instàncies de l'ASG, Lambda a la VPC |
snet-mercadofresco-app-b |
eu-west-1b |
10.0.48.0/20 |
4.091 | Privada d'aplicació | Instàncies de l'ASG, Lambda a la VPC |
snet-mercadofresco-datos-a |
eu-west-1a |
10.0.64.0/20 |
4.091 | Privada de dades | RDS primària, EFS |
snet-mercadofresco-datos-b |
eu-west-1b |
10.0.80.0/20 |
4.091 | Privada de dades | RDS en espera, EFS |
Queden lliures els rangs de 10.0.96.0 en endavant: més de la meitat de la VPC sense fer servir, disponible
per a futures capes (contenidors al mòdul 10, memòria cau al 06-05) sense tocar res del que ja existeix.
Tres decisions de disseny que convé entendre:
- La capa d'aplicació és privada. Les instàncies de la botiga no tindran IP pública. Rebran el trànsit a través del balancejador (lliçó 03-03) i sortiran a internet, quan ho necessitin, pel NAT Gateway.
- La capa de dades no té cap ruta a internet, ni tan sols per NAT. RDS no necessita descarregar res. Com menys camí hi hagi, menys superfície d'atac.
- Tot està duplicat en dues AZ. Si
eu-west-1acau sencera,eu-west-1bté subxarxa pública (per al balancejador), subxarxa d'aplicació (per a les instàncies) i subxarxa de dades (per a la còpia en espera de RDS). Aquesta és la raó pràctica del disseny multi-AZ que vam estudiar a 01-03.
Internet Gateway i què fa realment que una subxarxa sigui «pública»
Un Internet Gateway (IGW) és un component gestionat, redundant i escalat horitzontalment per AWS que s'adjunta a una VPC (un de sol per VPC) i fa dues coses:
- Proporciona la destinació per al trànsit dirigit a internet.
- Tradueix (NAT 1:1) la IP privada d'una instància a la seva IP pública, en tots dos sentits.
I aquí hi ha el concepte que més confusió genera de tota la lliçó:
No existeix cap casella anomenada «subxarxa pública». Una subxarxa és pública si —i només si— la taula de rutes associada a ella conté una entrada
0.0.0.0/0que apunta a un Internet Gateway. Això és tot. El nom que li posis és decoratiu.
D'aquí se'n deriven dues conseqüències molt pràctiques:
- Una instància amb IP pública en una subxarxa sense ruta a l'IGW no té internet. Té una IP que no serveix de res.
- Una instància sense IP pública en una subxarxa amb ruta a l'IGW tampoc no té internet: l'IGW necessita una IP pública per traduir.
És a dir, perquè una instància parli amb internet directament calen les dues coses alhora: ruta a l'IGW i IP pública (o elàstica).
Taules de rutes: principal, personalitzades, associacions i la ruta local
Una taula de rutes és una llista de regles «per arribar a aquesta destinació, envia per aquí». Cada subxarxa està associada a exactament una taula de rutes; una taula pot servir moltes subxarxes.
Tota VPC neix amb una taula principal (main), que s'aplica a qualsevol subxarxa que no tinguis associada explícitament a una altra. I tota taula conté una ruta local que no es pot esborrar ni modificar:
| Destinació | Destinació de reenviament | Significat |
|---|---|---|
10.0.0.0/16 |
local |
Tot el trànsit dins de la VPC s'encamina internament |
Aquesta ruta local és la que fa que la instància de la botiga pugui parlar amb RDS sense que hi hagi cap configuració addicional: dins d'una VPC, totes les subxarxes s'abasten entre elles per defecte, siguin a l'AZ que siguin. El que decideix si aquesta conversa es permet no és la ruta, són els grups de seguretat, que és exactament el tema de la lliçó 03-02.
Les tres taules de MercadoFresco queden així:
| Taula | Subxarxes associades | Rutes |
|---|---|---|
rt-mercadofresco-publica |
publica-a, publica-b |
10.0.0.0/16 → local0.0.0.0/0 → igw-mercadofresco |
rt-mercadofresco-app-a |
app-a |
10.0.0.0/16 → local0.0.0.0/0 → nat-mercadofresco-a |
rt-mercadofresco-app-b |
app-b |
10.0.0.0/16 → local0.0.0.0/0 → nat-mercadofresco-b |
rt-mercadofresco-datos |
datos-a, datos-b |
10.0.0.0/16 → local(cap més) |
Fixa't que hi ha dues taules separades per a la capa d'aplicació, una per AZ. És deliberat: si
app-a i app-b compartissin taula, totes dues sortirien pel mateix NAT Gateway, i si aquest NAT caigués
amb la seva AZ, les instàncies de l'altra zona es quedarien sense sortida. Amb una taula per AZ, cada zona
és autosuficient.
AWS aplica sempre la ruta més específica que coincideixi (longest prefix match). Si una taula
té 0.0.0.0/0 → NAT i 52.94.0.0/16 → IGW, un paquet a 52.94.10.1 va per l'IGW perquè /16
és més específic que /0.
NAT Gateway i NAT instance: per a què serveixen i quant costen de debò
Les instàncies de la capa d'aplicació no tenen IP pública, però necessiten sortir a internet:
descarregar pedaços de seguretat, instal·lar paquets amb dnf, cridar la passarel·la de pagament. Necessiten
connexions sortints sense acceptar-ne d'entrants. Per a això hi ha el NAT Gateway.
El NAT Gateway es col·loca en una subxarxa pública, té una IP elàstica, i fa d'intermediari: rep el paquet de la instància privada, el reenvia a internet amb la seva pròpia IP pública i retorna la resposta. Com que la conversa sempre la inicia la instància, ningú no pot iniciar una connexió des d'internet cap a dins.
flowchart LR
EC2["Instancia privada<br/>10.0.32.15<br/>(sense IP publica)"]
RT["Taula rt-mercadofresco-app-a<br/>0.0.0.0/0 → nat-mercadofresco-a"]
NAT["NAT Gateway<br/>a snet-publica-a<br/>IP elastica 52.x.x.x"]
IGW["Internet Gateway"]
NET["Internet<br/>(repositori de paquets)"]
EC2 --> RT --> NAT --> IGW --> NET
NET -. "resposta" .-> IGW -.-> NAT -.-> EC2
⚠️ Avís de cost: el NAT Gateway és el recurs que més factures sorpresa genera
A
eu-west-1un NAT Gateway costa aproximadament 0,048 USD per hora més 0,048 USD per GB processat. Amb dos NAT Gateway (un per AZ) funcionant tot el mes:
- 2 × 0,048 × 730 h = ≈ 70 USD/mes només per existir, sense transferir ni un sol byte.
- Més 0,048 USD per cada GB que hi passi, en tots dos sentits.
No és a la capa gratuïta. Si segueixes el curs en un compte de proves amb el pressupost de 10 USD que vam configurar a 01-02, l'alerta a
[email protected]saltarà en menys d'una setmana. Opcions:
- Un sol NAT Gateway per a proves (≈ 35 USD/mes): crea només
nat-mercadofresco-ai fes que les dues taules d'aplicació hi apuntin. Perds la tolerància a fallades de zona, que en un entorn de proves no importa.- Cap NAT: si només vols practicar l'adreçament, salta't el NAT i fes servir Session Manager (vist a 02-01) per arribar a les instàncies. Sense NAT no podran actualitzar paquets, però la xarxa s'estudia igual.
- Esborra'l en acabar cada sessió de pràctica. Hi ha comandes de neteja al final de la lliçó.
L'alternativa històrica és la NAT instance: una EC2 normal amb reenviament d'IP activat i la comprovació d'origen/destinació desactivada. Comparació honesta:
| NAT Gateway | NAT instance | |
|---|---|---|
| Gestió | AWS, zero manteniment | Teva: pedaços, monitoratge, reinicis |
| Disponibilitat | Redundant dins de la seva AZ | Un únic punt de fallada |
| Amplada de banda | Fins a 100 Gbps, escala sola | La de la instància (0,5-25 Gbps) |
| Cost base | ≈ 35 USD/mes per gateway | Una t4g.nano ≈ 3 USD/mes |
| Cost per GB | 0,048 USD/GB | Només la transferència estàndard |
| Grups de seguretat | No aplica | Sí, se li poden posar |
| Es pot fer servir de bastió | No | Sí |
| Recomanació | Producció | Laboratoris i comptes d'aprenentatge |
Per a MercadoFresco en producció: NAT Gateway, dos, un per AZ. Per a qui segueixi el curs al seu
compte personal: una NAT instance t4g.nano o directament cap.
I una tercera via, la més elegant, que veurem a l'apartat de punts d'enllaç: treure del NAT tot el trànsit que en realitat va a serveis d'AWS.
Adreces IP privades, públiques, elàstiques i interfícies de xarxa
Quatre conceptes que es confonen constantment:
| Concepte | Què és | Persisteix en aturar la instància | Cost |
|---|---|---|---|
| IP privada | Adreça dins del CIDR de la subxarxa (10.0.32.15) |
Sí, és fixa mentre existeixi l'ENI | Gratis |
| IP pública | IP encaminable assignada automàticament en arrencar | No, canvia a cada arrencada | Des del 2024, ≈ 0,005 USD/h |
| IP elàstica (EIP) | IP pública teva, que assignes i reassignes a voluntat | Sí | Gratis si està en ús; es cobra si està sense assignar |
| ENI | Interfície de xarxa virtual: la targeta de xarxa de la instància | Sí, es pot desassociar i moure | Gratis |
L'ENI (Elastic Network Interface) és la peça que ho unifica tot. Una ENI pertany a una subxarxa, té una o diverses IP privades, opcionalment una IP pública o elàstica, una adreça MAC i els grups de seguretat. Quan dius «aquesta instància és a la subxarxa X amb el grup de seguretat Y», el que en realitat estàs descrivint és la seva ENI.
Això explica coses que d'altra manera semblen màgiques:
- RDS, un ALB o una Lambda a la VPC no són màquines que vegis, però consumeixen IP de les teves subxarxes: cadascun crea les seves ENI. Un ALB pot crear vuit ENI o més en escalar. Una altra raó per no fer subxarxes petites.
- Una EIP associada a una ENI es pot moure a una altra instància en segons, cosa que permet substituir una màquina sense canviar el DNS.
Parany clàssic de facturació: una IP elàstica assignada i en ús és gratis; una IP elàstica reservada i sense associar a res costa ≈ 0,005 USD/hora (≈ 3,6 USD/mes). Les EIP òrfenes que queden després d'esborrar una instància són la despesa fantasma més habitual en comptes d'aprenentatge.
Punts d'enllaç de VPC: de passarel·la i d'interfície
Quan la instància mercadofresco-tienda-01, ja en una subxarxa privada, demana una foto de
mercadofresco-catalogo-fotos, per on va aquest trànsit? Per defecte: instància → NAT Gateway →
Internet Gateway → xarxa pública d'AWS → S3. Surt a internet per tornar a entrar a AWS. I per
cada GB es paga el NAT.
Els punts d'enllaç de VPC eliminen aquesta volta: porten el trànsit als serveis d'AWS per la xarxa interna d'AWS, sense passar per internet. N'hi ha de dos tipus i funcionen de manera completament diferent.
| De passarel·la (Gateway) | D'interfície (Interface / PrivateLink) | |
|---|---|---|
| Serveis admesos | Només S3 i DynamoDB | Gairebé tots: SSM, Secrets Manager, KMS, ECR, CloudWatch, SQS, SNS… |
| Com funciona | Una ruta a la taula de rutes | Una ENI amb IP privada a la teva subxarxa |
| Què resol el DNS | El nom públic d'S3, redirigit per ruta | Un nom privat (o el públic, amb DNS privat activat) |
| Grups de seguretat | No aplica | Sí, se li n'assigna un |
| Cost | Gratis | ≈ 0,011 USD/h per AZ + 0,01 USD/GB |
| Abast | Només dins de la VPC | Es pot abastar des d'altres VPC i des de l'oficina per VPN |
Per a MercadoFresco, el punt d'enllaç de passarel·la cap a S3 és una decisió sense discussió: és gratis i estalvia diners des del primer byte.
flowchart TB
subgraph VPC["vpc-mercadofresco"]
EC2["Instancia de botiga<br/>snet-mercadofresco-app-a"]
VPCE(["Punt d'enllac de tipus Gateway<br/>vpce-mercadofresco-s3<br/>(entrada a la taula de rutes)"])
NAT["NAT Gateway<br/>0,048 USD/GB"]
end
S3[("mercadofresco-catalogo-fotos")]
INET["Internet"]
EC2 -- "pl-6da54004 → vpce (gratuit)" --> VPCE --> S3
EC2 -. "0.0.0.0/0 → NAT (de pagament)" .-> NAT --> INET
El que és interessant del mecanisme: en crear el punt d'enllaç, AWS afegeix a les teves taules de rutes una entrada la
destinació de la qual és una prefix list gestionada (pl-6da54004 per a S3 a eu-west-1), que conté tots
els rangs IP públics d'S3 a la regió. Com que aquesta ruta és més específica que 0.0.0.0/0, el
trànsit a S3 es desvia al punt d'enllaç i la resta continua anant pel NAT. No cal canviar ni una
línia de codi de l'aplicació.
A més, un punt d'enllaç de passarel·la admet una política de punt d'enllaç que restringeix què s'hi pot fer:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "SoloBucketsDeMercadoFresco",
"Effect": "Allow",
"Principal": "*",
"Action": ["s3:GetObject", "s3:PutObject", "s3:ListBucket"],
"Resource": [
"arn:aws:s3:::mercadofresco-catalogo-fotos",
"arn:aws:s3:::mercadofresco-catalogo-fotos/*",
"arn:aws:s3:::mercadofresco-copias-basedatos",
"arn:aws:s3:::mercadofresco-copias-basedatos/*"
]
}
]
}Aquesta política diu: per aquest punt d'enllaç només es pot llegir i escriure als dos buckets de
MercadoFresco. Si una instància compromesa intentés pujar dades a un bucket d'un atacant, el
punt d'enllaç ho rebutjaria. Principal: "*" aquí no vol dir «qualsevol des d'internet»: només pot
entrar per aquest punt d'enllaç qui estigui dins de la VPC.
Els punts d'enllaç d'interfície que MercadoFresco acabarà necessitant (ssm, ssmmessages, ec2messages
per a Session Manager, i secretsmanager per al que veurem a 04-03) sí que costen diners, però
permeten una cosa valuosa: fer servir Session Manager en instàncies sense NAT i sense internet en absolut.
DNS dins de la VPC
Tota VPC porta incorporat un resolutor DNS, el Route 53 Resolver, accessible a l'adreça
.2 de la VPC (10.0.0.2 en el nostre cas) i també a l'adreça local 169.254.169.253. És el
que tradueix mercadofresco-pedidos.abc123.eu-west-1.rds.amazonaws.com a la IP privada correcta.
Dos atributs de la VPC governen el seu comportament i confonen tothom:
| Atribut | Què fa | Valor recomanat |
|---|---|---|
enableDnsSupport |
Activa el resolutor de la VPC a la IP .2. Si està desactivat, res no resol noms, ni tan sols els de RDS o S3 |
true sempre |
enableDnsHostnames |
Fa que les instàncies amb IP pública rebin a més un nom DNS públic. És imprescindible perquè funcioni el DNS privat dels punts d'enllaç d'interfície i per a RDS | true |
Una VPC creada amb create-vpc té enableDnsSupport=true però enableDnsHostnames=false.
És el primer ajust que cal corregir després de crear-la, i la causa número u que un punt d'enllaç
d'interfície «no funcioni».
Connectar amb l'oficina: peering, Transit Gateway, VPN i Direct Connect
MercadoFresco encara té l'ERP en un servidor de l'oficina. Tard o d'hora caldrà connectar les dues xarxes. Les quatre opcions, que no desenvolupem aquí perquè excedeixen l'abast del curs, però que convé saber anomenar:
| Opció | Connecta | Idea clau | Quan |
|---|---|---|---|
| VPC Peering | Dues VPC | Enllaç directe 1 a 1, no transitiu | Poques VPC, topologia simple |
| Transit Gateway | Moltes VPC + VPN + Direct Connect | Encaminador central en estrella | A partir de 3-4 VPC o diversos comptes |
| Site-to-Site VPN | Oficina ↔ AWS | Túnel IPsec xifrat sobre internet | Ràpid, barat, amplada de banda variable |
| Direct Connect | Oficina ↔ AWS | Fibra dedicada, sense passar per internet | Latència estable i molt volum; car i amb mesos de termini |
Per a MercadoFresco, la tria natural quan arribi el moment és Site-to-Site VPN cap a
vpc-mercadofresco: es munta en una tarda i funciona precisament perquè 10.0.0.0/16 i
192.168.10.0/24 no se solapen, tal com vam decidir al principi de la lliçó.
Construcció completa de vpc-mercadofresco per CLI
Ho construirem tot amb AWS CLI v2 i el perfil mercadofresco-dev que vam configurar a 01-05.
Cada bloc desa l'identificador que retorna per fer-lo servir al següent.
Pas 1: la VPC i els seus atributs de DNS
# Crear la VPC amb el CIDR triat i les etiquetes obligatories del projecte
VPC_ID=$(aws ec2 create-vpc \
--profile mercadofresco-dev --region eu-west-1 \
--cidr-block 10.0.0.0/16 \
--tag-specifications 'ResourceType=vpc,Tags=[
{Key=Name,Value=vpc-mercadofresco},
{Key=Proyecto,Value=mercadofresco},
{Key=Entorno,Value=produccion},
{Key=Componente,Value=tienda},
{Key=Propietario,Value=marta},
{Key=CentroCoste,Value=operaciones}]' \
--query 'Vpc.VpcId' --output text)
echo "VPC creada: $VPC_ID"
# Activar els noms DNS (ve desactivat per defecte: aquest es L'ajust que s'oblida)
aws ec2 modify-vpc-attribute --profile mercadofresco-dev --region eu-west-1 \
--vpc-id "$VPC_ID" --enable-dns-hostnames
# Verificar tots dos atributs
aws ec2 describe-vpc-attribute --profile mercadofresco-dev --region eu-west-1 \
--vpc-id "$VPC_ID" --attribute enableDnsHostnames \
--query 'EnableDnsHostnames.Value'--query 'Vpc.VpcId' --output text extreu només l'identificador, sense cometes ni JSON, per poder
desar-lo en una variable de shell. És el patró de JMESPath que vam veure a 01-05 i que farem servir a
tot el mòdul.
Pas 2: les sis subxarxes
# Funcio auxiliar: crea una subxarxa i en retorna l'ID
crear_subxarxa() {
local nom=$1 cidr=$2 az=$3 component=$4
aws ec2 create-subnet \
--profile mercadofresco-dev --region eu-west-1 \
--vpc-id "$VPC_ID" --cidr-block "$cidr" --availability-zone "$az" \
--tag-specifications "ResourceType=subnet,Tags=[
{Key=Name,Value=$nom},
{Key=Proyecto,Value=mercadofresco},
{Key=Entorno,Value=produccion},
{Key=Componente,Value=$component},
{Key=Propietario,Value=marta},
{Key=CentroCoste,Value=operaciones}]" \
--query 'Subnet.SubnetId' --output text
}
PUB_A=$(crear_subxarxa snet-mercadofresco-publica-a 10.0.0.0/20 eu-west-1a tienda)
PUB_B=$(crear_subxarxa snet-mercadofresco-publica-b 10.0.16.0/20 eu-west-1b tienda)
APP_A=$(crear_subxarxa snet-mercadofresco-app-a 10.0.32.0/20 eu-west-1a tienda)
APP_B=$(crear_subxarxa snet-mercadofresco-app-b 10.0.48.0/20 eu-west-1b tienda)
DAT_A=$(crear_subxarxa snet-mercadofresco-datos-a 10.0.64.0/20 eu-west-1a pedidos)
DAT_B=$(crear_subxarxa snet-mercadofresco-datos-b 10.0.80.0/20 eu-west-1b pedidos)
# Nomes les publiques assignen IP publica automaticament al que s'hi llanci
for S in "$PUB_A" "$PUB_B"; do
aws ec2 modify-subnet-attribute --profile mercadofresco-dev --region eu-west-1 \
--subnet-id "$S" --map-public-ip-on-launch
done--map-public-ip-on-launch és una comoditat, no una decisió de seguretat: recorda que sense la ruta
a l'IGW aquella IP pública no serviria de res.
Pas 3: Internet Gateway i taula de rutes pública
IGW_ID=$(aws ec2 create-internet-gateway \
--profile mercadofresco-dev --region eu-west-1 \
--tag-specifications 'ResourceType=internet-gateway,Tags=[
{Key=Name,Value=igw-mercadofresco},{Key=Proyecto,Value=mercadofresco},
{Key=Entorno,Value=produccion},{Key=Componente,Value=tienda},
{Key=Propietario,Value=marta},{Key=CentroCoste,Value=operaciones}]' \
--query 'InternetGateway.InternetGatewayId' --output text)
aws ec2 attach-internet-gateway --profile mercadofresco-dev --region eu-west-1 \
--internet-gateway-id "$IGW_ID" --vpc-id "$VPC_ID"
RT_PUB=$(aws ec2 create-route-table --profile mercadofresco-dev --region eu-west-1 \
--vpc-id "$VPC_ID" \
--tag-specifications 'ResourceType=route-table,Tags=[
{Key=Name,Value=rt-mercadofresco-publica},{Key=Proyecto,Value=mercadofresco},
{Key=Entorno,Value=produccion},{Key=Componente,Value=tienda},
{Key=Propietario,Value=marta},{Key=CentroCoste,Value=operaciones}]' \
--query 'RouteTable.RouteTableId' --output text)
# AQUESTA es la linia que converteix les subxarxes en "publiques"
aws ec2 create-route --profile mercadofresco-dev --region eu-west-1 \
--route-table-id "$RT_PUB" --destination-cidr-block 0.0.0.0/0 --gateway-id "$IGW_ID"
aws ec2 associate-route-table --profile mercadofresco-dev --region eu-west-1 \
--route-table-id "$RT_PUB" --subnet-id "$PUB_A"
aws ec2 associate-route-table --profile mercadofresco-dev --region eu-west-1 \
--route-table-id "$RT_PUB" --subnet-id "$PUB_B"Pas 4: NAT Gateways (⚠️ comença la despesa)
# Una IP elastica per NAT Gateway
EIP_A=$(aws ec2 allocate-address --profile mercadofresco-dev --region eu-west-1 \
--domain vpc --query 'AllocationId' --output text)
NAT_A=$(aws ec2 create-nat-gateway --profile mercadofresco-dev --region eu-west-1 \
--subnet-id "$PUB_A" --allocation-id "$EIP_A" \
--tag-specifications 'ResourceType=natgateway,Tags=[
{Key=Name,Value=nat-mercadofresco-a},{Key=Proyecto,Value=mercadofresco},
{Key=Entorno,Value=produccion},{Key=Componente,Value=tienda},
{Key=Propietario,Value=marta},{Key=CentroCoste,Value=operaciones}]' \
--query 'NatGateway.NatGatewayId' --output text)
# Un NAT Gateway triga 1-2 minuts a estar disponible; esperem activament
aws ec2 wait nat-gateway-available --profile mercadofresco-dev --region eu-west-1 \
--nat-gateway-ids "$NAT_A"
echo "NAT $NAT_A disponible"Nota important: el NAT Gateway es crea a la subxarxa pública ($PUB_A), no a la privada.
És l'error de col·locació més freqüent: si el poses a la subxarxa privada, el NAT no té sortida i
res no funciona, sense cap missatge que ho expliqui.
Repeteix el bloc amb $PUB_B per a nat-mercadofresco-b, o salta-te'l si estàs en mode econòmic i
fes que les dues taules d'aplicació apuntin a $NAT_A.
Pas 5: taules de rutes privades
crear_rt_privada() {
local nom=$1
aws ec2 create-route-table --profile mercadofresco-dev --region eu-west-1 \
--vpc-id "$VPC_ID" \
--tag-specifications "ResourceType=route-table,Tags=[
{Key=Name,Value=$nom},{Key=Proyecto,Value=mercadofresco},
{Key=Entorno,Value=produccion},{Key=Componente,Value=tienda},
{Key=Propietario,Value=marta},{Key=CentroCoste,Value=operaciones}]" \
--query 'RouteTable.RouteTableId' --output text
}
RT_APP_A=$(crear_rt_privada rt-mercadofresco-app-a)
RT_APP_B=$(crear_rt_privada rt-mercadofresco-app-b)
RT_DADES=$(crear_rt_privada rt-mercadofresco-datos)
# Sortida a internet pel NAT de la seva propia AZ
aws ec2 create-route --profile mercadofresco-dev --region eu-west-1 \
--route-table-id "$RT_APP_A" --destination-cidr-block 0.0.0.0/0 --nat-gateway-id "$NAT_A"
aws ec2 create-route --profile mercadofresco-dev --region eu-west-1 \
--route-table-id "$RT_APP_B" --destination-cidr-block 0.0.0.0/0 --nat-gateway-id "$NAT_B"
aws ec2 associate-route-table --profile mercadofresco-dev --region eu-west-1 \
--route-table-id "$RT_APP_A" --subnet-id "$APP_A"
aws ec2 associate-route-table --profile mercadofresco-dev --region eu-west-1 \
--route-table-id "$RT_APP_B" --subnet-id "$APP_B"
# La capa de dades NO rep cap ruta 0.0.0.0/0: es intencionat
aws ec2 associate-route-table --profile mercadofresco-dev --region eu-west-1 \
--route-table-id "$RT_DADES" --subnet-id "$DAT_A"
aws ec2 associate-route-table --profile mercadofresco-dev --region eu-west-1 \
--route-table-id "$RT_DADES" --subnet-id "$DAT_B"Pas 6: punt d'enllaç de passarel·la cap a S3
VPCE_S3=$(aws ec2 create-vpc-endpoint --profile mercadofresco-dev --region eu-west-1 \
--query 'VpcEndpoint.VpcEndpointId' --output text \
--vpc-id "$VPC_ID" \
--service-name com.amazonaws.eu-west-1.s3 \
--vpc-endpoint-type Gateway \
--route-table-ids "$RT_APP_A" "$RT_APP_B" "$RT_DADES" \
--tag-specifications 'ResourceType=vpc-endpoint,Tags=[
{Key=Name,Value=vpce-mercadofresco-s3},{Key=Proyecto,Value=mercadofresco},
{Key=Entorno,Value=produccion},{Key=Componente,Value=catalogo},
{Key=Propietario,Value=marta},{Key=CentroCoste,Value=operaciones}]')En indicar --route-table-ids, AWS insereix automàticament la ruta cap a la prefix list d'S3 en
aquestes tres taules. Comprova-ho:
aws ec2 describe-route-tables --profile mercadofresco-dev --region eu-west-1 \
--route-table-ids "$RT_APP_A" \
--query 'RouteTables[0].Routes[].{Desti:DestinationCidrBlock,PrefixList:DestinationPrefixListId,Gateway:GatewayId,NAT:NatGatewayId}' \
--output tableLa xarxa final
flowchart TB
USER["Usuaris de<br/>mercadofresco.example"]
IGW(["igw-mercadofresco"])
subgraph VPC["vpc-mercadofresco — 10.0.0.0/16 — eu-west-1"]
direction TB
subgraph AZA["Zona eu-west-1a"]
PA["snet-publica-a<br/>10.0.0.0/20<br/>NAT nat-mercadofresco-a"]
AA["snet-app-a<br/>10.0.32.0/20<br/>EC2 de l'ASG"]
DA["snet-datos-a<br/>10.0.64.0/20<br/>RDS mercadofresco-pedidos"]
end
subgraph AZB["Zona eu-west-1b"]
PB["snet-publica-b<br/>10.0.16.0/20<br/>NAT nat-mercadofresco-b"]
AB["snet-app-b<br/>10.0.48.0/20<br/>EC2 de l'ASG"]
DB["snet-datos-b<br/>10.0.80.0/20<br/>RDS en espera Multi-AZ"]
end
VPCE(["vpce-mercadofresco-s3"])
end
S3[("mercadofresco-catalogo-fotos")]
USER --> IGW
IGW --> PA
IGW --> PB
AA -->|sortida| PA
AB -->|sortida| PB
AA --> DA
AB --> DB
DA -. "Multi-AZ" .- DB
AA --> VPCE --> S3
Moure la base de dades mercadofresco-pedidos a les subxarxes privades de dades
La instància RDS creada a 02-04 encara viu al grup de subxarxes sng-mercadofresco, que
apuntava a la VPC per defecte. Cal crear un grup nou dins de vpc-mercadofresco:
aws rds create-db-subnet-group --profile mercadofresco-dev --region eu-west-1 \
--db-subnet-group-name sng-mercadofresco-datos \
--db-subnet-group-description "Subxarxes privades de dades de MercadoFresco" \
--subnet-ids "$DAT_A" "$DAT_B" \
--tags Key=Proyecto,Value=mercadofresco Key=Entorno,Value=produccion \
Key=Componente,Value=pedidos Key=Propietario,Value=marta \
Key=CentroCoste,Value=operacionesAdvertència operativa: una instància RDS no es pot moure de VPC canviant el seu grup de subxarxes. El camí real és: fer una instantània, restaurar-la indicant el nou grup de subxarxes, i reapuntar l'aplicació. A MercadoFresco, la Marta ho fa de matinada un dimarts:
aws rds create-db-snapshot --profile mercadofresco-dev --region eu-west-1 \\ --db-instance-identifier mercadofresco-pedidos \\ --db-snapshot-identifier mercadofresco-pedidos-premigracion aws rds wait db-snapshot-completed --profile mercadofresco-dev --region eu-west-1 \\ --db-snapshot-identifier mercadofresco-pedidos-premigracion aws rds restore-db-instance-from-db-snapshot --profile mercadofresco-dev --region eu-west-1 \\ --db-instance-identifier mercadofresco-pedidos-v2 \\ --db-snapshot-identifier mercadofresco-pedidos-premigracion \\ --db-subnet-group-name sng-mercadofresco-datos \\ --multi-az --no-publicly-accessibleEl
--no-publicly-accessibleés tan important com el grup de subxarxes: encara que la subxarxa no tingui ruta a internet, l'atributPubliclyAccessibleentruefaria que RDS intentés resoldre a una IP pública i trencaria la connexió des de dins.
VPC Flow Logs: el registre del que passa per la xarxa
Els VPC Flow Logs capturen metadades de cada flux de trànsit IP: origen, destinació, ports,
protocol, bytes, paquets i —el més valuós— si el flux va ser ACCEPT o REJECT. No en capturen el
contingut, només les capçaleres.
Es poden activar a tres nivells: VPC sencera, subxarxa o interfície de xarxa. I es poden enviar a CloudWatch Logs (consulta interactiva, més car) o a S3 (barat, per a anàlisi massiva).
aws ec2 create-flow-logs --profile mercadofresco-dev --region eu-west-1 \
--resource-type VPC --resource-ids "$VPC_ID" \
--traffic-type ALL \
--log-destination-type s3 \
--log-destination arn:aws:s3:::mercadofresco-registros-web/flow-logs/ \
--max-aggregation-interval 60 \
--tag-specifications 'ResourceType=vpc-flow-log,Tags=[
{Key=Name,Value=flowlogs-mercadofresco},{Key=Proyecto,Value=mercadofresco},
{Key=Entorno,Value=produccion},{Key=Componente,Value=tienda},
{Key=Propietario,Value=marta},{Key=CentroCoste,Value=operaciones}]'Un registre té aquest aspecte:
2 111122223333 eni-0a1b2c3d 10.0.32.15 52.94.5.20 44321 443 6 12 3800 1738500000 1738500060 ACCEPT OK
Llegit per parts: versió, compte, ENI, IP origen, IP destinació, port origen, port destinació,
protocol (6 = TCP), paquets, bytes, inici, fi, acció i estat. Aquest ACCEPT/REJECT final
és l'eina de diagnòstic que farem servir a la lliçó 03-02 per saber si un problema de
connectivitat el causa un grup de seguretat o una NACL. L'anàlisi amb CloudWatch Logs Insights i
les alarmes associades s'estudien a 05-01; aquí n'hi ha prou de tenir-los encesos.
Cost a tenir en compte: els Flow Logs no tenen cost de servei propi, però sí que es paga
l'emmagatzematge i la ingesta a S3 o a CloudWatch Logs. En una VPC amb trànsit intens, ALL
pot generar diversos GB al dia; començar amb --traffic-type REJECT és una manera barata de tenir el
que importa.
Neteja i control de cost
Si estàs practicant en un compte propi, això és el que cal esborrar i en aquest ordre, perquè AWS bloqueja l'esborrament d'un recurs del qual en depenguin d'altres:
# 1. El que mes costa, primer
aws ec2 delete-nat-gateway --profile mercadofresco-dev --region eu-west-1 --nat-gateway-id "$NAT_A"
aws ec2 wait nat-gateway-deleted --profile mercadofresco-dev --region eu-west-1 --nat-gateway-ids "$NAT_A"
# 2. Alliberar la IP elastica (si no, continua costant ~3,6 USD/mes)
aws ec2 release-address --profile mercadofresco-dev --region eu-west-1 --allocation-id "$EIP_A"
# 3. Punts d'enllac, subxarxes, taules de rutes, IGW i VPC
aws ec2 delete-vpc-endpoints --profile mercadofresco-dev --region eu-west-1 --vpc-endpoint-ids "$VPCE_S3"
for S in "$PUB_A" "$PUB_B" "$APP_A" "$APP_B" "$DAT_A" "$DAT_B"; do
aws ec2 delete-subnet --profile mercadofresco-dev --region eu-west-1 --subnet-id "$S"
done
aws ec2 detach-internet-gateway --profile mercadofresco-dev --region eu-west-1 \
--internet-gateway-id "$IGW_ID" --vpc-id "$VPC_ID"
aws ec2 delete-internet-gateway --profile mercadofresco-dev --region eu-west-1 --internet-gateway-id "$IGW_ID"
aws ec2 delete-vpc --profile mercadofresco-dev --region eu-west-1 --vpc-id "$VPC_ID"Verificació final que no queda res cobrant:
# IP elastiques orfenes a tota la regio
aws ec2 describe-addresses --profile mercadofresco-dev --region eu-west-1 \
--query 'Addresses[?AssociationId==null].[PublicIp,AllocationId]' --output table
# NAT Gateways vius
aws ec2 describe-nat-gateways --profile mercadofresco-dev --region eu-west-1 \
--filter Name=state,Values=available \
--query 'NatGateways[].[NatGatewayId,SubnetId]' --output tableErrors Habituals i Consells
Triar un CIDR massa petit. Un /24 per a tota la VPC sembla suficient fins que arriba el
tercer servei. El CIDR principal no es pot canviar. Fes servir sempre /16: les IP privades són
gratis.
Solapar rangs entre entorns. Producció 10.0.0.0/16 i desenvolupament també 10.0.0.0/16 és
còmode fins al dia del peering. Reserva el mapa de rangs abans de crear la primera VPC.
Posar el NAT Gateway en una subxarxa privada. No donarà cap error en crear-lo, i res no funcionarà. El NAT va sempre en subxarxa pública; el que és privat és allò que el fa servir.
Un sol NAT Gateway per a dues AZ en producció. Estalvies 35 USD al mes i crees una dependència entre zones: si cau l'AZ del NAT, les instàncies de l'altra zona perden la sortida. En proves és raonable; en producció, no.
Oblidar enableDnsHostnames. Els punts d'enllaç d'interfície i algunes integracions de RDS fallen de
maneres incomprensibles. És el primer que cal activar després de crear la VPC.
Deixar PubliclyAccessible=true a RDS. Moure-la a una subxarxa privada no n'hi ha prou: si l'atribut
continua actiu, RDS retorna una IP pública i l'aplicació deixa de connectar.
No etiquetar la xarxa. Una VPC sense Name i sense Proyecto és un vpc-0a1b2c3d que d'aquí a sis
mesos ningú no gosa esborrar. Totes les comandes d'aquesta lliçó porten les cinc etiquetes
obligatòries per aquesta raó; a 11-02 veurem el valor econòmic que té.
Deixar IP elàstiques sense associar. Costen encara que no facin res. Revisa-les amb la comanda de la secció de neteja cada vegada que esborris una instància.
Consell d'or: abans de crear ni una sola subxarxa, dibuixa la taula de rangs en un document. Deu minuts de paper estalvien una migració de xarxa.
Exercicis
Exercici 1: planificar l'adreçament d'una segona regió
MercadoFresco vol obrir una VPC de desenvolupament a eu-west-1 i una altra de futura a eu-central-1, i
a més connectar l'oficina per VPN. Dissenya el pla d'adreçament complet: rangs que assignes
a cada xarxa, justificació, i què passaria si assignessis 10.0.0.0/16 a les tres VPC.
Exercici 2: calcular subxarxes i IP útils
Per a una VPC 10.5.0.0/16 dissenyada amb tres AZ i dues capes (pública i privada), fent servir
màscara /22 a les públiques i /20 a les privades: escriu la taula completa de les sis subxarxes
amb els seus CIDR sense solapament, indica quantes IP útils té cadascuna i quant espai queda lliure.
Exercici 3: diagnosticar una instància sense internet
El Luis llança una instància a snet-mercadofresco-app-a i no pot executar dnf update. Escriu la
seqüència de comprovacions per CLI, en ordre, i què buscar a cadascuna. Considera almenys quatre
causes possibles diferents.
Solucions
Solució 1
Pla d'adreçament, respectant el mapa que ja vam definir:
| Xarxa | Rang | Justificació |
|---|---|---|
| Oficina de Barcelona | 192.168.10.0/24 |
Ja existent, es documenta |
vpc-mercadofresco (prod, eu-west-1) |
10.0.0.0/16 |
La xarxa principal, ja creada |
VPC de desenvolupament (eu-west-1) |
10.1.0.0/16 |
Segon bloc contigu, fàcil de recordar |
VPC de producció (eu-central-1) |
10.2.0.0/16 |
Tercer bloc, reservat des d'ara |
| VPN de teletreball | 10.200.0.0/22 |
Rang alt, separat, 1.024 adreces |
Amb 10.0.0.0/16 a les tres VPC: cadascuna funcionaria perfectament per separat, i aquest és el
perill, perquè el problema no apareix fins mesos després. En intentar el primer peering, AWS
rebutja la petició directament: no es poden aparellar VPC amb CIDR solapats. En muntar la VPN
amb l'oficina, l'oficina no podria distingir a quina VPC enviar un paquet destinat a 10.0.32.15.
L'única solució seria recrear una VPC sencera i migrar-ne tots els recursos, perquè el CIDR principal
és immutable.
Solució 2
VPC 10.5.0.0/16 (de 10.5.0.0 a 10.5.255.255). Un /22 són 1.024 adreces (blocs de 4 al
tercer octet); un /20 són 4.096 (blocs de 16).
| Subxarxa | AZ | CIDR | Rang | IP útils |
|---|---|---|---|---|
| pública-a | eu-west-1a |
10.5.0.0/22 |
10.5.0.0 – 10.5.3.255 |
1.019 |
| pública-b | eu-west-1b |
10.5.4.0/22 |
10.5.4.0 – 10.5.7.255 |
1.019 |
| pública-c | eu-west-1c |
10.5.8.0/22 |
10.5.8.0 – 10.5.11.255 |
1.019 |
| privada-a | eu-west-1a |
10.5.16.0/20 |
10.5.16.0 – 10.5.31.255 |
4.091 |
| privada-b | eu-west-1b |
10.5.32.0/20 |
10.5.32.0 – 10.5.47.255 |
4.091 |
| privada-c | eu-west-1c |
10.5.48.0/20 |
10.5.48.0 – 10.5.63.255 |
4.091 |
Total assignat: 3.072 + 12.288 = 15.360 adreces. La VPC en té 65.536, així que en queden 50.176
de lliures (des de 10.5.64.0 en endavant), és a dir, un 76 % de l'espai. Detall de disseny: les
públiques ocupen de 10.5.0.0 a 10.5.11.255 i les privades comencen a 10.5.16.0 deixant un
forat deliberat a 10.5.12.0/22, per poder ampliar la capa pública sense fragmentar el pla.
Solució 3
# 1. La subxarxa esta associada a la taula de rutes correcta?
aws ec2 describe-route-tables --profile mercadofresco-dev --region eu-west-1 \
--filters Name=association.subnet-id,Values=$APP_A \
--query 'RouteTables[].{Taula:RouteTableId,Rutes:Routes[].{D:DestinationCidrBlock,NAT:NatGatewayId,IGW:GatewayId}}'Què buscar: que existeixi 0.0.0.0/0 amb un NatGatewayId. Si no apareix cap taula, la subxarxa
està fent servir la taula principal, que no té ruta de sortida: cal associar-la.
# 2. El NAT Gateway existeix i esta disponible?
aws ec2 describe-nat-gateways --profile mercadofresco-dev --region eu-west-1 \
--nat-gateway-ids "$NAT_A" --query 'NatGateways[].[State,SubnetId]' --output tableQuè buscar: estat available. I comprovar que el seu SubnetId és la subxarxa pública, no la
privada. Un NAT en subxarxa privada és la causa clàssica.
# 3. La subxarxa del NAT te realment ruta a l'IGW?
aws ec2 describe-route-tables --profile mercadofresco-dev --region eu-west-1 \
--filters Name=association.subnet-id,Values=$PUB_A \
--query 'RouteTables[].Routes[?DestinationCidrBlock==`0.0.0.0/0`]'Què buscar: GatewayId començant per igw-. Sense això, el NAT tampoc no té sortida.
# 4. El grup de seguretat de la instancia permet transit de SORTIDA?
aws ec2 describe-instances --profile mercadofresco-dev --region eu-west-1 \
--instance-ids "$ID_INSTANCIA" \
--query 'Reservations[].Instances[].SecurityGroups[].GroupId' --output textQuè buscar: per defecte tot grup de seguretat permet tota la sortida, però si algú l'ha
restringida, dnf no arribarà al repositori. Això ja entra en el terreny de la lliçó 03-02.
Una cinquena causa a descartar: la instància va arrencar abans que existís la ruta del NAT i
té la memòria cau de xarxa antiga; n'hi ha prou de reiniciar-la. I una sisena: els Flow Logs mostren REJECT
en el trànsit de tornada, cosa que apuntaria a una NACL, que també és matèria de 03-02.
Conclusió
MercadoFresco ja no viu a la xarxa que li va tocar per defecte: viu a vpc-mercadofresco, una xarxa
dissenyada. Saps que una VPC és regional i una subxarxa és zonal, que el CIDR principal 10.0.0.0/16
és immutable i per això es tria generós, i que les adreces privades són gratis. Pots llegir
una màscara i calcular-ne les IP útils, i saps que AWS reserva cinc adreces a cada subxarxa,
entre elles la .1 de l'encaminador i la .2 del resolutor DNS. Has documentat el mapa de rangs de
l'empresa perquè 10.0.0.0/16 no xoqui mai amb el 192.168.10.0/24 de l'oficina quan arribi la
VPN.
Has construït les sis subxarxes en tres capes i dues zones de disponibilitat, i entens el
concepte que sosté tot el mòdul: una subxarxa és pública únicament perquè la seva taula de rutes
té un 0.0.0.0/0 apuntant a l'Internet Gateway, no per un ajust ni pel seu nom. Saps que
la ruta local és la que permet que la botiga parli amb la base de dades sense configurar res, i
que la capa de dades no té cap sortida a internet per disseny: això és defensa en
profunditat, no una regla que algú pugui esborrar per error.
Coneixes el NAT Gateway —on es col·loca, per què un per AZ, i que costa uns 35 USD al mes per
unitat més 0,048 USD per GB, cosa que el converteix en el recurs més car que has creat fins ara—
i les seves alternatives per a un compte d'aprenentatge. Distingeixes IP privada, pública, elàstica i ENI, i
saps que una EIP sense associar continua cobrant. Has muntat el punt d'enllaç de passarel·la cap a
S3, que és gratuït i treu del NAT tot el trànsit del catàleg de fotos, i saps quan cal
un punt d'enllaç d'interfície amb PrivateLink. Has activat enableDnsHostnames, has mogut la base
de dades mercadofresco-pedidos a sng-mercadofresco-datos mitjançant instantània i restauració —amb
--no-publicly-accessible— i has encès els VPC Flow Logs cap a
mercadofresco-registros-web.
Però la xarxa que has construït, ara mateix, no filtra res. La ruta local permet que qualsevol
instància de la VPC obri una connexió al port 5432 de la base de dades, i la subxarxa pública accepta
el que arribi per l'Internet Gateway. Falta el tallafocs. A la lliçó 03-02, «Grups de
seguretat i llistes de control d'accés», muntarem les dues capes de filtratge d'AWS: els grups
de seguretat —amb estat i, sobretot, amb la tècnica de referenciar uns grups des d'altres en
lloc d'escriure rangs d'IP— i les NACL, sense estat, amb les seves regles numerades i el seu parany dels
ports efímers. En acabar, el port 5432 de mercadofresco-pedidos només acceptarà connexions
del grup de seguretat de la botiga, i sabràs llegir un REJECT dels Flow Logs que acabes
d'encendre per esbrinar exactament quina de les dues capes ha bloquejat un paquet.
Curs d'AWS
Mòdul 1: Introducció a AWS
- Què és AWS?
- Configuració del teu compte d'AWS
- Infraestructura global d'AWS
- Consola d'administració d'AWS
- AWS CLI i SDK
Mòdul 2: Serveis principals d'AWS
Mòdul 3: Xarxes i lliurament de contingut
- Amazon VPC
- Grups de seguretat i llistes de control d'accés
- Elastic Load Balancing
- Amazon CloudFront
- Route 53
Mòdul 4: Seguretat i identitat
- AWS Identity and Access Management (IAM)
- AWS Key Management Service (KMS)
- Secrets Manager i Parameter Store
- AWS Shield
- AWS WAF
Mòdul 5: Monitoratge i gestió
- Amazon CloudWatch
- AWS X-Ray i traçabilitat distribuïda
- AWS CloudTrail
- AWS Config
- AWS Trusted Advisor
Mòdul 6: Bases de dades
- Com triar la base de dades adequada
- Amazon DynamoDB
- Amazon Aurora
- Amazon Redshift
- Amazon ElastiCache
Mòdul 7: Integració d'aplicacions
- Amazon SQS
- Amazon SNS
- Amazon EventBridge
- AWS Step Functions
- Patrons d'integració: idempotència, reintents i cues de missatges fallits
