720aac1e0d
- Agregar DOCUMENTACION_CAMBIOS_COMPLETOS.md con todos los cambios realizados - Crear diagrama-arquitectura-aws.excalidraw: Arquitectura completa AWS - Crear diagrama-pipeline-cicd.excalidraw: Flujo CI/CD Bitbucket to AWS - Crear diagrama-seguridad-acceso.excalidraw: Seguridad y métodos de acceso Refs: Documentación Mayo 2026
8.4 KiB
8.4 KiB
📋 Documentación Completa de Cambios - Proyectosacc PROD
Fecha: Mayo 2026 Ambiente: PRODUCCIÓN (AWS Account: 523761210517) Región: mx-central-1 (AWS México) Responsable: Área de Tecnología y Desarrollo - CCsoft
📌 Resumen Ejecutivo
Este documento consolida todos los cambios realizados a la infraestructura de proyectosacc en producción, incluyendo mejoras de seguridad, correcciones de Terraform, configuración de accesos, y solución de problemas de scheduling automatizado.
🎯 Alcance de los Cambios
1. 🔐 Seguridad SSH y Acceso
1.1 Generación de Nueva Llave SSH
- Archivo:
keys/thoth_prod_key - Tipo: ED25519
- Passphrase:
fEbr9CoAlfllHDhocAbRo+aja+SW72a5 - Usuario:
thoth - Estado: ✅ Instalada en EC2 PROD (78.13.201.205)
1.2 Restricción de Acceso SSH
- Antes: Acceso abierto (
0.0.0.0/0) - Después: Acceso restringido (deshabilitado por defecto)
- Variable:
allowed_ssh_cidrsconfigurable - Acceso alternativo: AWS Systems Manager Session Manager
1.3 AWS Systems Manager (Session Manager)
- Estado: ✅ Instalado y configurado en EC2
- IAM Permissions: ✅ Agregados a
proyectosacc-ec2-policy-prod - Ventaja: Acceso seguro sin abrir puertos SSH
2. 🏗️ Infraestructura Terraform
2.1 Corrección de Backend S3
- Problema: Bucket incorrecto (
ccsoft-terraform-state) - Solución: Bucket correcto (
ccsoft-proyectosacc-terraform-state-prod) - Lockfile: Cambiado de
dynamodb_table(deprecado) ause_lockfile - Región:
mx-central-1requiere Terraform 1.15.2+
2.2 Importación de EC2 al Estado
- Instancia:
i-02428e733083ea877 - Estado: Importada correctamente a Terraform state
- AMI:
ami-00665bcc521d597f1(Ubuntu Server 22.04 LTS)
2.3 Lifecycle Rules - Protección Anti-Destrucción
| Recurso | Protección | Detalle |
|---|---|---|
| VPC | prevent_destroy | ✅ No se puede destruir |
| EC2 | prevent_destroy + ignore_changes | ✅ AMI, user_data, tags scheduling |
| RDS | prevent_destroy + ignore_changes | ✅ Tags scheduling |
| S3 Frontend | prevent_destroy | ✅ No se puede destruir |
| S3 Artifacts | prevent_destroy | ✅ No se puede destruir |
| CloudFront | prevent_destroy | ✅ No se puede destruir |
| NAT Gateway | prevent_destroy | ✅ No se puede destruir |
2.4 Variables Corregidas
- Key Name:
sacc-prod-key-2026(antesccsoft-prod-key) - AMI: Actualizada para coincidir con instancia existente
- Tags Scheduling: Preservados vía
ignore_changes
3. 👤 Permisos de Usuario Thoth
3.1 Configuración Sudo (NOPASSWD)
# Archivo: /etc/sudoers.d/thoth
# Permisos concedidos:
| Comando | Descripción |
|---|---|
/bin/nano /etc/sacc4/sacc4.env |
Editar variables de entorno |
/bin/systemctl * api-sacc4-*.service |
Control de servicios API |
/bin/systemctl daemon-reload |
Recargar systemd |
/opt/sacc4/ |
Control total del directorio |
/bin/chmod, /bin/chown |
Permisos de archivos |
3.2 Acceso SSH
- Llave:
thoth_prod_key(ED25519 con passphrase) - Comando con passphrase:
eval "$(ssh-agent -s)" ssh-add ~/.ssh/thoth_prod_key ssh -i ~/.ssh/thoth_prod_key thoth@78.13.201.205
4. ⏰ Scheduling Automatizado (Lambda START/STOP)
4.1 Problema Original
- Fecha: 2026-05-06 19:00:42 UTC
- Error:
InvalidDBInstanceState- RDS no estaba detenida - Causa: Lambda intentó iniciar RDS que ya estaba corriendo
4.2 Solución Implementada
Lambda START (sacc4-start-instances):
- ✅ Valida estado EC2 antes de iniciar (debe estar
stopped) - ✅ Valida estado RDS antes de iniciar (debe estar
stopped) - ✅ Logs claros: indica estado actual y acción tomada
- ✅ Campos de resultado:
ec2_skipped,rds_skipped
Lambda STOP (sacc4-stop-instances):
- ✅ Valida estado EC2 antes de detener (debe estar
running) - ✅ Valida estado RDS antes de detener (debe estar
available) - ✅ Logs claros: indica estado actual y acción tomada
4.3 Horarios Configurados
| Acción | Hora CDMX | Hora UTC | Días | Estado |
|---|---|---|---|---|
| START | 08:00 AM | 13:00 | Lunes-Viernes | ✅ ENABLED |
| STOP | 07:00 PM | 00:00 | Martes-Sábado | ✅ ENABLED |
5. 🔄 Pipeline Bitbucket (CI/CD)
5.1 Cambios en bitbucket-pipelines.yml
- OIDC: ✅ Configurado para autenticación AWS sin credenciales manuales
- Script:
aws-oidc-setup.shgestiona credenciales temporales automáticamente - Variables: Agregado soporte para passphrase SSH
- Steps: Expandido de 7 a 9 pasos con validaciones
5.2 PR #3 Fusionado
- Branch:
feature/ssh-passphrase-dev→developer - Status: ✅ MERGED
- Archivos: 13 archivos, +1,693 líneas
- Cambios clave:
- Soporte passphrase SSH
- Terraform lifecycle rules
- Sudo configuration para thoth
- Session Manager support
6. ☁️ Estado Actual de Infraestructura AWS
6.1 Recursos Activos
| Servicio | ID/Endpoint | Estado | IP/URL |
|---|---|---|---|
| EC2 | i-02428e733083ea877 | running | 78.13.201.205 |
| RDS | proyectosacc-db-prod | available | proyectosacc-db-prod.c3uysq6uyyx0.mx-central-1.rds.amazonaws.com |
| NAT Gateway | nat-0d010c53e7583d761 | available | 78.13.177.201 |
| S3 Frontend | ccsoft-proyectosacc-frontend-prod | ✅ | — |
| S3 Artifacts | ccsoft-proyectosacc-artifacts-prod | ✅ | — |
| CloudFront | E35SPB389PFV1J | Deployed | d46pni5e2nvua.cloudfront.net |
| Lambda START | sacc4-start-instances | ✅ | Versión 2 |
| Lambda STOP | sacc4-stop-instances | ✅ | Versión 2 |
| VPC | vpc-0ed9acf33a45527ad | available | 10.2.0.0/16 |
6.2 Validación de Duplicados
| Recurso | Cantidad | ¿Duplicado? |
|---|---|---|
| EC2 Instances | 1 | ✅ No |
| RDS Instances | 1 | ✅ No |
| NAT Gateways | 1 | ✅ No |
| Elastic IPs | 2 (1 NAT, 1 EC2) | ✅ No |
| Load Balancers | 0 | ✅ No |
| Lambda Functions | 2 | ✅ No |
| EventBridge Rules | 2 | ✅ No |
| CloudFront Distributions | 1 | ✅ No |
7. 🔑 Gestión de Credenciales AWS
7.1 SSO Configurado (Recomendado)
# Perfil: proyectosacc-sso
aws sso login --profile proyectosacc-sso
- URL: https://d-9067a6e1d5.awsapps.com/start
- Rol: PER-AWS-Admins-Infra-Ops
- Cuenta: 523761210517
7.2 Pipeline Bitbucket (Automático)
- Método: OIDC (OpenID Connect)
- Script:
scripts/aws-oidc-setup.sh - Duración: 3600 segundos (1 hora)
- NO requiere credenciales manuales
7.3 Credenciales Temporales (Legacy)
- Perfil:
proyectosacc-tempen~/.aws/credentials - Nota: Caducan rápidamente, usar SSO como alternativa
8. 📁 Archivos Clave Modificados
| Archivo | Cambio | Ruta |
|---|---|---|
backend.tf |
Bucket S3 corregido | terraform/backend.tf |
main.tf |
Lifecycle rules + recursos | terraform/main.tf |
variables.tf |
Variables nuevas | terraform/variables.tf |
user-data.sh |
Sudo config para thoth | terraform/user-data.sh |
bitbucket-pipelines.yml |
OIDC + passphrase | raíz |
aws-oidc-setup.sh |
Setup de credenciales | scripts/aws-oidc-setup.sh |
lambda-scheduler |
Validación de estado | terraform-sacc4/modules/lambda-scheduler/ |
9. ✅ Checklist de Verificación
- Llave SSH con passphrase generada e instalada
- Terraform backend corregido y funcional
- EC2 importada al estado de Terraform
- Lifecycle prevent_destroy agregado
- Permisos sudo configurados para thoth
- Session Manager habilitado
- Lambdas START/STOP corregidas y desplegadas
- EventBridge rules configuradas
- Pipeline Bitbucket con OIDC
- No hay recursos duplicados
- AWS SSO configurado localmente
- Terraform apply exitoso (2 creados, 5 modificados, 0 destruidos)
10. 🚨 Notas Importantes
- NO ejecutar
terraform destroy— los recursos críticos tienenprevent_destroy - Las credenciales temporales caducan — usar
aws sso loginpara renovar - Las Lambdas ahora validan estado — no fallarán por estados inválidos
- El scheduling es L-V — fines de semana no hay acciones automáticas
- Backup de estado Terraform — se mantiene en S3 con versionado
Documento generado automáticamente - Cómputo Contable Soft SA de CV