[
  {
    "dia": "D-7",
    "accion": "Generar el par y publicar el selector inactivo en el DNS",
    "comando": "openssl genrsa -out dkim_private.pem 2048",
    "verificacion": "dig +short TXT s2026-q1._domainkey.captaindns.com"
  },
  {
    "dia": "D-7",
    "accion": "Almacenar la clave privada en KMS o Vault",
    "comando": "vault kv put secret/dkim/captaindns/s2026-q1 private_key=@dkim_private.pem",
    "verificacion": "vault kv get secret/dkim/captaindns/s2026-q1"
  },
  {
    "dia": "D+0",
    "accion": "Conmutar la firma MTA hacia el nuevo selector",
    "comando": "aws sesv2 put-email-identity-dkim-signing-attributes --email-identity captaindns.com",
    "verificacion": "Verificar la cabecera DKIM-Signature de los mensajes enviados"
  },
  {
    "dia": "D+1",
    "accion": "Monitorizar los informes DMARC aggregate (rua) durante 24h",
    "comando": "N/A (parsing rua)",
    "verificacion": "auth_results/dkim/selector = s2026-q1 para el 100% del tráfico"
  },
  {
    "dia": "D+7",
    "accion": "Confirmar el 100% del tráfico firmado por el nuevo selector",
    "comando": "N/A (agregación rua 7 días)",
    "verificacion": "Umbral objetivo: menos del 1% sobre el selector antiguo"
  },
  {
    "dia": "D+8",
    "accion": "Retirar la firma MTA sobre el selector antiguo (el TXT sigue publicado)",
    "comando": "Editar KeyTable y SigningTable de OpenDKIM y recargar",
    "verificacion": "Ningún mensaje saliente firmado con el selector antiguo"
  },
  {
    "dia": "D+30",
    "accion": "Eliminar el TXT del selector antiguo y destruir la clave privada en KMS",
    "comando": "curl -X DELETE Cloudflare API dns_records luego vault kv destroy",
    "verificacion": "dig +short TXT s2025-q4._domainkey.captaindns.com devuelve vacío"
  }
]
