Saltar al contenido

Guía de configuración

Cómo configurar CostWarden

Seis pasos, unos quince minutos, la mayor parte esperando a AWS. Síguelo de principio a fin — cada paso dice qué deberías ver después, para que puedas distinguir un paso lento de uno atascado.

Antes de empezar

  • Una cuenta de AWS con Cost Explorer habilitado. Si nunca estuvo activado, AWS tarda unas 24 horas en poblar los datos después de que lo actives.
  • Permiso para crear un rol de IAM en esa cuenta — o alguien que lo tenga, porque este es el único paso que quizás necesites delegar.
  • Acceso de administrador a donde deban llegar las alertas (Slack, Teams, Google Chat o PagerDuty).

A qué le estás dando permiso, exactamente

Una dirección de ida, una de vuelta, y ninguna key en el dibujo.

Le pedimos a AWS asumir un rol dentro de tu cuenta, probando un external ID que sólo tiene tu organización. AWS devuelve credenciales temporales que expiran solas, y con ellas leemos datos de costo. Nada viaja en el otro sentido, y nada de lo que guardamos es un secreto que tengas que rotar.

CostWardennuestra cuenta de AWSTu cuenta de AWSrol IAM de solo lectura1 · AssumeRole, probando tu external ID2 · Vuelven los datos de costo y utilizaciónNo se otorga nada más — el rol no puede cambiar nada en tu cuenta.

Crea tu cuenta

1 minuto

Regístrate con tu correo de trabajo y una contraseña de al menos 8 caracteres. Te llegará un correo de confirmación — haz clic en el enlace antes de hacer cualquier otra cosa.

Confirmar importa más de lo que parece. Una dirección sin confirmar no puede ver ni aceptar invitaciones a otras organizaciones, porque una dirección sin confirmar no prueba que sea tuya. Si un colega te invitó y no encuentras la invitación, casi siempre es por esto.

Al registrarte se crea automáticamente una organización personal para ti. Todo lo que sigue ocurre dentro de ella, y puedes renombrarla o crear otras más adelante desde Configuración.

Conecta tu cuenta de AWS

5 minutos

Este es el único paso con trabajo de verdad. Creas un rol de IAM de solo lectura en tu propia cuenta de AWS y pegas su ARN. CostWarden nunca te pide una access key.

Ve a Configuración → Conexión de nube y presiona Empezar a conectar. Eso genera un external ID único para tu organización y muestra la guía paso a paso. Luego, en AWS:

  1. Abre IAM → Roles → Create role y elige Custom trust policy como tipo de entidad de confianza.
  2. Pega la trust policy que se muestra en Configuración. Nombra nuestra cuenta de AWS y exige tu external ID. Cópiala con el botón en vez de volver a escribirla — el external ID tiene que coincidir exactamente.
  3. Agrega permisos. Elige Create inline policy (no Use existing policy), abre la pestaña JSON y pega la política de permisos desde Configuración. Nómbrala CostWardenReadOnlyAccess — ese nombre es cosmético. AWS debería resumirla como tres servicios: Cost Explorer (Read), Compute Optimizer (List) y EC2 (List).
  4. Nombra el rol CostWardenReadOnly — este no es cosmético. Nuestro permiso para asumirlo está acotado a ese nombre exacto, así que un error de tipeo falla más tarde con un AccessDenied opaco.
  5. Copia el ARN del rol desde su página de resumen, pégalo de vuelta en Configuración y presiona Verificar y conectar.

Acá están los dos documentos, para que los leas ahora. Configuración muestra estos mismos dos ya rellenados — este id de cuenta y este external ID son placeholders, porque todavía no tienes organización. Copia desde Configuración cuando llegues ahí, no desde acá.

Trust policy
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<COSTWARDEN_ACCOUNT_ID>:root"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "sts:ExternalId": "<YOUR_EXTERNAL_ID>"
        }
      }
    }
  ]
}
Política de permisos
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ce:GetCostAndUsage",
        "compute-optimizer:GetEC2InstanceRecommendations",
        "compute-optimizer:GetEBSVolumeRecommendations",
        "ec2:DescribeInstances",
        "ec2:DescribeVolumes"
      ],
      "Resource": "*"
    }
  ]
}

Qué deberías ver: al guardar se hace un assume-role real contra tu trust policy antes de almacenar nada, así que un “Conectado” en verde significa que funciona de verdad — no que anotamos un string. Si falla, el error te dice cuál de las dos causas probables es.

Ejecuta la primera sincronización — y lee el resultado con honestidad

2 minutos

Presiona Sincronizar ahora. Traemos hasta 90 días de historial de Cost Explorer y lo escaneamos completo, así el dashboard y el historial de anomalías se pueblan desde la primera corrida en vez de llenarse de a un día.

Hay tres resultados posibles y los tres son normales; Configuración te dice cuál te tocó:

  • Puntos de costo escritos. Funcionando como debe.
  • “Todavía no hay suficiente historial de costos”. AWS no tiene ningún día completo y asentado de gasto para esta cuenta. Es lo esperable justo después de habilitar Cost Explorer, y en una cuenta con poco uso. Nada de lo que hagas lo hace llegar antes.
  • Un error. Configuración muestra el mensaje textual y degrada el estado de la conexión — no va a seguir diciendo “Conectado” mientras las sincronizaciones fallan.

Dos cosas que debes esperar. Cost Explorer publica el gasto de un día con 24–48 horas de retraso, así que el día más fresco que alguien puede analizar ya tiene uno o dos días. Y el detector necesita cuatro semanas de historial del mismo día de la semana antes de juzgar un día — por debajo de eso se queda callado en vez de adivinar. Una cuenta recién creada no está rota: está acumulando.

A partir de aquí funciona solo: un escaneo todos los días a las 13:00 UTC. Sincronizar ahora es para cuando no quieres esperar.

Conecta un canal de alertas

3 minutos

Hasta que conectes uno, las alertas no tienen adónde ir — el producto sigue detectando, pero tendrías que abrir el dashboard para enterarte, que es justo lo que existe para evitar. Ve a Alertas y elige un tipo; las instrucciones cambian según cuál.

Slack
Crea una app desde cero, activa Incoming Webhooks, agrega uno al canal donde deban llegar las alertas y pega la URL.
Microsoft Teams
En el canal, ⋯ → Workflows → la plantilla “Post to a channel when a webhook request is received”. Teams retiró los viejos conectores de Office 365, así que Workflows es la vía actual; una URL de conector legado sigue funcionando si ya tienes una.
Google Chat
Abre el espacio, haz clic en su nombre → Apps & integrations → Webhooks → Add webhooks. Solo funciona en espacios, no en mensajes directos.
PagerDuty
En el servicio que debe recibir los avisos: Integrations → Add integration → Events API V2; luego copia la Integration Key.

Entregamos un mensaje de prueba antes de guardar para los tres tipos con webhook, así una URL equivocada falla ahí en vez de tragarse en silencio tu primera alerta real. PagerDuty es la excepción: su único mensaje es un incidente disparado, y probar un campo de formulario no debería despertar a quien esté de guardia. Su key se valida por forma.

Conecta tantos como quieras — cada canal habilitado recibe todas las alertas. Pausar un canal lo mantiene conectado y no envía nada.

Invita a tu equipo

1 minuto

Los miembros comparten una conexión de AWS, un dashboard y un conjunto de canales. Hay tres roles:

RolQué puede hacer
OwnerTodo, incluidos facturación, miembros y renombrar la organización.
AdminOperar el producto: AWS, detección, destinos de canales de alertas, miembros y facturación. No puede renombrar la organización ni gestionar owners.
MemberUsar el producto: dashboards, historial de anomalías, triaje, sincronización y etiquetas de canales.

Todavía no enviamos correos de invitación. Tú ingresas una dirección; la invitación queda esperando en la Configuración de esa persona cuando se registre con esa dirección y la confirme. Avísale por otro canal. Las invitaciones expiran a los 14 días — Configuración muestra la fecha y marca las expiradas, para que no te quedes esperando a alguien que ya no puede entrar.

Entiende la prueba y la facturación

1 minuto

Tu prueba de 14 días empieza cuando tu conexión de AWS funciona por primera vez — no cuando te registras. Esperar a que alguien apruebe un rol de IAM no debería comerse tu evaluación, y no hace falta tarjeta para empezar. Los owners ven los días restantes en Configuración → Facturación.

Cuando termina sin una suscripción, dejamos de recolectar datos nuevos — y eso es todo. El escaneo diario se salta tu organización y no salen alertas nuevas, pero todo lo ya sincronizado queda exactamente donde está y sigue legible, con un banner que explica por qué dejó de moverse. No se borra nada. Al suscribirte, retoma en la siguiente corrida.

Un pago fallido sigue funcionando siete días mientras se reintenta la tarjeta, así que una tarjeta vencida no te cuesta una semana de alertas. Si cancelas, el acceso corre hasta el final del período que ya pagaste. El checkout y la facturación los maneja Lemon Squeezy como Merchant of Record — los datos de tu tarjeta nunca llegan a CostWarden.

Cuando algo se ve mal

La mayoría de estos casos son el producto funcionando bien y comunicándolo mal. Cada fila dice cuál es cuál.

“Verificar y conectar” falla con AccessDenied
AWS devuelve el mismo error tanto si la trust policy está mal como si el external ID no coincide, así que no te va a decir cuál fue. Vuelve a copiar la trust policy desde Configuración en vez de leerla — un solo carácter en el external ID alcanza.
Conectado, pero el dashboard está vacío
Revisa Configuración → Conexión de nube. Ahí se reporta la última sincronización: “sin datos de costo utilizables” significa que AWS todavía no tiene nada asentado; un error muestra el mensaje. Si la última sincronización fue exitosa, la cuenta genuinamente no tiene gasto en la ventana.
Sin anomalías después de una semana
Muchas veces es correcto — significa que nada se salió de su línea base. Pero el detector además necesita cuatro semanas de historial del mismo día de la semana antes de juzgar un día, así que una cuenta joven está callada por diseño, no por veredicto.
Un canal muestra un badge rojo de “failing”
El webhook rechazó nuestra última entrega y el error se muestra textual. Causas habituales: la app de Slack fue revocada, o el canal fue eliminado. Arréglalo en el origen y luego presiona Probar — una prueba exitosa limpia el badge.
Un colega invitado no encuentra su invitación
Casi siempre es una dirección de correo sin confirmar. Las invitaciones solo aparecen para una dirección confirmada. Revisa la tarjeta de Cuenta en su Configuración — ahí lo dice.
“La sincronización está pausada” en el dashboard
Terminó la prueba, o una suscripción venció. Los datos existentes están intactos y legibles; un owner puede reactivar la recolección desde Configuración → Facturación.

Eso es toda la configuración

Después de esto funciona solo y deberías casi olvidar que existe — hasta el día en que te diga algo.

Tus preferencias de privacidad