Files
proyectosacc-mirror/DOCUMENTACION_CAMBIOS_COMPLETOS.md
T
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

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_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)

# 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.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-devdeveloper
  • 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

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

  • 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

  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