WASM拡張
本番向けフルプロファイルを基盤に、ポリシーフックの実行範囲を制限し、ACME、メトリクス、OpenTelemetry に対応した専用 Wasm ビルド
得られるもの
本番向けフルプロファイルを基盤に、ポリシーフックの実行範囲を制限し、ACME、メトリクス、OpenTelemetry に対応した専用 Wasm ビルド.
| 機能 | 用途 |
|---|---|
| アクセス判定 | native HTTP/1 の access-decision hook は、優先順位、first-deny-wins の合成、fail-closed 動作で実行されます。 |
| Header hook | request-headers と response-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 が書き込めないようにしてください。
- リリースバージョンまたはイメージダイジェストを固定します。
- シークレットは公開ドキュメントではなく、ファイル、環境変数、コンテナシークレットに置きます。