Fluxheim/Dokumentace/WASM rozšíření

WASM rozšíření

Samostatné sestavení Wasm založené na úplném produkčním profilu, s omezenými zásuvnými body zásad, ACME, metrikami a OpenTelemetry

Co to poskytuje

Samostatné sestavení Wasm založené na úplném produkčním profilu, s omezenými zásuvnými body zásad, ACME, metrikami a OpenTelemetry.

FunkcePoužij pro
Rozhodnutí o přístupuŽivé nativní HTTP/1 access-decision hooky používají pořadí priorit, kompozici first-deny-wins a fail-closed chování.
Header-hookyHooky request-headers a response-headers mohou nastavit nebo odebrat pouze povolené syntetické headery, například v ukázce policy-tier.
Rozhodnutí trasroute-decision hooky mohou pouze pokračovat, odmítnout nebo vybrat nakonfigurované odpovídající canary a mirror větve tras.
Cache rozhodnutícache-lookup hooks mohou provést continue, pass, bypass nebo deny. cache-store hooks mohou provést continue, skip storage nebo deny před zápisy do memory/disk cache.

Spustit

Použijte samostatný archiv nebo obraz profile-wasm; běžné úplné sestavení záměrně zůstává bez Wasm.

Oficiální obraz Wasm obsahuje běhové prostředí, ale žádné zásuvné moduly provozovatele. Kontrolované moduly připojte pouze pro čtení a každý modul připněte pomocí 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

Schválené kořeny pluginů

Soubory pluginů musí být absolutní regulární soubory pod schválenými rooty, bez symlinkovaných souborů nebo parent paths.

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

Omezené spouštění

Limity fuel, memory, table, instance, compile-timeout, compile-worker a per-call watchdog udržují sandbox omezený.

[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

Production poznámky

Připojení kontejneru pouze pro čtení nechrání soubory na hostiteli. Konfigurace hostitele a adresář zásuvných modulů mají patřit důvěryhodnému účtu bez práva zápisu.

  • Veřejné manifesty pluginů musí obsahovat pevně daný otisk SHA-256. V celém procesu lze současně kompilovat nejvýše dva moduly. Výchozí limit kompilovaného výstupu je 32 MiB a nelze překročit 256 MiB.
  • Konfigurační soubory a všechny existující nadřazené adresáře ponechte v důvěryhodném vlastnictví a bez práva zápisu pro skupinu či ostatní uživatele.
  • Fixuj release version nebo image digest.
  • Drž secret ve file, environment nebo container secrets, ne ve veřejné dokumentaci.

Full docs on GitHub

Čeština