Fluxheim/Doku/WASM-Erweiterungen

WASM-Erweiterungen

Eigener Wasm-Build auf Basis vom vollständigen Produktionsprofil, mit begrenztn Richtlinien-Hooks, ACME, Metriken und OpenTelemetry

Wosd griagst

Eigener Wasm-Build auf Basis vom vollständigen Produktionsprofil, mit begrenztn Richtlinien-Hooks, ACME, Metriken und OpenTelemetry.

Feature-BereichNutz es für
ZugriffsentscheidungaLive native HTTP/1 access-decision-Hooks nutzn Priorität, first-deny-wins-Zsammensetzung und fail-closed-Verhoidn.
Header-Hooksrequest-headers- und response-headers-Hooks kenna nur zualossne synthetische Header setzn oda wegdoa, wia im policy-tier-Beispui.
Routenentscheidungenroute-decision-Hooks kennan nur weiterlaufen, ablehnen oder konfigurierte passende canary- und mirror-Routenbranches auswählen.
Cache-Entscheidungencache-lookup-Hooks kenna continue, pass, bypass oder deny macha. cache-store-Hooks kenna vor Memory/Disk-Cache-Schreibvorgäng continue, skip storage oder deny macha.

Ausführn

Nimm des eigene profile-wasm-Archiv oder -Image; da normale vollständige Build bleibt mit Absicht ohne Wasm.

Des offizielle Wasm-Image enthält d Laufzeit, aber koane Betreiber-Plugins. Bind geprüfte Module bloß lesbar ei und heft jedes Modul mit SHA-256 fest.

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

Freigegebene Plugin-Wurzeln

Plugin-Datein miassn normale Dateien mit absoluten Pfad unter freigegebene Wurzln sei, ohne Symlinks oder Elternpfade.

[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"]

Begrenzte Ausführung

Fuel, memory, table, instance, compile-timeout, compile-worker and per-call watchdog limits keep the sandbox bounded.

[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

Produktionshinweise

A bloß lesbare Container-Einbindung schützt de Dateien am Host ned. Lass d Host-Konfiguration und s Plugin-Verzeichnis am vertrauenswürdign Konto ohne Schreibrecht ghörn.

  • Öffentliche Plugin-Manifeste brauchan an festen SHA-256-Prüfwert. Im ganzen Prozess werdn höchstens zwoa Module gleichzeitig kompiliert. D kompilierte Ausgab is standardmäßig auf 32 MiB begrenzt und derf 256 MiB ned überschreitn.
  • Konfigurationsdateien und alle vorhandenen übergeordneten Verzeichnisse unter vertrauenswürdiger Eigentümerschaft halten und für Gruppen oder andere Benutzer ned schreibbar machen.
  • Pinn Release-Versiona oder Image-Digests.
  • Bewahr Secrets in Dateien, Umgebung oder Container-Secrets auf, ned in öffentlicher Doku.

Full docs on GitHub

Boarisch