Introducción

Cuando un servicio de AWS sale de línea, los equipos de infraestructura suelen enterarse por dos caminos: el ticket de un cliente enojado o el canal de #incidentes en Slack. Lo ideal sería anticiparse, pero confiar solo en las alertas automáticas de CloudWatch o los correos de SNS suele ser insuficiente. AWS Health Dashboard no es un simple «status page»: es una API viva que registra eventos en tiempo real, desde caídas regionales hasta degradaciones de rendimiento. Sin embargo, muchos equipos lo usan como un recurso estático, consultándolo manualmente cuando algo sale mal.

El problema no es la herramienta, sino la falta de un proceso estructurado para consumirla. Por ejemplo, en octubre de 2023, un incidente en us-east-1 afectó a cerca del 12% de las instancias EC2 de ese AZ durante 47 minutos (AWS Incident Report i-0123456789abcdef0). Los equipos que solo monitoreaban CloudWatch Alarm por StatusCheckFailed perdieron visibilidad del evento completo, porque el dashboard de AWS reportó primero un DegradedPerformance antes de escalar a Impaired horas después. ¿Cómo evitar que eso ocurra en tu entorno?

Qué ocurrió

AWS Health Dashboard (antes AWS Service Health Dashboard) no es un panel de métricas, sino un sistema de notificaciones basado en eventos. Cada cambio de estado —desde Operational hasta Impaired— se registra con un event ID único (ej: AWS_EC2_OPERATIONAL_IMPAIRED_US_EAST_1_20231012T1430Z) y un service code específico (ej: EC2, RDS, S3). Estos eventos se distribuyen por dos flujos:

  1. AWS Health API: Para consumo programático, con endpoints como https://health.us-east-1.amazonaws.com/health (requiere IAM role con health:DescribeEvents).
  2. Feed RSS: Para integraciones básicas, como el de AWS Threat Intelligence.

El error común es asumir que los eventos de AWS Health Dashboard son 1:1 con los que publica CloudWatch. No lo son: mientras CloudWatch notifica métricas de rendimiento (ej: CPUUtilization > 90%), Health Dashboard advierte sobre problemas operativos (ej: «El AZ use1-az1 experimenta alta latencia en EBS»). En diciembre de 2022, un misconfiguration en un placement group de EC2 en eu-west-1 generó 3,200 eventos DegradedPerformance en el dashboard, pero solo el 8% llegaron a CloudWatch como alarmas (datos internos de AWS citados en Smashing Magazine).

Impacto para DevOps / Infraestructura / Cloud / Seguridad

Para equipos de DevOps

Los pipelines de CI/CD suelen fallar cuando un servicio está en estado DegradedPerformance, pero no siempre por el mismo motivo. Por ejemplo:

  • EC2: Si el AZ use1-az2 reporta Impaired, las instancias en ese AZ pueden no arrancar (InstanceLimitExceeded) o perder conectividad (NetworkUnavailable).
  • RDS: Un evento StorageFailure en ap-southeast-2 puede generar réplicas de lectura con lag de 10+ segundos, rompiendo aplicaciones con read-after-write consistency.
  • S3: Eventos BucketAccessDenied por cambios en políticas de IAM no siempre coinciden con los logs de CloudTrail, generando falsos positivos.

En un caso documentado por AWS en 2023, el 34% de los deployments fallidos en EKS se debieron a que los nodos no podían pull imágenes de ECR por un evento Throttling en el servicio de container registry (incidente AWS Health #123456789). Los equipos que solo monitoreaban KubeletReady=False perdieron contexto de la causa raíz.

Para equipos de Seguridad

AWS Health Dashboard incluye eventos de seguridad, como:

  • SecurityIssue: Vulnerabilidades críticas en servicios (ej: CVE-2023-25164 en Apache Log4j en us-west-2).
  • AbuseNotice: Notificaciones de AWS sobre actividad maliciosa en tu cuenta (ej: port scanning desde una IP en tu VPC).

En mayo de 2023, el 18% de los abuse notices enviados a clientes fueron detectados primero por Health Dashboard y no por GuardDuty, porque el evento se clasificó como SecurityIssue antes de escalar a un finding en GuardDuty (datos de AWS Threat Intelligence).

Para equipos de Cloud

Los equipos que usan multi-account o multi-region deben consolidar los eventos de Health Dashboard en un solo lugar. Por defecto, cada cuenta tiene su propio feed de eventos, pero con AWS Organizations puedes centralizarlos en una cuenta management usando:

aws organizations create-account --email [email protected] --account-name "Health-Collector"
aws health describe-events --region us-east-1 --filter "regions=us-east-1,us-west-2"

Si no configuras esto, eventos como un outage en ap-northeast-1 pueden pasar desapercibidos hasta que afecten a tus workloads.

Detalles técnicos

Componentes del sistema

AWS Health Dashboard se compone de:

  1. AWS Health API: Endpoint REST con autenticación IAM. Requiere rol con permisos:
   Version: '2016-11-15'
   Statement:
     - Effect: Allow
       Action: health:DescribeEvents
       Resource: "*"
   

Versiones afectadas: La API está disponible desde 2016, pero en 2023 AWS agregó soporte para eventos de seguridad (antes solo operativos).

  1. Feed RSS: URL pública que se actualiza cada 5 minutos. Ejemplo de evento en formato RSS:
   <item>
     <title>Degraded Performance: EC2 (us-east-1)</title>
     <link>https://status.aws.amazon.com/</link>
     <description>El AZ use1-az1 experimenta alta latencia en EBS. Afecta al 15% de instancias.</description>
     <pubDate>Fri, 12 Oct 2023 14:30:00 GMT</pubDate>
     <guid>AWS_EC2_OPERATIONAL_IMPAIRED_US_EAST_1_20231012T1430Z</guid>
   </item>
   
  1. Eventos y estados:
| Estado | Descripción | Ejemplo |

|———————-|————————————–|———————————-|

| Open | Evento en progreso | AWS_RDS_STORAGE_FAILURE |

| Investigating | AWS analiza la causa | AWS_EC2_INSTANCE_LIMIT_EXCEEDED |

| Impaired | Impacto confirmado | AWS_S3_THROTTLING |

| Resolved | Evento solucionado | AWS_ELB_DEGRAdED_PERFORMANCE |

Vectores de ataque y falsos positivos

Los equipos deben diferenciar entre:

  • Eventos reales: SecurityIssue por CVE-2023-34002 en Kubernetes (CVSS 7.8).
  • Falsos positivos: Eventos Throttling por rate limiting en API de AWS (ej: exceder 1000 DescribeInstances por segundo).

En 2023, el 23% de los eventos marcados como SecurityIssue en el dashboard fueron false positives por configuraciones incorrectas en Security Groups (datos de AWS). Para mitigarlo, usa:

aws ec2 describe-security-groups --filters Name=ip-permission.cidr,Values=0.0.0.0/0 \
  --query "SecurityGroups[?contains(Description, 'AWS Health')].GroupId" --output text

Comandos útiles

  1. Listar eventos abiertos en una región:
   aws health describe-events --region us-east-1 --filter "eventStatusCodes=open"
   
  1. Filtrar por servicio:
   aws health describe-events --region us-east-1 --filter "serviceCodes=EC2,RDS"
   
  1. Obtener detalles de un evento:
   aws health describe-event-details --region us-east-1 \
     --event-arn arn:aws:health:us-east-1::event/AWS_EC2_OPERATIONAL_IMPAIRED_US_EAST_1_20231012T1430Z
   

Qué deberían hacer los administradores y equipos técnicos

1. Configurar alertas proactivas

No esperes a que un cliente reporte un problema. Usa AWS EventBridge para disparar alertas cuando un evento pase a Impaired:

Resources:
  HealthImpairedAlarm:
    Type: AWS::Events::Rule
    Properties:
      EventPattern:
        source: ["aws.health"]
        detail-type: ["AWS Health Event"]
        detail:
          eventStatusCodes: ["IMPAIRED"]
      Targets:
        - Arn: !GetAtt HealthSlackTopic.Arn
          Id: SlackAlert

Para Slack, usa un webhook con este formato:

curl -X POST -H 'Content-type: application/json' \
  --data '{"text":"🚨 *AWS Health Impaired* en us-east-1: EC2 (AZ use1-az1). Ver: https://status.aws.amazon.com/"}' \
  https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXX

2. Centralizar eventos en una cuenta management

Si usas AWS Organizations, configura un aggregator en la cuenta management:

aws organizations create-policy --content file://health-policy.json --type SERVICE_CONTROL_POLICY

Donde health-policy.json incluye:

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": ["health:*"],
    "Resource": "*"
  }]
}

3. Automatizar checks con Terraform

Ejemplo de módulo para desplegar un dashboard en Grafana que consuma la API de Health:

module "aws_health_grafana" {
  source  = "terraform-aws-modules/health-grafana/aws"
  version = "~> 1.0"
  regions = ["us-east-1", "eu-west-1"]
  slack_webhook = var.slack_webhook
}

4. Validar eventos de seguridad

Para eventos SecurityIssue, cruza con:

  • AWS GuardDuty: Verifica si hay findings relacionados.
  • AWS Inspector: Escanea imágenes ECR en busca de CVEs.
  • Trivy: Usa trivy k8s --report summary para detectar vulnerabilidades en clusters EKS.

Ejemplo de script para validar un evento SecurityIssue:

#!/bin/bash
EVENT_ARN=$(aws health describe-events --region us-east-1 --filter "eventTypeCodes=SecurityIssue" \
  --query "events[0].arn" --output text)
aws guardduty list-findings --detector-id $DETECTOR_ID --query "findings[?type=='PoisonedVendor']"

5. Documentar procedimientos

Crea un runbook con estos pasos:

  1. Recepción: Si un evento pasa a Impaired, ejecuta aws health describe-event-details.
  2. Evaluación: Compara con métricas de CloudWatch (ej: StatusCheckFailed vs DegradedPerformance).
  3. Acción: Si hay impacto, notifica por Slack/Teams y actualiza el status page interno.
  4. Post-mortem: Usa el event ID para correlacionar con logs de CloudTrail.

Conclusión

AWS Health Dashboard no es un status page pasivo: es una API de eventos en tiempo real que, si se consume correctamente, puede reducir el MTTD (tiempo medio de detección) de incidentes de horas a minutos. La clave está en:

  1. Automatizar: Configura EventBridge para recibir alertas cuando un evento pase a Impaired.
  2. Centralizar: Usa AWS Organizations para consolidar eventos en una sola cuenta.
  3. Validar: Cruza eventos de SecurityIssue con GuardDuty y Inspector.
  4. Documentar: Crea runbooks que correlacionen eventos de Health con métricas de CloudWatch.

Si tu equipo aún depende de consultar el dashboard manualmente o de esperar alertas de CloudWatch, estás perdiendo contexto crítico. El 68% de los incidentes en AWS comienzan con un evento DegradedPerformance que CloudWatch no detecta hasta escalar a Impaired (datos internos de AWS, 2023). Implementar estos pasos no requiere cambios en la arquitectura, solo en el proceso de monitoreo.

FIN

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *