Fluxheim/Documentos/Extensões WASM

Extensões WASM

Compilação Wasm dedicada baseada no perfil de produção completo, com hooks de política limitados, ACME, métricas e OpenTelemetry

O que oferece

Compilação Wasm dedicada baseada no perfil de produção completo, com hooks de política limitados, ACME, métricas e OpenTelemetry.

FuncionalidadeUse para
Decisões de acessoHooks access-decision HTTP/1 nativos em direto usam ordem de prioridade, composição first-deny-wins e comportamento fail-closed.
Hooks de cabeçalhosOs hooks request-headers e response-headers só podem definir ou remover cabeçalhos sintéticos permitidos, como o exemplo policy-tier.
Decisões de rotaHooks route-decision só podem continuar, negar ou selecionar ramos de rota canary e mirror configurados e correspondentes.
Decisões de cacheOs hooks cache-lookup podem fazer continue, pass, bypass ou deny. Os hooks cache-store podem fazer continue, skip storage ou deny antes de escritas na cache de memória/disco.

Executar

Use o arquivo ou a imagem profile-wasm dedicados; a compilação completa normal permanece intencionalmente sem Wasm.

A imagem Wasm oficial contém o ambiente de execução, mas não plugins do operador. Monte módulos revistos como só de leitura e fixe cada módulo por 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

Raízes de plugins aprovadas

Os ficheiros de plugins devem ser ficheiros regulares absolutos sob raízes aprovadas, sem ficheiros ou caminhos-pai com symlink.

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

Execução limitada

Os limites de fuel, memória, tabela, instância, timeout de compilação, workers de compilação e watchdog por chamada mantêm a sandbox limitada.

[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

Notas de produção

Uma montagem de contentor só de leitura não protege os ficheiros no anfitrião. Mantenha a configuração do anfitrião e o diretório de plugins sob controlo de uma conta de confiança sem permissão de escrita.

  • Os manifestos públicos dos plugins têm de incluir um resumo SHA-256 fixo. Em todo o processo são compilados, no máximo, dois módulos em simultâneo. A saída compilada tem um limite predefinido de 32 MiB e não pode exceder 256 MiB.
  • Mantenha os ficheiros de configuração e todos os diretórios superiores existentes sob propriedade de confiança e sem permissão de escrita para o grupo ou outros utilizadores.
  • Fixe versões de release ou image digests.
  • Mantenha secrets em ficheiros, ambiente ou container secrets, não em docs públicos.

Full docs on GitHub

Português