Joan zuzenean edukira

6.3. Infraestructura híbrida en AWS (sin IAM Roles)

Nota: este documento es una propuesta orientativa. El alumnado puede resolverlo como quiera y adaptarlo a las restricciones del laboratorio de AWS Academy.

Objetivo: replicar el laboratorio híbrido Windows + Linux en AWS Academy sin usar IAM Roles, empleando credenciales de usuario (access key/secret) con permisos mínimos para S3 y buenas prácticas operativas.


6.3.1. Arquitectura objetivo

  • VPC única con 3 subredes:
  • Pública: bastion/jump host o NAT Gateway.
  • Privada-A: EC2 Windows Server (DC + AD DS + DNS).
  • Privada-B: EC2 Linux (LAMP: Apache/Nginx + PHP + DB).
  • Seguridad: Security Groups restrictivos (LDAP/Kerberos/SMB/SSH/HTTPS, mínimo necesario).
  • DNS interno: DC (AD DS) y opcionalmente Route 53 Private Hosted Zone.
  • Backups: bucket S3 con Versioning + Lifecycle. Sin Roles, usaremos credenciales locales en Linux/Windows.

6.3.2. Red: VPC, subredes y ruteo

1) VPC: 10.0.0.0/16. 2) Subredes: - 10.0.1.0/24 (pública) - 10.0.2.0/24 (privada-A: Windows) - 10.0.3.0/24 (privada-B: Linux) 3) Rutas: - Pública → Internet Gateway. - Privadas → NAT Gateway (para updates) o acceso vía bastion. 4) DHCP Options Set (opcional): dominio interno empresa.local y DNS (ajustar cuando DC esté listo).


6.3.3. Security Groups (SG)

  • SG-DC (Windows):
  • Inbound desde SG-Linux y bastion: TCP 53 (DNS), 88 (Kerberos), 135/445 (RPC/SMB), 389/636 (LDAP/LDAPS), 464 (kpasswd), 3389 (RDP desde bastion).
  • SG-Linux (LAMP):
  • Inbound desde SG-DC y bastion: TCP 22 (SSH), 80/443 (si procede), 3306 si DB local y acceso limitado.
  • SG-Bastion: SSH/RDP sólo desde tu IP; outbound a privados.

Principio de mínimo privilegio: abrir sólo puertos imprescindibles y entre SGs concretos.


6.3.4. Instancias EC2 (sin Roles)

  • Windows Server (t3.small/medium; 40–60 GB):
  • AMI: Windows Server 2019/2022. SG: SG-DC. Subred: privada-A.
  • Linux (t3.small; 30–60 GB):
  • AMI: Ubuntu 22.04/24.04. SG: SG-Linux. Subred: privada-B.
  • Bastion (opcional): AMI Linux en subred pública, con SSH desde tu IP.

Notas: - Si no puedes usar SSM, gestiona acceso mediante bastion o port forwarding. - Etiqueta recursos (Environment=Academy, Role=DC/LAMP, Owner=equipoX).


6.3.5. Dominio AD y DNS (Windows)

1) Instala AD DS y promueve DC (nuevo bosque empresa.local). 2) DNS integrado en DC. Verifica resolución interna. 3) Crea usuarios/grupos: alumno1, LinuxUsers, LinuxAdmins. 4) GPO mínimas (opcional) y NTP interno.


6.3.6. Linux LAMP y unión a AD

1) Prepara LAMP/LEMP y tu app Laravel (ver 6.3 LAMP local si procede). 2) Configura DNS del Linux apuntando al DC. 3) Únete a AD (ver 6.2): bash sudo apt update sudo apt install -y realmd sssd sssd-tools adcli samba-common-bin oddjob oddjob-mkhomedir packagekit realm discover empresa.local sudo realm join empresa.local -U Administrador realm list && klist 4) Grupos AD en Linux (sudo y acceso): ver 6.2 (simple_allow_groups, sudoers).


6.3.7. Backups sin Roles: credenciales locales y mínimos permisos

1) Crear usuario IAM (si el lab lo permite) con sólo acceso S3 al bucket del equipo. - Política mínima (ejemplo) limitada por bucket/prefijos linux/* y windows/*. - Anota Access Key y Secret Key. - Si IAM Users tampoco está permitido, usar credenciales temporales proporcionadas por el lab o mecanismos alternativos indicados por el instructor.

2) Configurar credenciales en Linux (sin exponerlas): - Archivo ~/.aws/credentials (permisos 600): ini [academy] aws_access_key_id=AKIA... aws_secret_access_key=... - En entorno de backup (restic/rclone), exporta variables temporalmente o usa el perfil academy.

3) Linux → S3 con restic (recomendado): bash sudo apt install -y restic export AWS_PROFILE=academy export RESTIC_REPOSITORY=s3:s3.amazonaws.com/mi-bucket-backups/linux export RESTIC_PASSWORD=elige_un_secreto restic init restic backup /etc /var/www /var/lib/mysql --exclude-caches restic snapshots - Cron (usa AWS_PROFILE=academy en la línea de cron o un wrapper script con source).

4) Windows → SMB en Linux y sync a S3 (rclone): - En Linux, comparte /srv/backup/windows (Samba) con permisos restringidos. - Windows Server Backup → \\linux-backup\windows. - Sin Roles, configura rclone con el perfil academy o variables: bash rclone config # remote "s3academy" → provider S3, region adecuada, envía/lee de perfil "academy" rclone sync /srv/backup/windows s3academy:mi-bucket-backups/windows --checksum --backup-dir s3academy:mi-bucket-backups/_versionados/$(date +%F)

5) Buenas prácticas con credenciales: - Nunca subirlas a git o dejarlas en .env de la app. - Usar ~/.aws/credentials y AWS_PROFILE. - Rotar credenciales si se filtran y limitar por bucket/prefijo.


6.3.8. DNS interno y nombres

  • Opción A: sólo DNS del DC para resolución interna.
  • Opción B: Route 53 Private Hosted Zone empresa.local con A records para DC y LAMP.
  • Ajusta resolutores (Conditional Forwarders) según necesites.

6.3.9. Seguridad, costes y operación (sin Roles)

  • Seguridad:
  • S3 con Versioning y cifrado (SSE-S3); mínimo privilegio en políticas.
  • Evita exponer RDP/SSH al público; usa bastion.
  • Costes:
  • Instancias pequeñas, apaga fuera de horario.
  • Lifecycle en S3 y limpieza periódica.
  • Operación:
  • Logs y alarmas básicas (si el lab lo permite).
  • Pruebas periódicas de restauración.

6.3.10. Checklist de verificación

  • Linux resuelve empresa.local y se une al dominio (id, getent, klist).
  • App Laravel accesible y, si aplica, integrada con AD.
  • Backups funcionales: restic snapshots en linux/ y ficheros de WSB sincronizados en windows/ del bucket S3.
  • Sin credenciales expuestas en repositorios o .env.