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.