WASM拡張

本番向けフルプロファイルを基盤に、ポリシーフックの実行範囲を制限し、ACME、メトリクス、OpenTelemetry に対応した専用 Wasm ビルド

得られるもの

本番向けフルプロファイルを基盤に、ポリシーフックの実行範囲を制限し、ACME、メトリクス、OpenTelemetry に対応した専用 Wasm ビルド.

機能用途
アクセス判定native HTTP/1 の access-decision hook は、優先順位、first-deny-wins の合成、fail-closed 動作で実行されます。
Header hookrequest-headersresponse-headers の hook は、policy-tier の例のような許可リスト済みの合成 header だけを設定または削除できます。
ルート判定route-decision hook は、続行、拒否、または一致した設定済み canary / mirror ルート分岐の選択だけを行えます。
Cache 判断cache-lookup hooks は continue、pass、bypass、deny を選べます。cache-store hooks は memory/disk cache writes の前に continue、skip storage、deny を選べます。

実行

専用の 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

承認済みプラグインルート

プラグインファイルは、承認済み root 配下の absolute path を持つ regular file でなければならず、symlink や parent path は使えません。

[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

本番運用メモ

コンテナ側を読み取り専用でマウントしても、ホスト上のファイル自体は保護されません。ホストの設定とプラグイン用ディレクトリは、信頼できる所有者のもとで書き込み不可にしてください。

  • 公開マニフェストにはSHA-256固定値が必要です。コンパイルはプロセス全体で同時に最大2件までで、生成物の上限は既定で32 MiB、絶対上限は256 MiBです。
  • config file と、既に存在するすべての親 directory は信頼できる所有者の管理下に置き、group や他の user が書き込めないようにしてください。
  • リリースバージョンまたはイメージダイジェストを固定します。
  • シークレットは公開ドキュメントではなく、ファイル、環境変数、コンテナシークレットに置きます。

Full docs on GitHub

日本語