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.localcon 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.localy 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 enwindows/del bucket S3. - Sin credenciales expuestas en repositorios o
.env.