Fluxheim/Documentos/Extensiones WASM

Extensiones WASM

Compilación Wasm dedicada basada en el perfil de producción completo, con hooks de políticas acotados, ACME, métricas y OpenTelemetry

Qué te aporta

Compilación Wasm dedicada basada en el perfil de producción completo, con hooks de políticas acotados, ACME, métricas y OpenTelemetry.

FunciónÚsalo para
Decisiones de accesoLos hooks access-decision HTTP/1 nativos en vivo usan orden de prioridad, composición first-deny-wins y comportamiento fail-closed.
Hooks de cabecerasLos hooks request-headers y response-headers solo pueden definir o retirar cabeceras sintéticas permitidas, como el ejemplo policy-tier.
Decisiones de rutaroute-decision hooks pueden continuar, denegar o seleccionar solo ramas de ruta canary y mirror configuradas que coinciden.
Decisiones de cacheLos hooks cache-lookup pueden continuar, pasar al origen, omitir la caché o denegar. Los hooks cache-store pueden continuar, omitir el almacenamiento o denegar antes de escribir en la caché de memoria/disco.

Ejecutar

Use el archivo o la imagen profile-wasm dedicados; la compilación completa normal permanece intencionadamente sin Wasm.

La imagen Wasm oficial contiene el entorno de ejecución, pero no plugins del operador. Monte los módulos revisados en modo de solo lectura y fije cada módulo mediante SHA-256.

podman pull ghcr.io/valkyoth/fluxheim:v1.8.0-wasm

podman run --rm \
  -v ./fluxheim.toml:/etc/fluxheim/fluxheim.toml:ro,Z \
  -v /srv/infra/fluxheim/plugins:/etc/fluxheim/plugins:ro,Z \
  ghcr.io/valkyoth/fluxheim:v1.8.0-wasm

Raíces de plugins aprobadas

Los archivos de plugins deben ser archivos regulares absolutos bajo raíces aprobadas, sin archivos ni rutas padre con symlink.

[wasm]
enabled = true
plugin_roots = ["/etc/fluxheim/plugins"]
max_total_concurrent_executions = 256
max_total_preview_concurrent_executions = 32
max_total_cache_concurrent_executions = 256

[[wasm.plugins]]
name = "security_headers"
path = "/etc/fluxheim/plugins/security_headers.wasm"
sha256 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
abi = "fluxheim-policy-v1"
host_call_namespace = "fluxheim-policy-v1"
phases = ["response-headers"]
fail_mode = "fail-closed"

[[wasm.attachments]]
plugin = "security_headers"
vhost = "example"
priority = 100
phases = ["response-headers"]

Ejecución acotada

Los límites de fuel, memoria, tabla, instancia, timeout de compilación, workers de compilación y watchdog por llamada mantienen acotada la sandbox.

[wasm.plugins.limits]
max_module_bytes = "1MiB"
max_compiled_artifact_bytes = "32MiB"
max_memory_bytes = "16MiB"
max_table_elements = 10000
fuel = 5000000
timeout_ms = 50
compile_timeout_ms = 500

Notas de producción

Un montaje de contenedor de solo lectura no protege sus archivos en el host. Asigne la propiedad de la configuración del host y del directorio de plugins a una cuenta de confianza sin permisos de escritura.

  • Los manifiestos públicos de complementos deben incluir un resumen SHA-256 fijo. En todo el proceso se compilan como máximo dos módulos a la vez. La salida compilada tiene un límite predeterminado de 32 MiB y no puede superar los 256 MiB.
  • Mantenga los archivos de configuración y todos los directorios superiores existentes bajo una propiedad de confianza y sin permisos de escritura para el grupo ni para otros usuarios.
  • Fija versiones de release o image digests.
  • Mantén secrets en archivos, entorno o container secrets, no en docs públicos.

Full docs on GitHub

Español