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ès | Les 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êtes | Les 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 route | Les hooks route-decision peuvent seulement continuer, refuser ou sélectionner des branches de route canary et mirror configurées et correspondantes. |
| Décisions de cache | Les 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.