Fluxheim/Documentazione/Estensioni WASM

Estensioni WASM

Build Wasm dedicata basata sul profilo di produzione completo, con hook di policy limitati, ACME, metriche e OpenTelemetry

Cosa offre

Build Wasm dedicata basata sul profilo di produzione completo, con hook di policy limitati, ACME, metriche e OpenTelemetry.

FunzioneUsalo per
Decisioni di accessoGli hook access-decision HTTP/1 nativi live usano ordine di priorità, composizione first-deny-wins e comportamento fail-closed.
Hook per headerGli hook request-headers e response-headers possono impostare o rimuovere solo header sintetici consentiti, come nell’esempio policy-tier.
Decisioni di rottaGli hook route-decision possono solo continuare, negare o selezionare rami di rotta canary e mirror configurati e corrispondenti.
Decisioni cacheGli hook cache-lookup possono continuare, passare all origin, bypassare o negare. Gli hook cache-store possono continuare, saltare lo storage o negare prima delle scritture nella cache memoria/disco.

Esegui

Usa l'archivio o l'immagine profile-wasm dedicati; la normale build completa rimane intenzionalmente priva di Wasm.

L'immagine Wasm ufficiale contiene il runtime, ma nessun plugin dell'operatore. Monta i moduli verificati in sola lettura e vincola ogni modulo tramite 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

Radici plugin approvate

I file plugin devono essere file regolari assoluti sotto radici approvate, senza file o percorsi 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"]

Esecuzione limitata

I limiti di fuel, memoria, tabella, istanza, timeout di compilazione, worker di compilazione e watchdog per chiamata mantengono limitata 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

Note production

Un montaggio del container in sola lettura non protegge i file sull'host. Affida la configurazione dell'host e la directory dei plugin a un account attendibile privo di permessi di scrittura.

  • I manifest pubblici dei plugin devono includere un digest SHA-256 fisso. Nell'intero processo vengono compilati al massimo due moduli alla volta. L'output compilato ha un limite predefinito di 32 MiB e non può superare 256 MiB.
  • Mantieni i file di configurazione e ogni directory padre esistente sotto una proprietà attendibile e non scrivibili dal gruppo o da altri utenti.
  • Fissa versioni release o digest image.
  • Tieni i segreti in file, environment o secret container, non nella documentazione pubblica.

Full docs on GitHub

Italiano