Fluxheim/Documentatie/WASM-extensies

WASM-extensies

Speciale Wasm-build op basis van het volledige productieprofiel, met begrensde beleidshooks, ACME, metrieken en OpenTelemetry

Wat het je geeft

Speciale Wasm-build op basis van het volledige productieprofiel, met begrensde beleidshooks, ACME, metrieken en OpenTelemetry.

FunctieGebruik het voor
ToegangsbeslissingenLive native HTTP/1 access-decision-hooks gebruiken prioriteitsvolgorde, first-deny-wins-compositie en fail-closed-gedrag.
Header-hooksrequest-headers- en response-headers-hooks kunnen alleen toegestane synthetische headers zetten of verwijderen, zoals het policy-tier-voorbeeld.
Routebeslissingenroute-decision-hooks kunnen alleen doorgaan, weigeren of geconfigureerde passende canary- en mirror-routebranches selecteren.
Cachebeslissingencache-lookup-hooks kunnen doorgaan, pass, bypass of deny kiezen. cache-store-hooks kunnen doorgaan, opslag overslaan of weigeren vóór writes naar memory/disk cache.

Uitvoeren

Gebruik het speciale profile-wasm-archief of de image; de normale volledige build blijft bewust zonder Wasm.

De officiële Wasm-image bevat de runtime, maar geen plugins van de beheerder. Koppel gecontroleerde modules als alleen-lezen en zet elke module vast met 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

Goedgekeurde pluginroots

Pluginbestanden moeten absolute reguliere bestanden onder goedgekeurde roots zijn, zonder symlinkbestanden of symlink-ouderpaden.

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

Begrensde uitvoering

Limieten voor fuel, geheugen, tabel, instantie, compile-timeout, compile-workers en watchdog per aanroep houden de sandbox begrensd.

[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

Productienotities

Een alleen-lezen containermount beschermt de bestanden op de host niet. Laat de hostconfiguratie en pluginmap beheren door een vertrouwd account zonder schrijfrechten.

  • Openbare pluginmanifesten moeten een vaste SHA-256-samenvatting bevatten. In het hele proces worden maximaal twee modules tegelijk gecompileerd. Gecompileerde uitvoer heeft standaard een limiet van 32 MiB en mag niet groter zijn dan 256 MiB.
  • Zorg dat configuratiebestanden en alle bestaande bovenliggende mappen vertrouwde eigenaren hebben en niet beschrijfbaar zijn door de groep of andere gebruikers.
  • Pin releaseversies of image-digests.
  • Houd secrets in bestanden, environment of container secrets, niet in publieke docs.

Full docs on GitHub

Nederlands