Tenim la xarxa i el servidor, però falta protegir-lo amb un firewall (Security Group) i, opcionalment, donar-li una adreça IP fixa (Elastic IP). Recorda els conceptes del Capítol 4 (subcapítols 4.2 i 4.4); ara els escrivim en Terraform i completem la nostra primera infraestructura funcional.

Pas 1: Crear el Security Group (el firewall)

El Security Group (subcapítol 4.2) controla quin tràfic entra i surt de la instància. Per a un servidor web, volem permetre HTTP, HTTPS i, de manera limitada, SSH per a administració.

resource "aws_security_group" "web" {
  name        = "sg-servidor-web"
  description = "Permet HTTP, HTTPS i SSH limitat"
  vpc_id      = aws_vpc.principal.id

  # Regla d'ENTRADA: permetre HTTP des de qualsevol lloc
  ingress {
    description = "HTTP des d'internet"
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  # Regla d'ENTRADA: permetre HTTPS des de qualsevol lloc
  ingress {
    description = "HTTPS des d'internet"
    from_port   = 443
    to_port     = 443
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  # Regla d'ENTRADA: permetre SSH NOMÉS des de la meva IP
  ingress {
    description = "SSH només des de la meva IP"
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["203.0.113.25/32"]   # ← LA TEVA IP, no 0.0.0.0/0
  }

  # Regla de SORTIDA: permetre tot el tràfic sortint
  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"     # tots els protocols
    cidr_blocks = ["0.0.0.0/0"]
  }

  tags = {
    Name = "sg-servidor-web"
  }
}

Repassem les decisions, que apliquen el que hem après en seguretat:

  • HTTP (80) i HTTPS (443) des de 0.0.0.0/0: correcte, perquè volem que qualsevol pugui veure la web pública.
  • SSH (22) només des de la teva IP (/32): crític! Recorda l'error de principiant del subcapítol 4.2. MAI posis SSH obert a 0.0.0.0/0. Aquí ho limitem a una IP concreta (el /32 significa «exactament aquesta IP»). Substitueix 203.0.113.25 per la teva IP real.
  • Sortida (egress) oberta: permet que el servidor surti a internet (per descarregar el programari del user_data). Recorda que els Security Groups són stateful (subcapítol 6.4), així que les respostes a les connexions entrants es permeten automàticament.

Ara la instància del subcapítol 12.2 ja troba el seu Security Group, perquè el referenciava amb vpc_security_group_ids = [aws_security_group.web.id]. Les peces encaixen.

Pas 2 (opcional): Crear una Elastic IP

Recorda el problema de les IPs canviants (subcapítol 4.4): la IP pública d'una instància canvia si la pares i arranques. Si vols una IP fixa, utilitzes una Elastic IP:

resource "aws_eip" "web" {
  instance = aws_instance.web.id
  domain   = "vpc"

  tags = {
    Name = "eip-servidor-web"
  }
}

Això reserva una Elastic IP i la associa a la nostra instància. A partir d'ara, el servidor té una adreça pública estable.

Recorda l'avís de costos (subcapítol 4.4): AWS cobra per les Elastic IPs no utilitzades i per les IPv4 públiques en general. Per a una sola instància de prova està bé, però en arquitectures reals se sol posar un balancejador de càrrega al davant (Capítol 13) en comptes d'una Elastic IP per servidor. Per a aquest primer projecte, la Elastic IP és perfecta per tenir una adreça estable.

El conjunt complet

Ja tenim una infraestructura funcional! Resumim tot el que hem construït al capítol fins ara:

┌──────────── VPC (10.0.0.0/16) ─────────────────┐
│  Internet Gateway ──── Route Table (0.0.0.0/0) │
│                                                 │
│  ┌─ Subxarxa pública (10.0.1.0/24) ──────────┐  │
│  │                                          │   │
│  │   ┌─ Instància EC2 ──────────────┐       │   │
│  │   │  Servidor web (Apache)        │       │  │
│  │   │  Protegit per Security Group  │       │  │
│  │   │  Elastic IP fixa associada    │       │  │
│  │   └───────────────────────────────┘      │   │
│  └──────────────────────────────────────────┘   │
│                                                  │
│  Security Group: HTTP/HTTPS oberts, SSH només a la teva IP │
└──────────────────────────────────────────────────┘

Si executes terraform apply (escrivint yes), Terraform crea tot en l'ordre correcte i, en un parell de minuts, el teu servidor estarà servint la pàgina web «¡Hola des del meu primer servidor a AWS amb Terraform!» a la seva IP pública.

El que has de recordar

  • El Security Group es defineix amb regles ingress (entrada) i egress (sortida), cadascuna amb ports, protocol i orígens (cidr_blocks).
  • Aplica seguretat real: HTTP/HTTPS oberts al públic, però SSH només a la teva IP (/32), mai a 0.0.0.0/0.
  • Com que és stateful, no cal obrir manualment el tràfic de resposta.
  • Una Elastic IP (aws_eip) dona una adreça pública fixa a la instància; recorda el seu cost i que en producció se sol preferir un balancejador.
  • Amb això tens la teva primera infraestructura funcional: xarxa + servidor web + firewall + IP fixa, tot en codi.

Al següent subcapítol aprendràs a extreure informació útil de la teva infraestructura (com la IP del servidor) amb outputs i a entendre millor les referències entre recursos.

Cloud, AWS & Terraform — De zero a expert

Capítol 1 · Què és el cloud computing

Capítol 2 · El mercat cloud i els grans proveïdors

Capítol 3 · Regions, zones de disponibilitat i edge

Capítol 4 · Càlcul: EC2

Capítol 5 · Emmagatzematge: S3

Capítol 6 · Xarxes: VPC

Capítol 7 · Identitat i accés: IAM

Capítol 8 · Bases de dades gestionades

Capítol 9 · Per què Infraestructura com a Codi

Capítol 10 · HCL: el llenguatge de Terraform

Capítol 11 · Providers i estat

Capítol 12 · La teva primera infraestructura real amb Terraform

Capítol 13 · Balanceig de càrrega i autoescalat

Capítol 14 · Serverless amb Lambda

Capítol 15 · Missatgeria i esdeveniments

Capítol 16 · Lliurament de contingut i DNS

Capítol 17 · Contenidors a AWS

Capítol 18 · Mòduls: reutilització i composició

Capítol 19 · Workspaces i gestió d'entorns

Capítol 20 · Backends remots i locking

Capítol 21 · Testing d'infraestructura

Capítol 22 · Terraform en CI/CD

Capítol 23 · Seguretat en profunditat

Capítol 24 · Observabilitat: logs, mètriques i traces

Capítol 25 · Optimització de costos

Capítol 26 · Alta disponibilitat i disaster recovery

Capítol 27 · Well-Architected Framework d'AWS

Capítol 28 · Arquitectures serverless a escala

Capítol 29 · Plataformes de dades a AWS

Capítol 30 · Multi-compte i landing zones

Capítol 31 · Platform Engineering i Internal Developer Platform

Capítol 32 · Certificacions AWS rellevants

Capítol 33 · Projectes per consolidar el que s'ha après

Capítol 34 · Recursos i comunitat

© Copyright 2024. Tots els drets reservats