Resumen
- Cloudflare afirma que un cambio en el control de acceso a la base de datos implementado a las 11:05 UTC modificó el resultado de una consulta de metadatos de ClickHouse que no filtraba por nombre de base de datos.
- La consulta modificada devolvió metadatos de columnas duplicados mientras se implementaban permisos explícitos en el clúster de bases de datos. Un archivo de características de Bot Management creado a partir de esos resultados duplicó su tamaño.
- El software que consumía el archivo impuso un límite de tamaño. El análisis post-mortem de Cloudflare muestra una ruta de error que utiliza
unwrap(), lo que provocó un pánico y fallos HTTP 5xx en la ruta del proxy central. - El archivo se generaba cada cinco minutos. Debido a que solo algunos nodos de la base de datos tenían los permisos modificados en un momento dado, las generaciones sucesivas podían alternar entre archivos válidos e inválidos. Esto produjo una recuperación intermitente y al principio se asemejó a un ataque a gran escala.
- La introducción del análisis post-mortem de Cloudflare indica que los fallos comenzaron a las 11:20 UTC, mientras que su cronología detallada registra los primeros errores HTTP de clientes a las 11:28. Ambas representaciones deben permanecer visibles.
- Los servicios principales de CDN y seguridad, Workers KV, Access, Turnstile, el inicio de sesión del panel y partes del comportamiento de seguridad del correo electrónico se vieron afectados de diferentes maneras. La evidencia no respalda afirmar que todos los servicios o clientes estuvieran completamente no disponibles.
- OpenAI informó errores de acceso web durante el período de superposición, mientras que sus aplicaciones móviles, API y servicios backend se mantuvieron saludables. Esta distinción muestra cómo una dependencia puede fallar selectivamente en diferentes superficies de productos.
- Las acciones inmediatas de Cloudflare incluyeron tratar la configuración generada como entrada no confiable, agregar interruptores de apagado y revisar el comportamiento de fallo de los módulos. Su programa posterior Code Orange abordó la implementación controlada de configuración, los contratos de interfaz y las dependencias de emergencia.
- Una interrupción separada de Cloudflare el 5 de diciembre involucró otra ruta de configuración global. Tuvo un desencadenante diferente pero reforzó el argumento de que la implementación de configuración merecía controles comparables a los de un lanzamiento de software.
- La responsabilidad sigue al control sobre el alcance de la consulta, la validación de artefactos, la velocidad de distribución, el comportamiento de respaldo, el aislamiento de interfaces, la observabilidad, la reversión, la comunicación con el cliente y la prueba de que las reparaciones anunciadas funcionan en producción.
Un cambio de permisos se convirtió en autoridad sobre el tráfico global
La primera distinción importante es entre dónde se originó un cambio y dónde se permitió que viajaran sus efectos. El análisis post-mortem de Cloudflare sitúa la acción inicial en una implementación de permisos de base de datos. Esa implementación no reescribió directamente la lógica de procesamiento de paquetes. Cambió lo que una consulta de metadatos podía ver.
La consulta se utilizó en la generación de un archivo de características de Bot Management. Cloudflare explica que la consulta no filtraba metadatos por nombre de base de datos. A medida que se implementaban permisos explícitos, ClickHouse devolvía información de columnas de las tablas subyacentes de una manera que introducía filas duplicadas. El generador aceptó esas filas. El archivo de características resultante tenía aproximadamente el doble de su tamaño esperado.
Un ingeniero que considerara solo el cambio de permisos podría clasificarlo razonablemente como una operación de control de base de datos. Un ingeniero que considerara solo el archivo de características podría clasificarlo como una actualización de configuración interna. La interrupción muestra por qué esas etiquetas eran incompletas. El archivo fue consumido por software en toda la red de Cloudflare, y su contenido afectó a un módulo que operaba en la ruta central del proxy. Una vez distribuido, el artefacto tenía el poder práctico de alterar si el tráfico de los clientes tenía éxito.
Eso es autoridad operativa ejecutable incluso si el artefacto no era un binario convencional. La distinción entre "código" y "configuración" es útil para la propiedad y las herramientas, pero no determina el riesgo. El riesgo sigue lo que una entrada puede causar. Un archivo que puede cambiar el comportamiento implementado globalmente, agotar un límite del analizador, seleccionar una acción de seguridad o bloquear un componente debe gobernarse según esa autoridad.
Este marco no significa que cada actualización de configuración necesite la misma ceremonia que un lanzamiento de software importante. Significa que el control debe ser proporcional al radio de explosión, la reversibilidad y el comportamiento de fallo. Una preferencia regional con un valor predeterminado acotado no presenta el mismo riesgo que un artefacto distribuido mundialmente a un módulo en una ruta de tráfico. El incidente de noviembre demuestra lo que sucede cuando una configuración de alta autoridad se mueve a través de una ruta que no restringe suficientemente la salida malformada o inesperada.
Por lo tanto, la unidad responsable no es el comando individual de base de datos. Es la cadena. El equipo de base de datos controlaba la semántica de acceso. El propietario de la consulta controlaba el alcance y las suposiciones. El propietario del generador controlaba el esquema, la cardinalidad y la validación de tamaño. El sistema de distribución controlaba la velocidad y el alcance de la implementación. El módulo consumidor controlaba el manejo de errores. Los equipos de producto controlaban las dependencias de interfaz. Los equipos de incidentes controlaban el diagnóstico, la derivación y la recuperación.
Los líderes ejecutivos y de confiabilidad controlaban cuáles de esos sistemas recibían inversión de nivel de lanzamiento antes del evento.
La responsabilidad se vuelve más clara cuando sigue esas superficies de control. Se vuelve menos precisa cuando se comprime en "error humano" o se asigna solo a la persona que aprobó el cambio de permisos.
Reconstruyendo la cadena causal directa
El relato de Cloudflare respalda una secuencia de seis partes.
Primero, un cambio en el control de acceso a la base de datos comenzó a las 11:05 UTC. Cloudflare se estaba moviendo hacia permisos explícitos para el acceso a la base de datos. Ese cambio alteró los metadatos visibles para una consulta utilizada por el generador de archivos de características de Bot Management.
Segundo, la consulta no incluía el nombre de la base de datos como filtro. En el estado de permisos cambiado, los metadatos de las tablas subyacentes aparecieron en el conjunto de resultados. Se devolvieron filas de columnas duplicadas. El punto importante no es meramente que la base de datos produjera más filas. El generador descendente se basaba en una suposición implícita sobre la unicidad y el tamaño de esas filas.
Tercero, el generador incorporó las filas duplicadas en el archivo de características. Un contrato robusto en este límite podría haber verificado que las claves esperadas eran únicas, el esquema era válido, la cardinalidad se mantenía dentro de un rango aprendido o declarado, y el artefacto terminado se mantenía por debajo de un máximo operativo. El análisis post-mortem de Cloudflare muestra que la salida inesperada se convirtió en un archivo distribuible.
Cuarto, el archivo se propagó a través de la red de Cloudflare. La distribución convirtió un error local de calidad de datos en un evento operativo global. La velocidad y el alcance de esa distribución no fueron incidentales. Determinaron el radio de explosión antes de que los ingenieros tuvieran suficiente evidencia para identificar la fuente.
Quinto, el software que consumía el archivo impuso un límite de tamaño. Un límite suele ser un control protector. En este caso, el manejo del límite excedido fue decisivo. El ejemplo de Cloudflare identifica una ruta de error de Rust que llamó aunwrap(). En lugar de retener un archivo bueno conocido, rechazar solo el nuevo artefacto o degradar la función de clasificación afectada, el consumidor entró en pánico.
Sexto, el fallo ocurrió en una ruta compartida por el tráfico central y los servicios dependientes. Aparecieron respuestas HTTP 5xx en toda la red de Cloudflare. Los productos que dependían del proxy central o de los servicios detrás de él experimentaron sus propios modos de fallo.
La secuencia separa tres conceptos que los resúmenes de incidentes a menudo fusionan. El evento desencadenante fue la implementación del control de acceso a la base de datos. El mecanismo de fallo directo fue un archivo de características generado de tamaño excesivo que causó un pánico en su consumidor. La falla de control raíz fue la ausencia de barreras efectivas entre la semántica de consulta cambiada, la generación de artefactos, la distribución global y el consumo inseguro.
Las condiciones contribuyentes incluyeron el alcance incompleto de la consulta, la falta de validación de entrada suficiente, la ruta de implementación global del archivo, la semántica de fallo del consumidor y las dependencias de producto adjuntas a la ruta afectada. La detección y el diagnóstico se complicaron por la alternancia de artefactos buenos y malos. La recuperación requirió más que revertir un permiso de base de datos: los ingenieros necesitaron detener la propagación de nuevos archivos y restaurar una configuración buena conocida mientras gestionaban los servicios dependientes.
Esta descomposición importa porque cada categoría implica una reparación diferente. Revertir el cambio iniciador puede terminar un evento. Arreglar la consulta puede prevenir el mismo mecanismo de filas duplicadas. Agregar validación de esquema y tamaño puede detener una clase más amplia de artefactos malformados. La implementación escalonada puede limitar la exposición. Un respaldo seguro puede evitar que un artefacto rechazado derribe tráfico no relacionado. Un mejor aislamiento de dependencias puede evitar que un módulo de producto se convierta en un punto de fallo compartido.
Una organización que registra solo "el cambio de permisos causó la interrupción" puede reparar el desencadenante y dejar el sistema vulnerable a un artefacto diferente de tamaño excesivo o malformado. Una organización que registra solo "archivo demasiado grande" puede aumentar un límite mientras preserva la propagación global insegura. El valor de una cadena causal es que evita que una solución estrecha se confunda con una duradera.
Por qué los síntomas oscilaron
El archivo de características se generaba cada cinco minutos. Cloudflare dice que el cambio de control de acceso no llegó a todos los nodos de ClickHouse al mismo instante. Durante esa transición, un trabajo de generación podía recibir salida de un nodo con los nuevos permisos o de uno que aún no había cambiado.
Eso significaba que la entrada no era consistentemente mala. Una generación podía producir el archivo de características agrandado. La siguiente podía producir un archivo válido. El comportamiento de la red podía, por lo tanto, parecer que se recuperaba y luego fallar nuevamente a medida que se propagaban artefactos sucesivos.
Esto importa tanto para la ingeniería como para la responsabilidad. Los síntomas intermitentes pueden llevar a los respondedores hacia picos de demanda, ataques, inestabilidad de la red o una dependencia externa. Cloudflare dice que sus equipos inicialmente sospecharon un ataque de denegación de servicio distribuido a hiperescala. Ese fue un diagnóstico de trabajo, no evidencia de que ocurriera un ataque. La compañía finalmente identificó una cadena de configuración interna.
La sospecha inicial era comprensible dada la escala y el patrón, pero el retraso también revela una cuestión de observabilidad. ¿Podían los respondedores ver rápidamente qué versión y hash del archivo de características había cargado cada ubicación? ¿Podían correlacionar los cambios en la cardinalidad y el tamaño del archivo con las tasas de error HTTP? ¿El generador exponía qué nodo de base de datos suministró cada resultado? ¿Podía una vista operativa distinguir un aumento de tráfico de un pánico del proxy central?
La observabilidad a menudo se evalúa preguntando si se disparó una alerta. La cronología detallada de Cloudflare registra detección automatizada rápidamente después de los errores de los clientes. La prueba más difícil es si la evidencia apuntaba al control fallido. Una alerta que dice que las tasas de error son altas puede establecer urgencia sin reducir el espacio de búsqueda. Un sistema de configuración de alta autoridad necesita telemetría de procedencia, distribución y activación suficiente para responder qué cambió, dónde cambió, qué versión está activa y si el comportamiento difiere según la versión.
La oscilación también debilita los supuestos de reversión simples. Si los archivos válidos e inválidos se alternan, una mejora momentánea puede confundirse con una remediación exitosa. La recuperación debe vincularse a un artefacto conocido, generación detenida, distribución controlada y métricas sostenidas, no solo a una caída temporal en los errores.
Por lo tanto, el incidente ofrece una lección general para cambios de control parcialmente implementados. Los sistemas de estado mixto pueden crear evidencia no monótona. Un diseño de implementación responsable asume que los estados antiguos y nuevos coexistirán y prueba si las consultas, generadores y consumidores siguen siendo correctos durante ese período. Si la coexistencia cambia la semántica, el plan de implementación debe restringir la secuenciación o agregar lógica de compatibilidad.
La cronología y las brechas de evidencia dentro de ella
El análisis post-mortem de Cloudflare presenta dos horas de inicio. Su relato introductorio dice que la red comenzó a experimentar fallos significativos a las 11:20 UTC. La cronología detallada registra la implementación del control de acceso a la base de datos a las 11:05 y los primeros errores HTTP de clientes a las 11:28. Estas declaraciones no necesitan ser forzadas en una única marca de tiempo falsa. Pueden reflejar telemetría diferente o niveles de agregación. Una reconstrucción cuidadosa preserva ambas.
A las 11:31, según la cronología detallada, las pruebas automatizadas detectaron el problema. La investigación manual comenzó a las 11:32. Se creó una llamada de incidente a las 11:35. Esta secuencia indica que la detección y la coordinación formal siguieron rápidamente una vez que aparecieron los errores de los clientes.
El período difícil llegó después de la detección. La recuperación intermitente y la escala aparente llevaron a los respondedores hacia una hipótesis de ataque. Mientras tanto, el artefacto malo continuaba afectando los servicios. La diferencia entre detectar el fallo e identificar la configuración causal es una medida central de la capacidad de respuesta.
Aproximadamente a las 13:05, Cloudflare implementó derivaciones para Workers KV y Access. Esas acciones muestran que la mitigación específica del producto era posible incluso antes de que se eliminara por completo la causa raíz global. Las derivaciones también revelan límites de dependencia: restaurar una puerta de enlace o una ruta de autenticación podía reducir el impacto sin reparar cada componente afectado.
Luego, el trabajo se centró en devolver Bot Management a un archivo de características último conocido bueno. A las 14:24, Cloudflare detuvo la generación y propagación de nuevos archivos y completó las pruebas del reemplazo. El impacto principal se resolvió a las 14:30. Cloudflare continuó la recuperación descendente e informó que todos los servicios estaban resueltos a las 17:06.
Hay varios intervalos de responsabilidad en esta cronología.
El primero es desde las 11:05 hasta los primeros fallos observados. Ese es el intervalo de propagación en el que la validación previa a la implementación o la exposición escalonada podrían haber prevenido un evento global.
El segundo es desde los primeros fallos hasta la detección automatizada. Ese intervalo parece corto, aunque las diferentes representaciones de las 11:20 y las 11:28 impiden una precisión falsa.
El tercero es desde la detección hasta un diagnóstico causal correcto. El registro público describe la hipótesis de ataque errónea y los artefactos alternantes, pero no expone cada decisión interna o rama de investigación. Esa incertidumbre debe permanecer visible.
El cuarto es desde el diagnóstico hasta la contención global. Detener la generación de archivos y restaurar un artefacto bueno conocido fueron las acciones decisivas. Las derivaciones de productos redujeron el daño antes.
El quinto es desde la recuperación principal a las 14:30 hasta la resolución completa a las 17:06. Esta cola importa porque una plataforma global no se recupera meramente cuando la tasa de error principal cae. Las colas, las sesiones de autenticación, los productos dependientes y los sistemas de los clientes pueden continuar recuperándose a diferentes velocidades.
La cronología no establece pérdidas financieras, sanciones contractuales ni un número universal de clientes afectados. El estado y la evidencia del informe post-mortem de Cloudflare establecen el comportamiento del servicio y los hitos de respuesta. Cualquier afirmación sobre daños requeriría evidencia separada de clientes, contratos o reguladores.
Un incidente produjo varios fallos de producto diferentes
Un lenguaje amplio puede ocultar cómo el diseño de dependencias moldeó el impacto. El análisis post-mortem de Cloudflare distingue entre productos en lugar de decir que todos los servicios se detuvieron de la misma manera.
Los servicios principales de CDN y seguridad devolvieron errores HTTP 5xx. Esta fue la expresión más directa del fallo en la ruta del proxy. Una entrada malformada relacionada con la seguridad no se mantuvo confinada a la clasificación de bots. Afectó el manejo del tráfico ordinario.
Workers KV experimentó errores elevados porque una puerta de enlace utilizaba el proxy central. El concepto de almacenamiento subyacente y la dependencia de la puerta de enlace son capas diferentes. Un cliente que viera un error de KV no sabría necesariamente que el problema iniciador era un archivo de características de Bot Management.
Cloudflare Access experimentó fallos de autenticación generalizados para usuarios que no tenían sesiones activas. Esta distinción importa. Las sesiones existentes y las nuevas rutas de autenticación pueden tener dependencias diferentes. Una declaración de que "Access falló" es menos informativa que identificar qué estado de usuario e interfaz fallaron.
Turnstile no se cargó. Debido a que Turnstile puede estar dentro de un flujo de inicio de sesión o formulario, su fallo puede hacer que otro servicio parezca no disponible incluso si el backend de ese servicio permanece saludable. Este es un mecanismo por el cual una dependencia de seguridad compartida crea un radio de explosión percibido más grande.
El panel de Cloudflare estaba mayormente operativo, pero muchos usuarios no podían iniciar sesión. Su flujo de inicio de sesión dependía de Turnstile, y algunas funciones internas dependían de Workers KV. Por lo tanto, la superficie de gestión se volvió más difícil de usar en el momento en que los clientes necesitaban estado y control. Eso no es solo un problema de conveniencia. El acceso a funciones administrativas y de diagnóstico puede afectar la capacidad de un cliente para sortear un incidente.
La entrega de correo electrónico continuó, según Cloudflare, pero la pérdida temporal de una fuente de reputación IP redujo partes de la detección de seguridad del correo electrónico. Este es un estado de control degradado en lugar de ausencia completa del servicio. Plantea una decisión diferente: si continuar la entrega con detección reducida es más seguro que bloquear el correo o fallar el producto.
Estas distinciones muestran por qué los contratos de interfaz pertenecen a la gobernanza de incidentes. Cada dependencia debe especificar qué sucede cuando una entrada ascendente no está disponible, es inválida o está desactualizada. La elección puede ser retener un valor bueno conocido, usar un valor predeterminado neutral, denegar una acción arriesgada, derivar un paso de clasificación no esencial o fallar la solicitud. No hay una respuesta universal. Debe haber una respuesta deliberada.
El mapa de productos también ayuda a asignar responsabilidad. El equipo que poseía el archivo de características controlaba su validez. El equipo del proxy central controlaba el comportamiento de consumo. Los equipos de producto controlaban si sus servicios dependían sincrónicamente de la ruta afectada y si tenían derivaciones. El liderazgo de la plataforma controlaba los estándares para dependencias compartidas. Los clientes controlaban algunas de sus propias rutas alternativas, pero no podían rediseñar el acoplamiento interno de Cloudflare durante el evento.
OpenAI muestra un límite selectivo del lado del cliente
El registro de estado de OpenAI proporciona una vista principal del lado del cliente durante el período de superposición. OpenAI informó que algunos usuarios encontraron errores HTTP 403 o 504 al acceder a su servicio de consumidor basado en navegador, platform.openai.com, Sora.com y openai.com. Atribuyó el problema a una implementación de configuración defectuosa por parte de un proveedor de red de terceros ascendente.
El mismo registro dice que la aplicación móvil de consumidor de OpenAI y las aplicaciones de Sora, el tráfico de API y los servicios backend se mantuvieron saludables. La recuperación comenzó después de que el proveedor revirtiera el cambio. OpenAI describió el período afectado como aproximadamente de 3:30 AM a 6:40 AM hora del Pacífico.
Esta evidencia es útil porque previene dos errores opuestos. El primero sería tratar el evento de Cloudflare como invisible para los clientes descendentes. OpenAI documentó un impacto real en el acceso web. El segundo sería decir que todo OpenAI falló. Su propio registro de estado traza un límite explícito alrededor de las aplicaciones, API y servicios backend no afectados.
La diferencia probablemente refleja rutas de producto y elecciones de dependencia, pero la evidencia pública no divulga el diseño de red privada de OpenAI, los términos del contrato ni el costo. El registro respalda decir que el acceso web dependía de la ruta ascendente afectada mientras que otras superficies no experimentaron el mismo fallo. No respalda inventar una arquitectura de redundancia o alegar violación de un acuerdo de nivel de servicio.
El impacto selectivo es en sí mismo una señal de riesgo. Una empresa puede creer que tiene diversidad de proveedores porque algunas cargas de trabajo utilizan rutas diferentes, pero los usuarios aún pueden percibir una interrupción importante si el punto de entrada web público falla. Por el contrario, las API no afectadas pueden permitir que los clientes comerciales continúen operando incluso cuando el acceso al navegador está degradado. La evaluación de dependencias debe medir los viajes críticos del usuario, no solo contar proveedores.
La experiencia de OpenAI también ilustra por qué la comunicación con el cliente debe identificar superficies. "Estamos afectados por un proveedor ascendente" es menos procesable que especificar los estados web, móvil, API y backend. Un cliente que decide si cambiar de canal necesita esa granularidad.
Desencadenante, causa raíz y condiciones contribuyentes
Asignar responsabilidad requiere un vocabulario más preciso que "causa".
El evento desencadenante fue la implementación de permisos de base de datos cambiados. Sin ese cambio en ese momento, la consulta no habría producido los mismos metadatos duplicados a través de este mecanismo.
La causa técnica directa fue la creación y distribución de un archivo de características de Bot Management de tamaño excesivo seguido de un manejo inseguro en el consumidor. El archivo duplicado excedió un límite, y la ruta de error produjo un pánico.
El problema de control raíz fue la capacidad de un artefacto generado internamente para cruzar un límite operativo global sin validación suficiente y comportamiento de fallo seguro. La consulta, el generador, el distribuidor y el consumidor carecían colectivamente de una barrera capaz de detener el estado inesperado antes de que afectara el tráfico central.
Las condiciones contribuyentes incluyeron la falta de filtro de nombre de base de datos en la consulta, los estados mixtos de la base de datos durante la implementación, la generación frecuente de archivos, la propagación global rápida, el uso deunwrap()en la ruta de error del consumidor y las dependencias que adjuntaban otros productos al comportamiento del proxy afectado.
El problema de detección no fue la ausencia de una alarma. Las pruebas automatizadas detectaron errores. La limitación más importante fue la visibilidad causal. Los archivos alternantes y los síntomas similares a ataques complicaron la identificación.
El problema de respuesta fue el tiempo requerido para pasar de una señal de incidente amplia al control de la ruta de configuración. Las derivaciones de productos a las 13:05 redujeron parte del impacto, mientras que la contención definitiva llegó cuando se detuvo la generación y propagación de nuevos archivos de características y se restauró un archivo bueno conocido.
El problema de recuperación se extendió más allá del proxy central. Cloudflare informó que el impacto principal se resolvió a las 14:30, pero todos los sistemas se resolvieron a las 17:06. Los servicios descendentes necesitaron tiempo para volver a la normalidad.
Estas categorías evitan que la responsabilidad se detenga en la persona que cambió los permisos. Esa persona puede haber controlado el desencadenante. No necesariamente era dueña de las suposiciones de la consulta, el esquema del archivo de características, la arquitectura de distribución, el comportamiento de pánico o el estándar de lanzamiento de la organización para la configuración.
También evitan el error opuesto de tratar al "sistema" como responsable de una manera que no responsabiliza a ningún equipo. Cada control tenía un dueño o debería haberlo tenido. La investigación debe identificar quién podía cambiar la consulta, quién aprobó el contrato del artefacto, quién estableció la política de implementación, quién revisó la ruta de error del consumidor y quién podía exigir un diseño más seguro.
La configuración debe gobernarse según la consecuencia
Las organizaciones de software a menudo mantienen controles maduros de lanzamiento binario mientras permiten que la configuración se mueva a través de un canal más rápido. La distinción puede ser racional. La configuración se utiliza a menudo para evitar reconstruir software, responder a amenazas y cambiar el comportamiento rápidamente.
La velocidad se vuelve peligrosa cuando la configuración tiene una autoridad amplia pero recibe una validación débil. El evento de noviembre muestra tres propiedades que deberían elevar el nivel de control.
La primera es el alcance. El archivo de características se distribuyó ampliamente en la red de Cloudflare.
La segunda es el acoplamiento. El módulo consumidor operaba en una ruta cuyo fallo afectaba el tráfico central y los productos dependientes.
La tercera es la fragilidad. Un aumento inesperado en el tamaño del archivo no produjo un rechazo acotado. Produjo un pánico.
Un modelo de gobernanza basado en la consecuencia clasificaría dicho artefacto como un objeto de lanzamiento de alto riesgo. Esa clasificación podría requerir un esquema tipado, restricciones de unicidad, umbrales de cardinalidad, verificaciones de tamaño máximo, pruebas de consumidor representativas, implementación canary, propagación con límite de velocidad, reversión automática y un respaldo de último conocido bueno.
Los controles deben cubrir las transiciones, no solo los estados estables. Una implementación de permisos de base de datos puede exponer temporalmente metadatos mixtos. Una migración de esquema puede hacer que los lectores antiguos y nuevos coexistan. Un generador puede observar una implementación parcial. Las pruebas que evalúan solo el estado final previsto pasan por alto precisamente la condición que creó los archivos de características oscilantes.
La canalización de configuración también debe registrar la procedencia. Un operador que responde a un evento global debe poder responder qué consulta fuente produjo un artefacto, qué nodo de base de datos lo respondió, qué versión de código lo generó, qué validaciones pasaron, cuál era su tamaño y cardinalidad, dónde se implementó y qué consumidores lo activaron.
Esto no implica un comité manual lento para cada cambio. La automatización puede proporcionar un control más fuerte y seguir siendo rápida. La validación de esquema, la puntuación de riesgo de diferencias, los canaries, la reversión automática y la procedencia firmada pueden hacer que una canalización de configuración sea más segura y más receptiva que un empuje global en gran medida invisible.
La prueba de responsabilidad es si la organización invirtió en controles proporcionales a la autoridad que le dio al artefacto. Llamar al objeto "configuración" no es una defensa si puede detener el tráfico global.
Fail-open y fail-closed son decisiones de interfaz
El análisis de seguimiento de Cloudflare brinda una visibilidad inusual sobre una cuestión de semántica de fallo. Si el archivo de características de Bot Management era inválido, el sistema podría haber retenido un archivo previo validado o utilizado una clasificación neutral. Si el módulo de Bot Management fallaba, el tráfico no relacionado podría haber continuado en lugar de recibir un error de la ruta del proxy central.
Eso suena como un argumento a favor del comportamiento fail-open, pero el principio necesita límites. Los sistemas de seguridad e identidad a veces protegen recursos donde permitir el acceso bajo incertidumbre crearía un daño inaceptable. Una verificación de autorización fallida puede necesitar denegar una solicitud. Una puntuación de bot no disponible puede poder usar un valor neutral. Una señal de reputación opcional no disponible puede justificar una inspección degradada con monitoreo explícito. La elección correcta depende de la interfaz y el modelo de amenaza.
La falla de control ocurre cuando el comportamiento es accidental. Un pánico no es una decisión de riesgo documentada. Convierte un error de entrada en el resultado de fallo predeterminado del tiempo de ejecución. Ese resultado puede ser mucho más amplio de lo que el propietario del producto pretendía.
Por lo tanto, cada interfaz de alto riesgo debe definir:
- qué entradas son obligatorias y cuáles son consultivas;
- si un valor bueno conocido y obsoleto es aceptable;
- la antigüedad máxima de un valor retenido;
- si un valor predeterminado neutral aumenta el riesgo de seguridad o disponibilidad;
- qué solicitudes deben denegarse bajo incertidumbre;
- cómo se comunica el modo degradado a los operadores y clientes;
- cuándo un interruptor de apagado puede deshabilitar la función dependiente;
- quién tiene autoridad para entrar y salir de ese modo; y
- cómo se prueba el comportamiento elegido.
Para Bot Management, la discusión de reparación pública sugiere que una clasificación neutral o valores predeterminados retenidos podrían haber evitado que el archivo inválido detuviera el tráfico no relacionado. Esa es una lección concreta de este módulo. No debe generalizarse en una afirmación de que todas las funciones de seguridad de Cloudflare deberían fallar en modo abierto.
Una buena semántica de fallo también limita la degradación oculta. Si un sistema continúa sin una señal de seguridad, los operadores deben saber que la calidad de detección ha cambiado. El ejemplo de seguridad de correo electrónico de Cloudflare ilustra este problema: la entrega continuó mientras una fuente de reputación IP no estaba disponible temporalmente. Continuar el servicio puede ser razonable, pero crea una obligación responsable de medir y comunicar el control reducido.
El radio de explosión se diseña en las interfaces
El incidente se movió a través de varias interfaces: base de datos a consulta, consulta a generador, generador a archivo, archivo a distribuidor, distribuidor a consumidor, consumidor a proxy central, y proxy a productos. Cada interfaz fue una oportunidad para reducir el radio de explosión.
En el límite de la base de datos, la consulta podría haber restringido explícitamente la identidad de la base de datos y validado la unicidad.
En el límite del generador, el sistema podría haber rechazado claves duplicadas, cardinalidad inesperada o tamaño excesivo.
En el límite de distribución, un canary podría haber expuesto el pánico en una población pequeña antes de la propagación global.
En el límite del consumidor, el módulo podría haber rechazado el nuevo archivo mientras retenía una versión buena conocida.
En el límite del proxy, el fallo del módulo podría haberse aislado del tráfico ordinario donde el modelo de seguridad lo permitiera.
En el límite del producto, Access, Workers KV, Turnstile y las funciones de gestión podrían haber documentado y probado derivaciones o rutas alternativas.
La existencia de múltiples barreras posibles es importante. Los sistemas confiables no deben depender de un equipo perfecto. El equipo de base de datos puede no predecir una interacción de consulta. El generador aún debe detectar la salida anormal. El generador puede pasarla por alto. El canary aún debe mostrar un fallo del consumidor. El canary puede fallar. El consumidor aún debe degradarse de manera segura.
Este modelo de defensa en profundidad difiere de agregar más revisión al cambio iniciador. La revisión es útil, pero los revisores no pueden anticipar cada interacción en una plataforma global compleja. Una arquitectura sólida asume que un defecto pasará un límite y limita lo que puede hacer a continuación.
Los consejos deben solicitar evidencia en estas interfaces, no solo una declaración de que una lista de acciones de incidente está completa. La evidencia útil incluye pruebas de rechazo para archivos malformados, métricas de implementación que muestren la duración del canary y los criterios de expansión, ejercicios de reversión automática, simulacros de interruptores de apagado y demostraciones de que el tráfico central continúa cuando fallan los módulos opcionales.
La detección fue rápida, el diagnóstico fue más difícil
La cronología de Cloudflare indica que las pruebas automatizadas detectaron el problema en cuestión de minutos después de los primeros errores de clientes en la tabla detallada. Este es un control positivo. Significa que la organización no dependía únicamente de los tickets de los clientes.
Sin embargo, el incidente siguió siendo grave porque saber que el tráfico está fallando no es lo mismo que saber por qué. La hipótesis inicial de DDoS y los síntomas alternantes extendieron el camino hacia la contención.
Un sistema de diagnóstico más sólido conectaría los eventos de cambio con el comportamiento del servicio. Eso incluye implementaciones de control de acceso a la base de datos, cambios de tamaño y hash del archivo de características, estado de distribución, activación del consumidor y firmas de pánico. La correlación no necesita asumir que cada cambio reciente es culpable. Debe hacer que la procedencia del cambio sea lo suficientemente visible como para probarla rápidamente.
El ciclo de generación de cinco minutos del archivo podría haber proporcionado una clave de diagnóstico natural. Si las tasas de error cambiaban con las generaciones de artefactos, los respondedores podrían comparar hashes de archivos buenos y malos y retroceder hasta sus consultas fuente. Si Cloudflare tenía parte de esta visibilidad no está completamente establecido por el registro público. El punto es que una plataforma de configuración global debería hacer que dicho análisis sea rutinario.
El acceso al diagnóstico también debe sobrevivir al incidente. La discusión posterior de Code Orange de Cloudflare incluye acceso de emergencia y dependencias circulares. Un equipo de confiabilidad no puede depender exclusivamente de la plataforma fallida para autenticación, paneles, control de implementación o comunicación de estado. Los caminos independientes son costosos, pero su valor es mayor durante un evento en toda la plataforma.
Por lo tanto, la medida de responsabilidad para la detección debe incluir el tiempo hasta el aislamiento causal, no solo el tiempo hasta la primera alerta. Una organización puede informar una excelente latencia de alerta mientras aún carece de la evidencia necesaria para detener la propagación.
Correcciones inmediatas y el programa posterior Code Orange
El análisis post-mortem inicial de Cloudflare enumeró varias direcciones de remediación. Dijo que la configuración generada internamente debe tratarse como entrada no confiable. Describió el trabajo en interruptores de apagado globales, protección contra la salida de diagnóstico que agota los recursos y revisión del manejo de errores en los módulos del proxy central.
Estas acciones abordan diferentes clases de fallo. La validación de entrada se dirige a artefactos malformados o inesperados. Los interruptores de apagado proporcionan contención cuando una característica se vuelve peligrosa. Los controles de recursos evitan que los datos de solución de problemas creen un segundo fallo. La revisión del manejo de errores busca otras rutas donde un módulo pueda bloquear el tráfico más amplio.
El programa posterior "fail small" y Code Orange amplió el alcance. Cloudflare contrastó los controles maduros de implementación de software binario con los sistemas de configuración que podían cambiar el comportamiento mundial rápidamente. Se comprometió a aplicar principios de implementación controlada a la configuración de red, revisar los modos de fallo y los contratos de interfaz, y mejorar los procedimientos de emergencia y las dependencias circulares.
La distinción entre reparación inmediata y estructural importa. Un parche a la consulta de ClickHouse y un límite de archivo más grande podrían prevenir la recurrencia exacta mientras dejan expuestos otros sistemas de configuración. Un programa que clasifica la configuración de alta autoridad, escalona la implementación y prueba el comportamiento de fallo puede reducir una clase más amplia de eventos.
Las promesas no son prueba. Una hoja de ruta pública establece el reconocimiento de la gerencia y una dirección declarada. La evidencia de reparación requiere una implementación medible. Por ejemplo:
- ¿Qué porcentaje de tipos de configuración globalmente efectivos utilizan ahora implementación escalonada?
- ¿Cuál es la exposición máxima antes de una parada automática?
- ¿Qué esquemas de artefactos imponen unicidad, cardinalidad y tamaño?
- ¿Con qué frecuencia los canaries han rechazado una configuración mala?
- ¿Puede cada módulo central deshabilitarse o degradarse sin reiniciar el proxy?
- ¿Cuándo se ejercieron por última vez la restauración del último conocido bueno y los interruptores de apagado?
- ¿Qué herramientas operativas tienen autenticación independiente y rutas de red?
- ¿Qué excepciones abiertas permanecen, quién las posee y cuándo expiran?
El informe post-mortem de noviembre y el programa posterior crean juntos una línea base de responsabilidad. Cloudflare puede ser evaluado no solo por si se disculpó o publicó una explicación detallada, sino por si las clases de control nombradas se convirtieron en práctica observable.
La interrupción del 5 de diciembre es evidencia de comparación, no el mismo evento
El 5 de diciembre de 2025, Cloudflare experimentó otra interrupción vinculada a un sistema de configuración global. Cloudflare dice que el cambio ocurrió mientras respondía a una vulnerabilidad de React Server Components. Se propagó de una manera que causó errores en un subconjunto que representaba aproximadamente el 28 por ciento del tráfico HTTP durante aproximadamente 25 minutos.
El desencadenante técnico fue diferente de la cadena de noviembre de ClickHouse y Bot Management. Los eventos no deben fusionarse en una sola causa raíz. Diciembre, sin embargo, refuerza una cuestión de gobernanza identificada en el trabajo de Code Orange: la configuración podía alterar el comportamiento global más rápido de lo que los controles existentes podían detectar y contener un defecto.
Cuando dos incidentes comparten una debilidad de control pero no un desencadenante, el estándar de reparación debe incluir tanto especificidad como generalidad. La organización debe arreglar cada mecanismo directo. También debe identificar la clase compartida, como la configuración global de alta velocidad sin exposición escalonada adecuada.
La corta duración de diciembre en comparación con la recuperación de noviembre no hace que el evento sea irrelevante. Proporciona una prueba temprana de si el programa de reparación había llegado a todas las rutas de configuración relevantes y si los cambios de seguridad de emergencia recibieron la misma disciplina de lanzamiento que la configuración ordinaria.
El registro público por sí solo no puede mostrar qué acciones de noviembre se habían completado para el 5 de diciembre o si un control completado falló. Eso requeriría datos de implementación interna y excepción. La secuencia, sin embargo, da a los consejos y clientes una pregunta precisa: qué clases de configuración estaban dentro del nuevo límite de control en esa fecha, cuáles permanecían fuera y por qué.
La interrupción del panel de septiembre muestra el valor de la separación
El incidente del panel y API del 12 de septiembre de 2025 de Cloudflare ofrece una comparación negativa útil. Un problema de dependencia deuseEffectde React generó llamadas repetidas al Tenant Service mientras se estaba realizando una implementación de servicio. El Tenant Service se sobrecargó y las API que dependían de la autorización fallaron.
Cloudflare dice que el plano de datos permaneció separado. La entrega de tráfico ordinario no se vio afectada de la misma manera. Los usuarios experimentaron problemas en el panel y API, pero el fallo no adquirió el radio de explosión de tráfico central del incidente de noviembre.
La comparación no implica que una interrupción del plano de gestión sea menor. Los clientes pueden necesitar el panel y las API para responder a amenazas o sortear fallos. Muestra que la separación arquitectónica puede restringir las consecuencias incluso cuando el plano de control tiene un defecto grave.
Noviembre cruzó un límite diferente. Un archivo de características de seguridad generado llegó al software en la ruta del proxy central, y su fallo afectó al tráfico mismo. Por lo tanto, los dos eventos ilustran el significado práctico de la colocación de interfaces. La gravedad de un defecto depende no solo del código que falló sino de lo que ese código puede detener.
Es por eso que los diagramas de dependencia deben incluir la autoridad de fallo. Un componente puede describirse lógicamente como "Bot Management" mientras opera físicamente dentro de un proxy compartido. Un inicio de sesión de panel puede depender de Turnstile y Workers KV. Los nombres de productos no revelan el acoplamiento completo. Los operadores necesitan mapas probados que muestren qué fallo puede bloquear qué viaje del usuario.
La responsabilidad del cliente sigue siendo real pero asimétrica
Los clientes de Cloudflare no controlaron la consulta de ClickHouse, el generador de archivos de características, el distribuidor global ni el pánico del proxy. La responsabilidad principal de esos controles corresponde a Cloudflare.
Los clientes aún controlan cómo sus propios servicios dependen de Cloudflare. Pueden mapear los viajes críticos del usuario, separar las rutas web y API cuando esté justificado, mantener acceso administrativo y de estado alternativo, decidir si el acceso al origen es posible durante un evento del proveedor, probar la conmutación por error de DNS o tráfico, y comunicar modos degradados.
Esas opciones no son igualmente prácticas para todos los clientes. La arquitectura multiproveedor puede ser costosa e introducir su propia complejidad. Las políticas de seguridad pueden impedir intencionalmente el acceso directo al origen. Las sesiones con estado, los certificados, el enrutamiento y el comportamiento de la aplicación pueden hacer que la conmutación por error sea más lenta de lo que sugiere el lenguaje de adquisición.
La responsabilidad no requiere pretender que cada cliente podría eliminar la dependencia. Requiere que los tomadores de decisiones sepan qué funciones dependen del proveedor, qué alternativas realmente funcionan, cuánto tiempo tomaría un cambio y qué riesgos crea una solución alternativa.
El diferente impacto web y de API de OpenAI muestra por qué este análisis debe ser específico. Una empresa que utiliza una ruta de API no afectada podría continuar sirviendo a sus propios usuarios mientras los empleados que dependen de una interfaz de navegador encuentran errores. Otro cliente puede tener todo el tráfico en una sola ruta. La concentración de proveedores no se mide por un recuento de logotipos. Se mide por las rutas a través de las cuales debe pasar el trabajo crítico.
Los contratos y créditos de servicio pueden asignar algunas consecuencias financieras, pero las fuentes públicas revisadas aquí no establecen términos o pagos particulares. Un cliente no debe tratar un crédito como un control de resiliencia. La pregunta operativa sigue siendo si el servicio puede continuar o recuperarse dentro de su propia tolerancia.
La comunicación debe exponer límites e incertidumbre
El informe post-mortem detallado de Cloudflare es valioso porque identifica el cambio iniciador, el comportamiento de la consulta, el artefacto generado, el fallo del consumidor y los efectos específicos del producto. Ese nivel de detalle permite a los clientes actualizar sus modelos de dependencia y riesgo.
La comunicación aún requiere una lectura cuidadosa. La diferencia entre las 11:20 en la narrativa y las 11:28 en la cronología detallada debe preservarse en lugar de armonizarse silenciosamente. La hipótesis de ataque inicial no debe repetirse como un ataque real. La degradación del producto no debe convertirse en indisponibilidad universal.
La comunicación de estado durante un evento debe responder cuatro preguntas prácticas:
- ¿Qué superficies de producto están fallando?
- ¿Qué superficies permanecen saludables?
- ¿Qué soluciones alternativas son seguras y están disponibles?
- ¿Qué evidencia respalda el estado de recuperación estimado?
Los clientes también necesitan una forma independiente de recibir esa información. Si la misma identidad, panel o ruta de red utilizada para gestionar un servicio se ve afectada, una página de estado por sí sola puede no proporcionar suficiente acceso operativo. Los caminos de emergencia deben ser seguros, limitados y probados, pero no deben compartir todas las dependencias con el sistema que se pretende recuperar.
Después del evento, la comunicación debe separar el hecho confirmado, la inferencia y la pregunta abierta. Cloudflare confirmó la cadena de configuración interna. Anunció trabajos de reparación. El registro público no prueba, por sí mismo, que cada reparación se haya implementado en todos los sistemas de configuración. Ese es el punto en el que los clientes y los consejos deben solicitar métricas de seguimiento en lugar de inferir la finalización a partir de la publicación.
Qué evidencia demostraría una reparación duradera
Un registro de reparación duradero debe ser más concreto que una lista de tickets completados.
Para consultas y contratos de datos, Cloudflare debería poder mostrar que los generadores utilizan identidad explícita de base de datos y tabla, rechazan claves duplicadas, validan versiones de esquema y cumplen con la cardinalidad esperada. Las pruebas deben incluir estados de permisos mixtos e implementaciones parciales.
Para la validación de artefactos, la evidencia debe incluir verificaciones de tamaño máximo antes de la distribución, pruebas de compatibilidad del consumidor y comportamiento de rechazo. Un artefacto rechazado no debe reemplazar a uno bueno conocido simplemente porque fue producido por un sistema interno.
Para la implementación, la evidencia debe mostrar exposición escalonada. Una configuración debe moverse a través de una población pequeña representativa, permanecer allí el tiempo suficiente para señales significativas y expandirse solo cuando se cumplan condiciones definidas. El sistema debe detenerse o revertirse automáticamente cuando las tasas de error, los pánicos o las anomalías del artefacto excedan los umbrales.
Para la semántica de fallo, cada módulo central debe tener una política explícita. Las pruebas deben demostrar qué sucede cuando las entradas faltan, están desactualizadas, malformadas o son demasiado grandes. Un valor predeterminado seguro debe justificarse tanto para el riesgo de seguridad como para el de disponibilidad.
Para el aislamiento de dependencias, Cloudflare debe mapear qué productos dependen del proxy central, Workers KV, Turnstile, Access y las rutas de identidad compartidas. Las derivaciones deben probarse antes de un incidente, no inventarse mientras los clientes están fallando.
Para la observabilidad, los respondedores deben poder rastrear un artefacto activo hasta su consulta fuente, versión del generador, resultados de validación, hash, tamaño, cohorte de implementación y tiempo de activación. Deben poder comparar rápidamente una cohorte fallida con una saludable.
Para el acceso a incidentes, se deben ejercitar rutas independientes de autenticación, implementación y comunicación. Los controles de emergencia deben estar disponibles para los respondedores designados, protegidos contra abusos y observables después de su uso.
Para la responsabilidad del cliente, la documentación del producto debe identificar dependencias significativas y comportamiento de respaldo sin divulgar detalles internos sensibles. Los clientes necesitan saber qué servicios pueden degradarse juntos y qué interfaces alternativas permanecen disponibles.
Para la gobernanza, las excepciones deben ser visibles. Si una configuración de alta autoridad aún no puede utilizar la implementación escalonada, el liderazgo debe conocer la razón, los controles compensatorios, el propietario y la fecha límite. Las excepciones ocultas son donde los programas declarados pierden fuerza operativa.
La métrica más sólida no es si ha aparecido otro archivo de Bot Management de tamaño excesivo idéntico. Es si la organización puede demostrar que la configuración de alta autoridad malformada es rechazada, contenida y recuperable en toda la plataforma.
Una lista de verificación de responsabilidad a nivel de consejo
Los consejos y operadores senior no necesitan aprobar archivos de características individuales. Necesitan evidencia de que la organización ha gobernado la autoridad que poseen esos archivos.
La primera pregunta es el inventario: ¿qué sistemas de configuración pueden cambiar el tráfico global, la autenticación, la clasificación de seguridad, el enrutamiento o el acceso de gestión?
La segunda es la propiedad: ¿quién posee los datos fuente, el generador, la ruta de distribución, el consumidor y la política de fallo para cada sistema?
La tercera es la solidez del contrato: ¿las restricciones de esquema, unicidad, cardinalidad, tamaño y compatibilidad están aplicadas por máquina?
La cuarta es la seguridad de transición: ¿las pruebas cubren versiones mixtas, cambios de permisos parciales, entradas desactualizadas y estados de reversión?
La quinta es la exposición escalonada: ¿puede un artefacto defectuoso alcanzar toda la red antes de que se mida su efecto?
La sexta es el respaldo: ¿qué estado bueno conocido o neutral se retiene, y cuándo es la denegación más segura que el servicio degradado?
La séptima es el aislamiento: ¿puede un módulo opcional de seguridad o análisis fallar sin detener el tráfico no relacionado?
La octava es la observabilidad: ¿pueden los respondedores vincular los errores al artefacto exacto y al cambio fuente en minutos?
La novena es el control de acceso: ¿los respondedores mantienen rutas independientes de estado, autenticación y reversión durante un incidente de plataforma?
La décima es la evidencia del cliente: ¿se comunican las superficies afectadas y no afectadas con la suficiente precisión para que los clientes actúen?
La undécima es la verificación de reparación: ¿qué compromisos de Code Orange están implementados, qué métricas de producción los demuestran y qué excepciones permanecen?
La duodécima es el aprendizaje a través de incidentes: ¿la interrupción de diciembre reveló una clase no cubierta, una implementación incompleta o un fallo en un nuevo control?
Estas preguntas asignan responsabilidad sin pretender que los sistemas complejos puedan estar libres de defectos. El objetivo es evitar que un defecto adquiera autoridad ilimitada.
La responsabilidad sigue al poder de prevenir, contener y recuperar
La interrupción de noviembre de Cloudflare es significativa porque la cadena causal es tanto técnica como organizativa. Un cambio de permisos alteró los metadatos. Los metadatos alteraron un archivo generado. El archivo se movió globalmente. Un pánico de consumidor convirtió la entrada inválida de un módulo en un fallo de tráfico compartido. Las dependencias de producto ampliaron el impacto. Los artefactos alternantes complicaron el diagnóstico. La recuperación dependió de detener la propagación y restaurar un estado bueno conocido.
Ninguna etiqueta única captura esa cadena. No fue un ataque. Fue más que un comando de base de datos malo. No se resolvió simplemente aumentando un límite de archivo. Fue un fallo en gobernar la configuración según su autoridad operativa.
Cloudflare controlaba los sistemas internos que crearon y distribuyeron el artefacto. Su responsabilidad incluye el diseño de la consulta, la validación, la implementación, el respaldo, el aislamiento, el diagnóstico, la recuperación y la prueba de reparación. Los clientes controlaban sus propios mapas de dependencia y elecciones de continuidad, pero su control era más estrecho y descendente.
El resultado más útil no es una promesa de que este incidente exacto nunca se repetirá. Es evidencia de que futuras entradas inesperadas fallarán en menor escala. Eso requiere múltiples barreras: contratos de datos explícitos, distribución escalonada, comportamiento seguro del consumidor, acceso de recuperación independiente y excepciones visibles.
La configuración puede cambiarse más rápido que el software porque la velocidad es valiosa. Una vez que la configuración también puede detener el tráfico global, la velocidad sin contención se convierte en una decisión de gobernanza. El fallo del 18 de noviembre hizo visible esa decisión.
Fuentes
- https://blog.cloudflare.com/18-november-2025-outage/
- https://blog.cloudflare.com/fail-small-resilience-plan/
- https://blog.cloudflare.com/5-december-2025-outage/
- https://blog.cloudflare.com/deep-dive-into-cloudflares-sept-12-dashboard-and-api-outage/
- https://blog.cloudflare.com/q4-2025-internet-disruption-summary/
- https://status.openai.com/incidents/01KABE2437NJYKBFHT22SD3H92/write-up
- https://status.openai.com/incidents/01KABE2437NJYKBFHT22SD3H92
- https://developers.cloudflare.com/bots/get-started/bot-management/
- https://developers.cloudflare.com/bots/reference/bot-management-variables/
- https://developers.cloudflare.com/kv/concepts/how-kv-works/
- https://developers.cloudflare.com/turnstile/
- https://developers.cloudflare.com/cloudflare-one/access-controls/
- https://developers.cloudflare.com/ruleset-engine/about/
- https://developers.cloudflare.com/workers/versions-and-deployments/
- https://developers.cloudflare.com/workers/versions-and-deployments/gradual-deployments/
- https://developers.cloudflare.com/workers/versions-and-deployments/version-overrides/
- https://developers.cloudflare.com/workers/versions-and-deployments/rollbacks/
- https://developers.cloudflare.com/workers/observability/

