# 📋 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_cidrs` configurable - **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) a `use_lockfile` - **Región**: `mx-central-1` requiere 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` (antes `ccsoft-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) ```bash # 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**: ```bash 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.sh` gestiona 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) ```bash # 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-temp` en `~/.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 - [x] Llave SSH con passphrase generada e instalada - [x] Terraform backend corregido y funcional - [x] EC2 importada al estado de Terraform - [x] Lifecycle prevent_destroy agregado - [x] Permisos sudo configurados para thoth - [x] Session Manager habilitado - [x] Lambdas START/STOP corregidas y desplegadas - [x] EventBridge rules configuradas - [x] Pipeline Bitbucket con OIDC - [x] No hay recursos duplicados - [x] AWS SSO configurado localmente - [x] Terraform apply exitoso (2 creados, 5 modificados, 0 destruidos) --- ### 10. 🚨 Notas Importantes 1. **NO ejecutar `terraform destroy`** — los recursos críticos tienen `prevent_destroy` 2. **Las credenciales temporales caducan** — usar `aws sso login` para renovar 3. **Las Lambdas ahora validan estado** — no fallarán por estados inválidos 4. **El scheduling es L-V** — fines de semana no hay acciones automáticas 5. **Backup de estado Terraform** — se mantiene en S3 con versionado --- *Documento generado automáticamente - Cómputo Contable Soft SA de CV*