Fluxheim/Documentation/Extensions WASM

Extensions WASM

Build Wasm dédié basé sur le profil de production complet, avec hooks de politique bornés, ACME, métriques et OpenTelemetry

Ce que cela apporte

Build Wasm dédié basé sur le profil de production complet, avec hooks de politique bornés, ACME, métriques et OpenTelemetry.

FonctionnaliteÀ utiliser pour
Décisions d’accèsLes hooks access-decision HTTP/1 natifs en direct utilisent l’ordre de priorité, la composition first-deny-wins et un comportement fail-closed.
Hooks d’en-têtesLes hooks request-headers et response-headers ne peuvent définir ou retirer que des en-têtes synthétiques autorisés, comme l’exemple policy-tier.
Décisions de routeLes hooks route-decision peuvent seulement continuer, refuser ou sélectionner des branches de route canary et mirror configurées et correspondantes.
Décisions de cacheLes hooks cache-lookup peuvent continuer, transmettre à l’origine, contourner le cache ou refuser. Les hooks cache-store peuvent continuer, ignorer le stockage ou refuser avant les écritures cache mémoire/disque.

Exécuter

Utilisez l'archive ou l'image profile-wasm dédiée ; le build complet normal reste volontairement sans Wasm.

L'image Wasm officielle contient l'environnement d'exécution, mais aucun plugin fourni par l'exploitant. Montez les modules vérifiés en lecture seule et épinglez chacun d'eux avec 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

Racines de plugins approuvées

Les fichiers de plugins doivent être des fichiers réguliers absolus sous des racines approuvées, sans fichiers ni parents symboliques.

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

Exécution bornée

Les limites de fuel, mémoire, table, instance, délai de compilation, workers de compilation et watchdog par appel bornent 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

Notes de production

Un montage de conteneur en lecture seule ne protège pas ses fichiers sur l'hôte. Confiez la configuration de l'hôte et le répertoire des plugins à un compte de confiance sans droit d'écriture.

  • Les manifestes publics des modules doivent inclure une empreinte SHA-256 fixe. Au maximum deux modules sont compilés simultanément dans l'ensemble du processus. La sortie compilée est limitée par défaut à 32 MiB et ne peut pas dépasser 256 MiB.
  • Conservez les fichiers de configuration et tous leurs répertoires parents existants sous une propriété de confiance, sans droit d’écriture pour le groupe ni pour les autres utilisateurs.
  • Épinglez les versions de release ou les digests d'image.
  • Gardez les secrets dans des fichiers, l'environnement ou des secrets conteneur, pas dans la documentation publique.

Full docs on GitHub

Français