devops

Red de primer nivel de Cloudflare como código con Pulumi

Fuente: pulumi.com 4 min de lectura

Compartir

Red de primer nivel de Cloudflare como código con Pulumi

Estás leyendo un resumen. El contenido completo está en pulumi.com.

Los equipos de plataforma que gestionan aplicaciones en múltiples nubes enfrentan una peligrosa brecha de visibilidad. Mientras que la infraestructura de origen está controlada de manera estricta, la configuración del borde a menudo se desvía debido a ajustes manuales en la consola. Los registros DNS apuntan a orígenes obsoletos, las reglas del WAF son inconsistentes entre entornos y las políticas de Zero Trust no logran mantenerse al día con los cambios del equipo. Esta deriva del borde conduce a la exposición de la aplicación o fallos de enrutamiento que los equipos de origen solo notan después de que los usuarios los informan. A medida que las aplicaciones abarcan múltiples nubes, el borde a menudo se convierte en la capa más consistente para hacer cumplir las políticas de seguridad y tráfico. El costo de esperar una estrategia de borde unificada es alto. Cada cambio manual es un posible agujero de seguridad o un cuello de botella de rendimiento que elude el rigor estándar de CI/CD. Lo que construirás En esta publicación, construirás una base de borde estandarizada de Cloudflare. Utilizarás Pulumi para definir: registros DNS que apunten a tus orígenes en múltiples nubes. Reglas personalizadas de WAF para bloquear tráfico malicioso antes de que llegue a tu red. Un worker canario para manejar la lógica del borde y la validación de encabezados. Políticas de acceso de Zero Trust para asegurar herramientas internas y el acceso a la origen. Al final, tendrás un borde controlado por versiones que podrás validar e implementar en cualquier entorno. El programa de Pulumi Construiremos un programa de Pulumi que configure un entorno de borde completo. Este enfoque asegura que tu seguridad y enrutamiento del borde estén siempre en sincronía con tu código de aplicación. Configurando el proveedor Primero, asegúrate de tener instalado el paquete @pulumi/cloudflare y tus credenciales configuradas. Los ejemplos a continuación se verifican con @pulumi/cloudflare@6.15.0, la API del Registro de Pulumi v6 actual en el momento de escribir. npm install @pulumi/cloudflare@6.15.0 pulumi config set --secret cloudflare:apiToken "$CLOUDFLARE_API_TOKEN" Definiendo la infraestructura Aquí está el programa completo de Pulumi en TypeScript. Si tu zona ya tiene un conjunto de reglas WAF personalizado para la misma fase, importa ese conjunto de reglas o añade la regla a tu conjunto de reglas existente en lugar de crear otro conjunto de reglas a nivel de fase que pueda fallar o entrar en conflicto. import * as cloudflare from "@pulumi/cloudflare"; const accountId = "<tu-id-de-cuenta-de-cloudflare>"; const trustedAdminIp = "198.51.100.10"; const zone = new cloudflare.Zone("mi-zona", { account: { id: accountId, }, name: "example.com", }); const www = new cloudflare.DnsRecord("www", { zoneId: zone.id, name: "www", content: "1.2.3.4", ttl: 1, type: "A", proxied: true, }); const admin = new cloudflare.DnsRecord("admin", { zoneId: zone.id, name: "admin", content: "1.2.3.4", ttl: 1, type: "A", proxied: true, }); const wafRule = new cloudflare.Ruleset("waf-regla", { zoneId: zone.id, name: "Bloquear tráfico sospechoso", description: "Regla WAF personalizada para bloquear patrones específicos", kind: "zone", phase: "http_request_firewall_custom", rules: [{ action: "block", expression: `(http.request.uri.path contains "/admin" and not ip.src in {${trustedAdminIp}})`, description: "Bloquear acceso no autorizado al admin", }], }); const worker = new cloudflare.WorkersScript("canary-worker", { accountId: accountId, scriptName: "edge-canary", compatibilityDate: "2026-01-01", mainModule: "worker.js", content: ` export default { async fetch(request) { return new Response("Base de borde validada", { headers: { "x-edge-baseline": "active" }, }); }, }; `, }); const workerRoute = new cloudflare.WorkersRoute("canary-route", { zoneId: zone.id, pattern: "www.example.com/*", script: worker.scriptName, }); const adminGroup = new cloudflare.ZeroTrustAccessGroup("grupo-admin", { accountId: accountId, name: "Administradores", includes: [{ email: { email: "admin@example.com", }, }], }); const accessApp = new cloudflare.ZeroTrustAccessApplication("herramienta-interna", { accountId: accountId, name: "Herramienta de administración interna", domain: "admin.example.com", type: "self_hosted", policies: [{ name: "Permitir administradores", precedence: 1, decision: "allow", includes: [{ group: { id: adminGroup.id, }, }], }], }); Validación Una vez que ejecutes pulumi up, puedes validar tu base de borde con estos pasos: Verificación DNS: Ejecuta dig www.example.com para confirmar que el registro apunta a las IPs proxy de Cloudflare. Prueba de WAF: Intenta acceder a www.example.com/admin desde una IP no autorizada y verifica que recibes una respuesta 403 Forbidden. Worker canario: Usa curl -I https://www.example.com y verifica el encabezado x-edge-baseline: active. Política de acceso: Navega a admin.example.com y verifica que eres redirigido a la página de inicio de sesión de Cloudflare Access. Al gestionar estos recursos como código, eliminas el riesgo de deriva manual y aseguras que cada entorno comience con una base de borde segura y validada.

Artículos relacionados