Fluxheim/Документация/WASM-расширения

WASM-расширения

Отдельная сборка Wasm на основе полного производственного профиля с ограниченными перехватчиками политик, ACME, метриками и OpenTelemetry

Что это дает

Отдельная сборка Wasm на основе полного производственного профиля с ограниченными перехватчиками политик, ACME, метриками и OpenTelemetry.

Feature-функцияИспользуйте для
Решения доступаЖивые native HTTP/1 access-decision hooks используют порядок приоритетов, композицию first-deny-wins и поведение fail-closed.
Хуки заголовковHooks request-headers и response-headers могут задавать или удалять только разрешённые синтетические headers, как в примере policy-tier.
Решения маршрутовroute-decision hooks могут только продолжить, запретить или выбрать настроенные совпадающие ветви маршрута canary и mirror.
Cache-решенияcache-lookup hooks могут continue, pass, bypass или deny. cache-store hooks могут continue, skip storage или deny перед memory/disk cache writes.

Запуск

Используйте отдельный архив или образ profile-wasm; обычная полная сборка намеренно остаётся без Wasm.

Официальный образ Wasm содержит среду выполнения, но не содержит операторских плагинов. Подключайте проверенные модули только для чтения и фиксируйте каждый модуль по 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

Разрешённые корни плагинов

Файлы плагинов должны быть обычными файлами с абсолютными путями внутри утверждённых корней, без символических ссылок и переходов к родительским путям.

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

Ограниченное выполнение

Fuel, memory, table, instance, compile-timeout, compile-worker and per-call watchdog limits keep the sandbox bounded.

[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 notes для эксплуатации

Монтирование контейнера только для чтения не защищает его файлы на хосте. Конфигурация хоста и каталог плагинов должны принадлежать доверенной учётной записи без прав записи.

  • Публичные манифесты плагинов должны содержать фиксированный дайджест SHA-256. Во всём процессе одновременно компилируются не более двух модулей. Размер скомпилированного результата по умолчанию ограничен 32 MiB и не может превышать 256 MiB.
  • Конфигурационные файлы и все существующие родительские каталоги должны принадлежать доверенному владельцу и быть недоступны для записи группе и другим пользователям.
  • Закрепляйте release versions или image digests.
  • Держите secrets в files, environment или container secrets, а не в public docs.

Full docs on GitHub

Русский