Fluxheim/Документація/Розширення WASM

Розширення WASM

Окрема збірка Wasm на основі повного виробничого профілю з обмеженими перехоплювачами політик, ACME, метриками та OpenTelemetry

Що це дає

Окрема збірка Wasm на основі повного виробничого профілю з обмеженими перехоплювачами політик, ACME, метриками та OpenTelemetry.

МожливістьВикористовуйте для
Рішення доступуЖиві 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.

Запустити

Використовуйте окремий архів або образ 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

Схвалені корені плагінів

Файли plugin-ів мають бути абсолютними звичайними файлами під approved roots, без symlink-файлів або parent paths.

[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 і watchdog для кожного виклику тримають 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

Production-нотатки

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

  • Публічні маніфести плагінів мають містити фіксований дайджест SHA-256. У всьому процесі одночасно компілюються не більше двох модулів. Розмір скомпільованого результату за замовчуванням обмежено 32 MiB і він не може перевищувати 256 MiB.
  • Зберігайте config files і всі наявні parent directories під довіреною ownership та без права запису для group або інших users.
  • Pin випуск versions або image digests.
  • Keep секрети in файли, environment, або контейнер секрети, not in публічний docs.

Full docs on GitHub

Українська