Destacado Infraestructura

El incidente que cambió mi forma de gestionar las API Keys

Una API Key que prácticamente había olvidado terminó convirtiéndose en el mayor susto técnico y económico que he vivido. Esta es la historia, y la regla que me dejó: al crear una credencial hay que decidir también cuándo y cómo se apaga.

Hace unos meses me llevé el mayor susto técnico que recuerdo desde que trabajo como desarrollador.

No porque fuera el problema más complejo que he tenido que resolver, sino porque durante unos minutos llegué a pensar que aquello podía tener un impacto enorme para la empresa.

Visto desde hoy se resume en una frase: al final no fue una caída, ni una pérdida de datos, ni un ataque. Fue una factura. Y no una factura cualquiera: una factura de seis cifras.

Lo que pasa es que esa frase solo se puede escribir al final. Mientras duró, las tres posibilidades estaban abiertas.

Un candado metálico en primer plano, con el arco abierto

Foto: ImagePerson, CC BY-SA 4.0; imagen recortada y disponible bajo la misma licencia.

Las primeras horas

Durante unos segundos pensé que tenía que tratarse de un error de facturación. Después llegó la parte complicada: comprobar si realmente lo era.

Porque una factura desproporcionada en un servicio externo admite varias explicaciones, y ninguna se puede descartar por corazonada. ¿De dónde salía ese consumo? ¿Qué proyecto estaba llamando a esa API? ¿Ese proyecto seguía existiendo siquiera? ¿Nos habían robado la credencial y la estaba usando otro? ¿Había un fallo de seguridad detrás?

Esa cuarta pregunta fue la que peor se llevó, porque es la única que, además de cara, es grave. Y no se responde mirando la factura: se responde reconstruyendo qué había hecho esa clave, desde dónde y desde cuándo.

Reconstruir varios años de historial tiene un efecto secundario incómodo: descubres que no recuerdas todas las decisiones que tomaste. Eso también es deuda técnica, aunque no tenga forma de código.

Lo que había debajo

Como ocurre en muchos proyectos, utilizábamos distintos servicios externos para cubrir necesidades concretas. Con los años unos proyectos desaparecen, otros evolucionan, algunos servicios dejan de usarse, y sin darte cuenta ciertas credenciales siguen activas mucho más tiempo del que deberían.

Ese fue el verdadero problema. No la tecnología, no el proveedor, no la API: una API Key que seguía viva y que todavía podía generar consumo, asociada a algo que ya no formaba parte de nuestro día a día.

Y pasado el impacto inicial me di cuenta de que la cifra no era lo más preocupante. Lo preocupante era el inventario: servicios, credenciales, permisos y configuraciones que prácticamente había olvidado y que seguían funcionando por su cuenta. Todo aquello funciona durante años, hasta que un día deja de hacerlo o, peor, hasta que un día hace demasiado.

El incidente terminó provocando una revisión completa de la infraestructura, no solo del servicio implicado: todas las claves activas, los servicios de terceros que ya no usábamos, los permisos de cada proyecto, las cuentas antiguas, los métodos de pago vinculados, los sistemas de autenticación, las alertas de consumo y la documentación interna. En pocos días desaparecieron varios servicios que llevaban tiempo sin aportar nada, y quedó mucho más claro qué dependencias seguían vivas.

La resolución

Afortunadamente, la historia no terminó con esa factura pagada.

Tras varios días intercambiando correos con el proveedor, explicando el caso y reconstruyendo lo ocurrido, aceptaron revisarlo en detalle. La rapidez con la que reaccionamos fue determinante, y también lo fue su predisposición a investigar y a valorar las circunstancias concretas. La factura acabó emitiéndose con un abono por el exceso de consumo generado por aquella clave, así que el impacto económico terminó siendo muy distinto del que anunciaba el primer importe.

Fue un enorme alivio. Y una lección incómoda, porque durante la investigación el proveedor fue muy claro en un punto: según sus términos y condiciones, la responsabilidad sobre las API Keys y sobre el uso que se haga de ellas es del cliente.

Es decir, aquella resolución fue una excepción basada en las circunstancias del caso y en cómo se gestionó desde el primer momento. No había ninguna garantía de que una situación parecida se resolviera igual. Y, sinceramente, tampoco quería volver a comprobarlo.

Lo que de verdad cambió

Todo lo anterior es la anécdota. Esto es lo que me quedó:

Desde aquel día, cada vez que creo una nueva API Key también pienso cuándo y cómo voy a eliminarla.

Suena a obviedad y no lo es. Creamos credenciales pensando únicamente en el momento de encenderlas —qué permisos necesita esto para funcionar hoy— y nunca en el de apagarlas. Por eso sobreviven a los proyectos que las justificaban: nadie decidió que siguieran, es que nadie decidió nada.

Desde entonces intento dedicarle a la salida el mismo minuto que a la entrada. Cuando emito una credencial, dejo escrito, en el sitio donde se pueda encontrar después:

  • Quién responde de ella. Una persona, no un equipo ni un buzón compartido.
  • Para qué existe. En una frase, con el nombre del proyecto que la usa.
  • Con qué permisos mínimos. Los que hacen falta para eso y ni uno más.
  • Con qué alerta o tope de consumo, cuando el servicio lo permita. Es la parte que puede convertir una sorpresa de seis cifras en un aviso temprano.
  • Cuándo toca revisarla. Una fecha concreta, aunque sea dentro de un año.
  • Y qué la retira. Una fecha de caducidad si el servicio la soporta o, en su defecto, la condición que la deja sin sentido: «cuando se apague este proyecto, esta clave se va con él».

No siempre se puede rellenar todo. Un servicio antiguo puede no ofrecer permisos granulares, ni alertas, ni caducidad. Pero saber cuál de las seis casillas te falta ya es información: te dice de qué credenciales tendrás que acordarte tú, porque el proveedor no va a acordarse por ti.

Mirándolo con perspectiva

Fue incómodo. Muy incómodo. Pero sirvió para revisar procesos que probablemente habría seguido posponiendo durante años, y hoy tengo bastante más control sobre lo que tengo contratado y encendido.

Si este artículo sirve para que alguien dedique una tarde a revisar las claves que tiene olvidadas, habrá merecido la pena. Crear una credencial lleva unos segundos; olvidarse de ella puede salir mucho más caro.

Las API Keys olvidadas también son deuda técnica. Y, a veces, también deuda económica.

Preguntas frecuentes

¿Cuál fue el origen del problema?

Una credencial que seguía activa, asociada a algo que ya no formaba parte del día a día, generó un consumo inesperado en un servicio externo. El artículo se centra en la cronología y en las lecciones, no en el proveedor concreto.

¿Fue un ataque o una brecha de seguridad?

No, pero esa posibilidad formó parte de la investigación desde el primer momento y no podía descartarse por intuición: hubo que reconstruir qué había hecho aquella clave, desde dónde y desde cuándo para poder afirmarlo. Descartado eso, el aprendizaje principal fue mejorar el inventario de credenciales, la revisión periódica de servicios y la gestión de permisos.

¿Qué debería quedar definido al crear una API Key?

Seis cosas, y la última es la que casi nadie escribe: quién responde de ella, para qué existe, con qué permisos mínimos, con qué alerta o tope de consumo, cuándo toca revisarla y qué la retira, ya sea una fecha de caducidad o la condición que la deja sin sentido. No todos los servicios permiten cubrirlas todas; saber cuál falta ya indica de qué credenciales tendrás que acordarte tú.

¿Qué cambió después del incidente?

Se revisaron todas las API Keys activas, los servicios de terceros que ya no se utilizaban, los permisos por proyecto, las cuentas antiguas, los métodos de pago vinculados, los sistemas de autenticación y las alertas de consumo. Varios servicios que llevaban tiempo sin aportar nada se dieron de baja.

¿Quién responde del uso que se haga de una API Key?

Con carácter general, el cliente. Así lo recogen los términos y condiciones habituales de los proveedores, y así se nos indicó durante la investigación. Que un caso concreto se resuelva de forma favorable es una excepción basada en sus circunstancias, no una garantía sobre la que planificar.

¿Qué recomendaría revisar hoy mismo?

El inventario de API Keys activas, los servicios externos que ya no se utilizan, los permisos excesivos y cualquier credencial asociada a proyectos antiguos. Y, si el servicio lo permite, activar una alerta de consumo: es lo que convierte una sorpresa en un aviso.

Otras noticias

Infraestructura

El servidor estaba vivo, pero no contestaba

Estoy fuera y uno de mis servidores decide que necesita una placa base nueva. OVHcloud la cambia, las MAC cambian con ella y me lo devuelve en Rescue Mode: discos sanos, RAID sano, Ubuntu entero y una configuración de red que espera una tarjeta que ya no existe. El arreglo cabía en una línea de YAML.

Leer más →

El blog, día a día

46 artículos publicados 18 dic 2025 — 17 dic 2026

¿Te ha resultado útil o quieres comentar algo?

Hablemos →