Files
proyectosacc-mirror/DOCUMENTACION_CAMBIOS_COMPLETOS.md
Evert Daniel Romero Garrido 720aac1e0d docs: documentación completa y diagramas de arquitectura
- 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
2026-05-07 11:23:04 -06:00

246 lines
8.4 KiB
Markdown

# 📋 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*