Fluxheim/Dokumentation/WASM-Erweiterungen

WASM-Erweiterungen

Dedizierter Wasm-Build auf Basis des vollständigen Produktionsprofils mit begrenzten Policy-Hooks, ACME, Metriken und OpenTelemetry

Was du bekommst

Dedizierter Wasm-Build auf Basis des vollständigen Produktionsprofils mit begrenzten Policy-Hooks, ACME, Metriken und OpenTelemetry.

Feature-BereichNutze es für
ZugriffsentscheideLive native HTTP/1-access-decision-Hooks nutzen Prioritätsreihenfolge, first-deny-wins-Zusammenführung und Fail-closed-Verhalten.
Header-Hooksrequest-headers- und response-headers-Hooks können nur freigegebene synthetische Header wie das policy-tier-Beispiel setzen oder entfernen.
Routenentscheidungenroute-decision-Hooks können nur fortfahren, ablehnen oder konfigurierte passende canary- und mirror-Routenbranches auswählen.
Cache-Entscheidungencache-lookup-Hooks koennen continue, pass, bypass oder deny ausloesen. cache-store-Hooks koennen vor Memory/Disk-Cache-Schreibvorgaengen continue, skip storage oder deny ausloesen.

Ausführen

Verwenden Sie das dedizierte profile-wasm-Archiv oder -Image; der normale vollständige Build bleibt absichtlich Wasm-frei.

Das offizielle Wasm-Image enthält die Laufzeit, aber keine Betreiber-Plugins. Binden Sie geprüfte Module schreibgeschützt ein und fixieren Sie jedes Modul per 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

Freigegebene Plugin-Wurzeln

Plugin-Dateien müssen absolute reguläre Dateien unter freigegebenen Wurzeln sein, ohne Symlink-Dateien oder Symlink-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-, Speicher-, Tabellen-, Instanz-, Compile-Timeout-, Compile-Worker- und Watchdog-Limits pro Aufruf halten die Sandbox begrenzt.

[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

Eine schreibgeschützte Container-Einbindung schützt die Dateien auf dem Host nicht. Lassen Sie Hostkonfiguration und Plugin-Verzeichnis einem vertrauenswürdigen Konto ohne Schreibrechte gehören.

  • Öffentliche Plugin-Manifeste müssen einen festen SHA-256-Prüfwert enthalten. Prozessweit werden höchstens zwei Module gleichzeitig kompiliert. Kompilierte Ausgaben sind standardmässig auf 32 MiB begrenzt und dürfen 256 MiB nicht überschreiten.
  • Halten Sie Konfigurationsdateien und jedes vorhandene übergeordnete Verzeichnis unter vertrauenswürdiger Eigentümerschaft und ohne Schreibrechte für Gruppen oder andere Benutzer.
  • Pinne Release-Versionen oder Image-Digests.
  • Bewahre Secrets in Dateien, Umgebung oder Container-Secrets auf, nicht in öffentlichen Docs.

Full docs on GitHub

Deutsch (Schweiz)